listview: Make inertness not depend on factory

The inertness concept introduced in 62e9d1e470 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.
This commit is contained in:
Benjamin Otte
2023-04-12 17:00:08 +02:00
parent ddefbfa8b5
commit c88ac79437
2 changed files with 5 additions and 18 deletions

View 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]);
}

View 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;