listview: Make inertness not depend on factory
authorBenjamin Otte <otte@redhat.com>
Wed, 12 Apr 2023 15:00:08 +0000 (17:00 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 May 2023 15:03:35 +0000 (17:03 +0200)
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
gtk/gtklistview.c

index 6299766c2f513bae0929941a8fa97c7578141c3d..274f34c3c9502a4e954d549760d10f9c673abb8f 100644 (file)
@@ -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]);
 }
 
index 0283ec8b4cb9bc8a757044cdc6958f52e6f51ef2..ef274d93a4797afbf911e68bd9dd20a11a864377 100644 (file)
@@ -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;