From: Benjamin Otte Date: Sat, 10 Jun 2023 18:20:51 +0000 (+0200) Subject: listitemmanager: All sections without widgets are unmatched X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~161^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c2fef6f6fdf145071a67f2ce7fe8a798500aeff9;p=gtk4.git listitemmanager: All sections without widgets are unmatched We were failing to mark sections when both the start and end of the untracked area fell on a section boundary. Fixes testsuite failure in https://gitlab.gnome.org/GNOME/gtk/-/jobs/2878290 --- diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c index b25cac7b06..7ca0664c42 100644 --- a/gtk/gtklistitemmanager.c +++ b/gtk/gtklistitemmanager.c @@ -1116,13 +1116,12 @@ static void gtk_list_item_manager_release_items (GtkListItemManager *self, GtkListItemChange *change) { - GtkListTile *tile; + GtkListTile *tile, *header; guint position, i, n_items, query_n_items; gboolean tracked, deleted_section; n_items = g_list_model_get_n_items (G_LIST_MODEL (self->model)); position = 0; - deleted_section = FALSE; while (position < n_items) { @@ -1133,7 +1132,16 @@ gtk_list_item_manager_release_items (GtkListItemManager *self, continue; } + deleted_section = FALSE; tile = gtk_list_item_manager_get_nth (self, position, &i); + if (i == 0) + { + header = gtk_list_tile_get_previous_skip (tile); + if (!gtk_list_tile_is_header (header)) + header = NULL; + } + else + header = NULL; i = position - i; while (i < position + query_n_items) { @@ -1158,6 +1166,7 @@ gtk_list_item_manager_release_items (GtkListItemManager *self, case GTK_LIST_TILE_UNMATCHED_FOOTER: gtk_list_tile_set_type (tile, GTK_LIST_TILE_REMOVED); deleted_section = TRUE; + header = NULL; break; case GTK_LIST_TILE_REMOVED: @@ -1167,11 +1176,14 @@ gtk_list_item_manager_release_items (GtkListItemManager *self, } tile = gtk_list_tile_get_next_skip (tile); } + if (header && gtk_list_tile_is_footer (tile)) + deleted_section = TRUE; if (deleted_section) { - tile = gtk_list_tile_get_header (self, tile); - gtk_list_item_change_clear_header (change, &tile->widget); - gtk_list_tile_set_type (tile, GTK_LIST_TILE_UNMATCHED_HEADER); + if (header == NULL) + header = gtk_list_tile_get_header (self, tile); + gtk_list_item_change_clear_header (change, &header->widget); + gtk_list_tile_set_type (header, GTK_LIST_TILE_UNMATCHED_HEADER); tile = gtk_list_tile_get_footer (self, tile); gtk_list_tile_set_type (tile, GTK_LIST_TILE_UNMATCHED_FOOTER);