From e8c5a771e550c3b711d29f108d024a96a0c6961c Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 4 Mar 2023 03:32:12 +0100 Subject: [PATCH] gridview: Add a filler tile for empty space That stupid space in the bottom right when n_items isn't a multiple of n_columns needs its own tile, or we'll get errors about not finding a tile. So make one. --- gtk/gtkgridview.c | 15 +++++++++++++++ gtk/gtklistitemmanager.c | 6 ++++++ gtk/gtklistitemmanagerprivate.h | 1 + 3 files changed, 22 insertions(+) diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c index 35a634d119..a0eb1acb06 100644 --- a/gtk/gtkgridview.c +++ b/gtk/gtkgridview.c @@ -737,6 +737,21 @@ gtk_grid_view_size_allocate (GtkWidget *widget, i = 0; } } + /* Add a filler tile for empty space in the bottom right */ + if (i < self->n_columns) + { + GtkListTile *filler; + tile = gtk_list_item_manager_get_last (self->item_manager); + filler = gtk_list_tile_split (self->item_manager, tile, tile->n_items); + gtk_list_tile_set_area_position (self->item_manager, + filler, + ceil (self->column_width * i), + y); + gtk_list_tile_set_area_size (self->item_manager, + filler, + ceil (self->column_width * self->n_columns) - filler->area.x, + tile->area.height); + } /* step 4: allocate the rest */ gtk_list_base_allocate (GTK_LIST_BASE (self)); diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c index 2b7ddaa9f1..b34e6aa4a7 100644 --- a/gtk/gtklistitemmanager.c +++ b/gtk/gtklistitemmanager.c @@ -184,6 +184,12 @@ gtk_list_item_manager_get_first (GtkListItemManager *self) return gtk_rb_tree_get_first (self->items); } +gpointer +gtk_list_item_manager_get_last (GtkListItemManager *self) +{ + return gtk_rb_tree_get_last (self->items); +} + gpointer gtk_list_item_manager_get_root (GtkListItemManager *self) { diff --git a/gtk/gtklistitemmanagerprivate.h b/gtk/gtklistitemmanagerprivate.h index 6dcbfc21ce..eb10303618 100644 --- a/gtk/gtklistitemmanagerprivate.h +++ b/gtk/gtklistitemmanagerprivate.h @@ -71,6 +71,7 @@ void gtk_list_item_manager_get_tile_bounds (GtkListItemMana GdkRectangle *out_bounds); gpointer gtk_list_item_manager_get_root (GtkListItemManager *self); gpointer gtk_list_item_manager_get_first (GtkListItemManager *self); +gpointer gtk_list_item_manager_get_last (GtkListItemManager *self); gpointer gtk_list_item_manager_get_nth (GtkListItemManager *self, guint position, guint *offset);