summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-04-07 04:00:00 +0200
committerBenjamin Otte <otte@redhat.com>2023-05-09 17:00:39 +0200
commite680abc723a1710a0933bb1d63e259145affaf5e (patch)
tree9eaebb8d60c122d0191de4eb74cbc63e16d757a7 /gtk
parentcecaede6104f45193088bdc36108aadd8960db2d (diff)
downloadgtk+-e680abc723a1710a0933bb1d63e259145affaf5e.tar.gz
listitemmanager: Add section tiles
For now, we just have a HEADER at the start and a FOOTER at the end. That's hard enough to get right.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtklistitemmanager.c13
-rw-r--r--gtk/gtklistitemmanagerprivate.h4
2 files changed, 17 insertions, 0 deletions
diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c
index f976b0063e..10ca102e27 100644
--- a/gtk/gtklistitemmanager.c
+++ b/gtk/gtklistitemmanager.c
@@ -132,6 +132,7 @@ gtk_list_item_manager_new (GtkWidget *widget,
GtkListItemBase * (* create_widget) (GtkWidget *))
{
GtkListItemManager *self;
+ GtkListTile *header, *footer;
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
@@ -148,6 +149,12 @@ gtk_list_item_manager_new (GtkWidget *widget,
gtk_list_item_manager_clear_node,
NULL);
+ header = gtk_rb_tree_insert_after (self->items, NULL);
+ header->type = GTK_LIST_TILE_HEADER;
+
+ footer = gtk_rb_tree_insert_before (self->items, NULL);
+ footer->type = GTK_LIST_TILE_FOOTER;
+
return self;
}
@@ -618,6 +625,8 @@ gtk_list_item_manager_add_items (GtkListItemManager *self,
return;
tile = gtk_list_item_manager_get_nth (self, position, &offset);
+ if (tile == NULL)
+ tile = gtk_rb_tree_get_last (self->items);
if (offset)
tile = gtk_list_item_manager_ensure_split (self, tile, offset);
@@ -761,6 +770,10 @@ gtk_list_tile_gc (GtkListItemManager *self,
continue;
break;
+ case GTK_LIST_TILE_HEADER:
+ case GTK_LIST_TILE_FOOTER:
+ case GTK_LIST_TILE_UNMATCHED_HEADER:
+ case GTK_LIST_TILE_UNMATCHED_FOOTER:
case GTK_LIST_TILE_FILLER:
break;
diff --git a/gtk/gtklistitemmanagerprivate.h b/gtk/gtklistitemmanagerprivate.h
index df6e0d1211..9efaf0461b 100644
--- a/gtk/gtklistitemmanagerprivate.h
+++ b/gtk/gtklistitemmanagerprivate.h
@@ -46,6 +46,10 @@ typedef struct _GtkListItemTracker GtkListItemTracker;
typedef enum
{
GTK_LIST_TILE_ITEM,
+ GTK_LIST_TILE_HEADER,
+ GTK_LIST_TILE_FOOTER,
+ GTK_LIST_TILE_UNMATCHED_HEADER,
+ GTK_LIST_TILE_UNMATCHED_FOOTER,
GTK_LIST_TILE_FILLER,
GTK_LIST_TILE_REMOVED,
} GtkListTileType;