summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-09-18 10:09:54 +0100
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2020-09-30 16:34:13 +0200
commit7f34bbc45eac8212da46b10406c0a2627fb21cc7 (patch)
tree13bfd98ab51439af0eac5f38494f2c9bc413d3e3
parentd23aee00d016d89576e10c6635f55936f67fd7c7 (diff)
Related: tdf#136559 set multiple columns in model at the same time
reduces time from 40s to 13s Change-Id: I01d6a4fcaa5a868f9b9f9292f4a7e99e216ea23b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103156 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@cib.de> (cherry picked from commit 4475895d1b1da285bfe5bd73e383f1356d5e01b2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103570 Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com> Tested-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx42
1 files changed, 28 insertions, 14 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 2c77a4a4e9bf..caafbff7f538 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9263,6 +9263,26 @@ private:
return bRet;
}
+ void set_toggle(const GtkTreeIter& iter, TriState eState, int col)
+ {
+ col = get_model_col(col);
+ if (eState == TRISTATE_INDET)
+ {
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter),
+ m_aToggleVisMap[col], true, // checkbuttons are invisible until toggled on or off
+ m_aToggleTriStateMap[col], true, // tristate on
+ -1);
+ }
+ else
+ {
+ gtk_tree_store_set(m_pTreeStore, const_cast<GtkTreeIter*>(&iter),
+ m_aToggleVisMap[col], true, // checkbuttons are invisible until toggled on or off
+ m_aToggleTriStateMap[col], false, // tristate off
+ col, eState == TRISTATE_TRUE, // set toggle state
+ -1);
+ }
+ }
+
void set(const GtkTreeIter& iter, int col, const OUString& rText)
{
OString aStr(OUStringToOString(rText, RTL_TEXTENCODING_UTF8));
@@ -10351,20 +10371,6 @@ public:
return get_bool(rGtkIter.iter, col) ? TRISTATE_TRUE : TRISTATE_FALSE;
}
- virtual void set_toggle(int pos, TriState eState, int col) override
- {
- col = get_model_col(col);
- // checkbuttons are invisible until toggled on or off
- set(pos, m_aToggleVisMap[col], true);
- if (eState == TRISTATE_INDET)
- set(pos, m_aToggleTriStateMap[col], true);
- else
- {
- set(pos, m_aToggleTriStateMap[col], false);
- set(pos, col, eState == TRISTATE_TRUE);
- }
- }
-
virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col) override
{
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
@@ -10380,6 +10386,14 @@ public:
}
}
+ virtual void set_toggle(int pos, TriState eState, int col) override
+ {
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ GtkTreeIter iter;
+ if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
+ set_toggle(iter, eState, col);
+ }
+
virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override
{
const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);