diff options
author | Benjamin Otte <otte@redhat.com> | 2023-04-07 04:00:00 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-05-09 17:00:39 +0200 |
commit | e680abc723a1710a0933bb1d63e259145affaf5e (patch) | |
tree | 9eaebb8d60c122d0191de4eb74cbc63e16d757a7 /gtk | |
parent | cecaede6104f45193088bdc36108aadd8960db2d (diff) | |
download | gtk+-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.c | 13 | ||||
-rw-r--r-- | gtk/gtklistitemmanagerprivate.h | 4 |
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; |