summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-03 02:38:24 +0100
committerBenjamin Otte <otte.benjamin@googlemail.com>2023-03-05 15:23:20 +0000
commitb488fae893ebba2a75f313dc6b9c1807e21225aa (patch)
tree93f603f32231e57a3ced2c7d5be5791a355228cc
parentb962defc11d05695b477e57d22fade977e37915c (diff)
downloadgtk+-b488fae893ebba2a75f313dc6b9c1807e21225aa.tar.gz
listview: Handle emptying of views
The previous check does not longer work. When a model gets all items deleted, there will still be existing tiles until the next time garbage collection is run. So do that before checking if the list is empty.
-rw-r--r--gtk/gtkgridview.c5
-rw-r--r--gtk/gtklistview.c5
2 files changed, 6 insertions, 4 deletions
diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c
index fa2b837af4..35a634d119 100644
--- a/gtk/gtkgridview.c
+++ b/gtk/gtkgridview.c
@@ -617,7 +617,8 @@ gtk_grid_view_size_allocate (GtkWidget *widget,
min_row_height = ceil ((double) height / GTK_GRID_VIEW_MAX_VISIBLE_ROWS);
/* step 0: exit early if list is empty */
- if (gtk_list_item_manager_get_root (self->item_manager) == NULL)
+ tile = gtk_list_tile_gc (self->item_manager, gtk_list_item_manager_get_first (self->item_manager));
+ if (tile == NULL)
{
gtk_list_base_allocate (GTK_LIST_BASE (self));
return;
@@ -634,7 +635,7 @@ gtk_grid_view_size_allocate (GtkWidget *widget,
/* step 2: determine height of known rows */
heights = g_array_new (FALSE, FALSE, sizeof (int));
- for (tile = gtk_list_tile_gc (self->item_manager, gtk_list_item_manager_get_first (self->item_manager));
+ for (;
tile != NULL;
tile = gtk_list_tile_gc (self->item_manager, tile))
{
diff --git a/gtk/gtklistview.c b/gtk/gtklistview.c
index e9d5d11cf8..07f6e15303 100644
--- a/gtk/gtklistview.c
+++ b/gtk/gtklistview.c
@@ -491,7 +491,8 @@ gtk_list_view_size_allocate (GtkWidget *widget,
opposite_scroll_policy = gtk_list_base_get_scroll_policy (GTK_LIST_BASE (self), opposite_orientation);
/* step 0: exit early if list is empty */
- if (gtk_list_item_manager_get_root (self->item_manager) == NULL)
+ tile = gtk_list_tile_gc (self->item_manager, gtk_list_item_manager_get_first (self->item_manager));
+ if (tile == NULL)
{
gtk_list_base_allocate (GTK_LIST_BASE (self));
return;
@@ -510,7 +511,7 @@ gtk_list_view_size_allocate (GtkWidget *widget,
/* step 2: determine height of known list items and gc the list */
heights = g_array_new (FALSE, FALSE, sizeof (int));
- for (tile = gtk_list_tile_gc (self->item_manager, gtk_list_item_manager_get_first (self->item_manager));
+ for (;
tile != NULL;
tile = gtk_list_tile_gc (self->item_manager, gtk_rb_tree_node_get_next (tile)))
{