diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-04 03:32:12 +0100 |
---|---|---|
committer | Benjamin Otte <otte.benjamin@googlemail.com> | 2023-03-05 15:23:20 +0000 |
commit | e8c5a771e550c3b711d29f108d024a96a0c6961c (patch) | |
tree | 6a99be90edabddead91d5794f3051c32ed0f6345 | |
parent | 882dcda53b51b10299896efe075d177e9df3458c (diff) | |
download | gtk+-e8c5a771e550c3b711d29f108d024a96a0c6961c.tar.gz |
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.
-rw-r--r-- | gtk/gtkgridview.c | 15 | ||||
-rw-r--r-- | gtk/gtklistitemmanager.c | 6 | ||||
-rw-r--r-- | gtk/gtklistitemmanagerprivate.h | 1 |
3 files changed, 22 insertions, 0 deletions
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 @@ -185,6 +185,12 @@ gtk_list_item_manager_get_first (GtkListItemManager *self) } 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) { return gtk_rb_tree_get_root (self->items); 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); |