listitemmanager: Add a type to tiles
authorBenjamin Otte <otte@redhat.com>
Wed, 5 Apr 2023 00:49:03 +0000 (02:49 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 May 2023 15:00:39 +0000 (17:00 +0200)
There's only one type for now, but hey, you have to start somewhere.

gtk/gtklistitemmanager.c
gtk/gtklistitemmanagerprivate.h

index 8ef33b5def00a13aea32b4f9ffa20a5dd8538027..e73b1512bf7ea5bb5c3dc695cb03976fcb0c6fef 100644 (file)
@@ -621,6 +621,7 @@ gtk_list_item_manager_add_items (GtkListItemManager *self,
     tile = gtk_list_item_manager_ensure_split (self, tile, offset);
 
   tile = gtk_rb_tree_insert_before (self->items, tile);
+  tile->type = GTK_LIST_TILE_ITEM;
   tile->n_items = n_items;
   gtk_rb_tree_node_mark_dirty (tile);
 
@@ -632,7 +633,8 @@ gtk_list_item_manager_merge_list_items (GtkListItemManager *self,
                                         GtkListTile        *first,
                                         GtkListTile        *second)
 {
-  if (first->widget || second->widget)
+  if (first->widget || second->widget ||
+      first->type != GTK_LIST_TILE_ITEM || second->type != GTK_LIST_TILE_ITEM)
     return FALSE;
 
   first->n_items += second->n_items;
@@ -666,8 +668,10 @@ gtk_list_tile_split (GtkListItemManager *self,
   GtkListTile *result;
 
   g_assert (n_items <= tile->n_items);
+  g_assert (tile->type == GTK_LIST_TILE_ITEM);
 
   result = gtk_rb_tree_insert_after (self->items, tile);
+  result->type = GTK_LIST_TILE_ITEM;
   result->n_items = tile->n_items - n_items;
   tile->n_items = n_items;
   gtk_rb_tree_node_mark_dirty (tile);
index 44a9ac82ea4a4deeb60fa7486a5cd1168d5aff7f..a82e686266947629b5a687e9fecf23e0521a2d54 100644 (file)
@@ -43,8 +43,14 @@ typedef struct _GtkListTile GtkListTile;
 typedef struct _GtkListTileAugment GtkListTileAugment;
 typedef struct _GtkListItemTracker GtkListItemTracker;
 
+typedef enum
+{
+  GTK_LIST_TILE_ITEM
+} GtkListTileType;
+
 struct _GtkListTile
 {
+  GtkListTileType type;
   GtkWidget *widget;
   guint n_items;
   /* area occupied by tile. May be empty if tile has no allcoation */