From: Benjamin Otte Date: Fri, 3 Mar 2023 01:38:24 +0000 (+0100) Subject: listview: Handle emptying of views X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~5^2~61^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b488fae893ebba2a75f313dc6b9c1807e21225aa;p=gtk4.git 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. --- 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))) {