summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-04 03:32:12 +0100
committerBenjamin Otte <otte.benjamin@googlemail.com>2023-03-05 15:23:20 +0000
commite8c5a771e550c3b711d29f108d024a96a0c6961c (patch)
tree6a99be90edabddead91d5794f3051c32ed0f6345
parent882dcda53b51b10299896efe075d177e9df3458c (diff)
downloadgtk+-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.c15
-rw-r--r--gtk/gtklistitemmanager.c6
-rw-r--r--gtk/gtklistitemmanagerprivate.h1
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);