listitemmanager: Add gtk_list_tile_set_type()
authorBenjamin Otte <otte@redhat.com>
Sat, 8 Apr 2023 01:47:13 +0000 (03:47 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 May 2023 15:00:39 +0000 (17:00 +0200)
gtk/gtklistitemmanager.c

index 346464289b362d8dfc43bad866d8e961e399523c..1be9ed0dce6507600f8d8f4347a338ab3163b9d2 100644 (file)
@@ -602,6 +602,17 @@ gtk_list_tile_set_area_size (GtkListItemManager *self,
   gtk_rb_tree_node_mark_dirty (tile);
 }
 
+static void
+gtk_list_tile_set_type (GtkListTile     *tile,
+                        GtkListTileType  type)
+{
+  if (tile->type == type)
+    return;
+
+  tile->type = type;
+  gtk_rb_tree_node_mark_dirty (tile);
+}
+
 static void
 gtk_list_item_tracker_unset_position (GtkListItemManager *self,
                                       GtkListItemTracker *tracker)
@@ -748,10 +759,8 @@ gtk_list_item_manager_remove_items (GtkListItemManager *self,
         case GTK_LIST_TILE_UNMATCHED_FOOTER:
           if (header)
             {
-              header->type = GTK_LIST_TILE_REMOVED;
-              gtk_rb_tree_node_mark_dirty (header);
-              tile->type = GTK_LIST_TILE_REMOVED;
-              gtk_rb_tree_node_mark_dirty (tile);
+              gtk_list_tile_set_type (header, GTK_LIST_TILE_REMOVED);
+              gtk_list_tile_set_type (tile, GTK_LIST_TILE_REMOVED);
               header = NULL;
             }
           break;
@@ -771,8 +780,7 @@ gtk_list_item_manager_remove_items (GtkListItemManager *self,
           tile->widget = NULL;
           n_items -= tile->n_items;
           tile->n_items = 0;
-          tile->type = GTK_LIST_TILE_REMOVED;
-          gtk_rb_tree_node_mark_dirty (tile);
+          gtk_list_tile_set_type (tile, GTK_LIST_TILE_REMOVED);
           break;
 
         default:
@@ -791,10 +799,8 @@ gtk_list_item_manager_remove_items (GtkListItemManager *self,
         {
           if (tile->type == GTK_LIST_TILE_FOOTER || tile->type == GTK_LIST_TILE_UNMATCHED_FOOTER)
             {
-              header->type = GTK_LIST_TILE_REMOVED;
-              gtk_rb_tree_node_mark_dirty (header);
-              tile->type = GTK_LIST_TILE_REMOVED;
-              gtk_rb_tree_node_mark_dirty (tile);
+              gtk_list_tile_set_type (header, GTK_LIST_TILE_REMOVED);
+              gtk_list_tile_set_type (tile, GTK_LIST_TILE_REMOVED);
               break;
             }
         }