vcl/unx/gtk3/gtk3gtkinst.cxx | 55 +++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-)
New commits: commit e43087375f41a1bb5676f530dfb60dfe79a3f7b2 Author: Caolán McNamara <[email protected]> AuthorDate: Fri Sep 18 10:09:54 2020 +0100 Commit: Szymon Kłos <[email protected]> CommitDate: Mon Nov 30 18:18:47 2020 +0100 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/+/102988 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106872 Tested-by: Szymon Kłos <[email protected]> Reviewed-by: Szymon Kłos <[email protected]> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 62892750270b..2b89dd05e737 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -8179,6 +8179,30 @@ private: return bRet; } + void set_toggle(const GtkTreeIter& iter, TriState eState, int col) + { + if (col == -1) + col = m_nExpanderToggleCol; + else + col = to_internal_model(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)); @@ -9015,33 +9039,18 @@ public: return get_bool(rGtkIter.iter, col) ? TRISTATE_TRUE : TRISTATE_FALSE; } - virtual void set_toggle(int pos, TriState eState, int col) override + virtual void set_toggle(const weld::TreeIter& rIter, 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); - } + const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter); + set_toggle(rGtkIter.iter, eState, col); } - virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col) override + virtual void set_toggle(int pos, TriState eState, int col) override { - const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter); - col = get_model_col(col); - // checkbuttons are invisible until toggled on or off - set(rGtkIter.iter, m_aToggleVisMap[col], true); - if (eState == TRISTATE_INDET) - set(rGtkIter.iter, m_aToggleTriStateMap[col], true); - else - { - set(rGtkIter.iter, m_aToggleTriStateMap[col], false); - set(rGtkIter.iter, col, eState == TRISTATE_TRUE); - } + 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_text_emphasis(const weld::TreeIter& rIter, bool bOn, int col) override _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
