vcl/unx/gtk3/gtk3gtkinst.cxx | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-)
New commits: commit 64387d6e0546719f7853facade35d1d3fa2abc2a Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sun Sep 20 19:07:44 2020 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Mon Sep 21 12:57:35 2020 +0200 add some more thaw/freeze uses to try and squeeze out a little more performance. Its plausible that disconnecting the model from treeview with gtk_tree_view_set_model(..., nullptr) no longer improves times. If we didn't do that, then we could thaw/freeze without losing what nodes are expanded and the current scroll pos. Change-Id: I3f7da6e4873b37d53441abdb7e9e0b946b956ad4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103077 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 94574376acf2..f707a0e473f1 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2887,10 +2887,12 @@ public: virtual void freeze() override { gtk_widget_freeze_child_notify(m_pWidget); + g_object_freeze_notify(G_OBJECT(m_pWidget)); } virtual void thaw() override { + g_object_thaw_notify(G_OBJECT(m_pWidget)); gtk_widget_thaw_child_notify(m_pWidget); } @@ -10694,6 +10696,8 @@ public: virtual void all_foreach(const std::function<bool(weld::TreeIter&)>& func) override { + g_object_freeze_notify(G_OBJECT(m_pTreeModel)); + GtkInstanceTreeIter aGtkIter(nullptr); if (get_iter_first(aGtkIter)) { @@ -10703,10 +10707,14 @@ public: break; } while (iter_next(aGtkIter)); } + + g_object_thaw_notify(G_OBJECT(m_pTreeModel)); } virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override { + g_object_freeze_notify(G_OBJECT(m_pTreeModel)); + GtkInstanceTreeIter aGtkIter(nullptr); GtkTreeModel* pModel; @@ -10719,10 +10727,14 @@ public: break; } g_list_free_full(pList, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free)); + + g_object_thaw_notify(G_OBJECT(m_pTreeModel)); } virtual void visible_foreach(const std::function<bool(weld::TreeIter&)>& func) override { + g_object_freeze_notify(G_OBJECT(m_pTreeModel)); + GtkTreePath* start_path; GtkTreePath* end_path; @@ -10747,6 +10759,8 @@ public: gtk_tree_path_free(start_path); gtk_tree_path_free(end_path); + + g_object_thaw_notify(G_OBJECT(m_pTreeModel)); } virtual void connect_visible_range_changed(const Link<weld::TreeView&, void>& rLink) override @@ -11430,9 +11444,10 @@ public: virtual void freeze() override { disable_notify_events(); - g_object_ref(m_pTreeModel); GtkInstanceContainer::freeze(); + g_object_ref(m_pTreeModel); gtk_tree_view_set_model(m_pTreeView, nullptr); + g_object_freeze_notify(G_OBJECT(m_pTreeModel)); if (m_xSorter) { int nSortColumn; @@ -11457,9 +11472,10 @@ public: m_aSavedSortTypes.pop_back(); m_aSavedSortColumns.pop_back(); } + g_object_thaw_notify(G_OBJECT(m_pTreeModel)); gtk_tree_view_set_model(m_pTreeView, GTK_TREE_MODEL(m_pTreeModel)); - GtkInstanceContainer::thaw(); g_object_unref(m_pTreeModel); + GtkInstanceContainer::thaw(); enable_notify_events(); } @@ -12036,18 +12052,20 @@ public: virtual void freeze() override { disable_notify_events(); - g_object_ref(m_pTreeStore); GtkInstanceContainer::freeze(); + g_object_ref(m_pTreeStore); gtk_icon_view_set_model(m_pIconView, nullptr); + g_object_freeze_notify(G_OBJECT(m_pTreeStore)); enable_notify_events(); } virtual void thaw() override { disable_notify_events(); + g_object_thaw_notify(G_OBJECT(m_pTreeStore)); gtk_icon_view_set_model(m_pIconView, GTK_TREE_MODEL(m_pTreeStore)); - GtkInstanceContainer::thaw(); g_object_unref(m_pTreeStore); + GtkInstanceContainer::thaw(); enable_notify_events(); } @@ -14926,9 +14944,10 @@ public: virtual void freeze() override { disable_notify_events(); - g_object_ref(m_pTreeModel); GtkInstanceContainer::freeze(); + g_object_ref(m_pTreeModel); gtk_tree_view_set_model(m_pTreeView, nullptr); + g_object_freeze_notify(G_OBJECT(m_pTreeModel)); if (m_xSorter) { GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeModel); @@ -14945,10 +14964,11 @@ public: GtkTreeSortable* pSortable = GTK_TREE_SORTABLE(m_pTreeModel); gtk_tree_sortable_set_sort_column_id(pSortable, m_nTextCol, GTK_SORT_ASCENDING); } + g_object_thaw_notify(G_OBJECT(m_pTreeModel)); gtk_tree_view_set_model(m_pTreeView, m_pTreeModel); + g_object_unref(m_pTreeModel); GtkInstanceContainer::thaw(); - g_object_unref(m_pTreeModel); enable_notify_events(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits