From c88ac79437f1a88b8ba56ff48e6d5fcab95c04ca Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 12 Apr 2023 17:00:08 +0200 Subject: [PATCH] listview: Make inertness not depend on factory The inertness concept introduced in 62e9d1e470b assumed a listview was inert when no factory was set. This has 2 problems: 1. columnview uses a listview without factories. 2. header factory being set but factory not being set technically makes the listiew inert - but should it? So for now, make inertness only depend on visibility and root. A side benefit is that this matches columnview semantics. --- gtk/gtkgridview.c | 10 +--------- gtk/gtklistview.c | 13 ++++--------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c index 6299766c2f..274f34c3c9 100644 --- a/gtk/gtkgridview.c +++ b/gtk/gtkgridview.c @@ -264,8 +264,7 @@ gtk_grid_view_is_inert (GtkGridView *self) GtkWidget *widget = GTK_WIDGET (self); return !gtk_widget_get_visible (widget) || - gtk_widget_get_root (widget) == NULL || - self->factory == NULL; + gtk_widget_get_root (widget) == NULL; } static void @@ -1330,19 +1329,12 @@ void gtk_grid_view_set_factory (GtkGridView *self, GtkListItemFactory *factory) { - gboolean was_inert; - g_return_if_fail (GTK_IS_GRID_VIEW (self)); g_return_if_fail (factory == NULL || GTK_IS_LIST_ITEM_FACTORY (factory)); - was_inert = gtk_grid_view_is_inert (self); - if (!g_set_object (&self->factory, factory)) return; - if (!was_inert || !gtk_grid_view_is_inert (self)) - gtk_grid_view_update_factories (self); - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]); } diff --git a/gtk/gtklistview.c b/gtk/gtklistview.c index 0283ec8b4c..ef274d93a4 100644 --- a/gtk/gtklistview.c +++ b/gtk/gtklistview.c @@ -208,8 +208,7 @@ gtk_list_view_is_inert (GtkListView *self) GtkWidget *widget = GTK_WIDGET (self); return !gtk_widget_get_visible (widget) || - gtk_widget_get_root (widget) == NULL || - self->factory == NULL; + gtk_widget_get_root (widget) == NULL; } static void @@ -1101,18 +1100,13 @@ void gtk_list_view_set_factory (GtkListView *self, GtkListItemFactory *factory) { - gboolean was_inert; - g_return_if_fail (GTK_IS_LIST_VIEW (self)); g_return_if_fail (factory == NULL || GTK_IS_LIST_ITEM_FACTORY (factory)); - was_inert = gtk_list_view_is_inert (self); - if (!g_set_object (&self->factory, factory)) return; - if (!was_inert || !gtk_list_view_is_inert (self)) - gtk_list_view_update_factories (self); + gtk_list_view_update_factories (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]); } @@ -1163,7 +1157,8 @@ gtk_list_view_set_header_factory (GtkListView *self, gtk_list_item_manager_set_has_sections (self->item_manager, factory != NULL); - if (had_sections && gtk_list_item_manager_get_has_sections (self->item_manager)) + if (!gtk_list_view_is_inert (self) && + had_sections && gtk_list_item_manager_get_has_sections (self->item_manager)) { GtkListTile *tile; -- 2.30.2