diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-03 02:38:24 +0100 |
---|---|---|
committer | Benjamin Otte <otte.benjamin@googlemail.com> | 2023-03-05 15:23:20 +0000 |
commit | b488fae893ebba2a75f313dc6b9c1807e21225aa (patch) | |
tree | 93f603f32231e57a3ced2c7d5be5791a355228cc | |
parent | b962defc11d05695b477e57d22fade977e37915c (diff) | |
download | gtk+-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.c | 5 | ||||
-rw-r--r-- | gtk/gtklistview.c | 5 |
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))) { |