summaryrefslogtreecommitdiff
path: root/gtk/gtkgridview.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2019-10-23 02:34:28 +0200
committerMatthias Clasen <mclasen@redhat.com>2020-05-30 19:26:46 -0400
commit0bd16308d628de68d6f5e12a3e673b81f1399b68 (patch)
tree2eb62d7485f7f1b0474b804e2aa8a10c65dd3219 /gtk/gtkgridview.c
parent0011ce949c3580e02c4b2c3d83584a6c6e82090c (diff)
downloadgtk+-0bd16308d628de68d6f5e12a3e673b81f1399b68.tar.gz
listbase: Move item manager here
Nothing really changes, because both ListView and GridView still keep self->item_manager around, but it's set up to point at the base's item manager. This way we can slowly move things to GtkListBase that need the item manager (like trackers).
Diffstat (limited to 'gtk/gtkgridview.c')
-rw-r--r--gtk/gtkgridview.c66
1 files changed, 35 insertions, 31 deletions
diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c
index 2de555ce3b..c0fa4d136a 100644
--- a/gtk/gtkgridview.c
+++ b/gtk/gtkgridview.c
@@ -148,6 +148,35 @@ dump (GtkGridView *self)
g_print (" => %u widgets in %u list rows\n", n_widgets, n_list_rows);
}
+static void
+cell_augment (GtkRbTree *tree,
+ gpointer node_augment,
+ gpointer node,
+ gpointer left,
+ gpointer right)
+{
+ Cell *cell = node;
+ CellAugment *aug = node_augment;
+
+ gtk_list_item_manager_augment_node (tree, node_augment, node, left, right);
+
+ aug->size = cell->size;
+
+ if (left)
+ {
+ CellAugment *left_aug = gtk_rb_tree_get_augment (tree, left);
+
+ aug->size += left_aug->size;
+ }
+
+ if (right)
+ {
+ CellAugment *right_aug = gtk_rb_tree_get_augment (tree, right);
+
+ aug->size += right_aug->size;
+ }
+}
+
/*<private>
* gtk_grid_view_get_cell_at_y:
* @self: a #GtkGridView
@@ -1062,7 +1091,7 @@ gtk_grid_view_dispose (GObject *object)
gtk_list_item_tracker_free (self->item_manager, self->focus);
self->focus = NULL;
}
- g_clear_object (&self->item_manager);
+ self->item_manager = NULL;
G_OBJECT_CLASS (gtk_grid_view_parent_class)->dispose (object);
}
@@ -1604,6 +1633,10 @@ gtk_grid_view_class_init (GtkGridViewClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ list_base_class->list_item_name = "flowboxchild";
+ list_base_class->list_item_size = sizeof (Cell);
+ list_base_class->list_item_augment_size = sizeof (CellAugment);
+ list_base_class->list_item_augment_func = cell_augment;
list_base_class->adjustment_value_changed = gtk_grid_view_adjustment_value_changed;
widget_class->focus = gtk_grid_view_focus;
@@ -1803,38 +1836,9 @@ gtk_grid_view_class_init (GtkGridViewClass *klass)
}
static void
-cell_augment (GtkRbTree *tree,
- gpointer node_augment,
- gpointer node,
- gpointer left,
- gpointer right)
-{
- Cell *cell = node;
- CellAugment *aug = node_augment;
-
- gtk_list_item_manager_augment_node (tree, node_augment, node, left, right);
-
- aug->size = cell->size;
-
- if (left)
- {
- CellAugment *left_aug = gtk_rb_tree_get_augment (tree, left);
-
- aug->size += left_aug->size;
- }
-
- if (right)
- {
- CellAugment *right_aug = gtk_rb_tree_get_augment (tree, right);
-
- aug->size += right_aug->size;
- }
-}
-
-static void
gtk_grid_view_init (GtkGridView *self)
{
- self->item_manager = gtk_list_item_manager_new (GTK_WIDGET (self), "flowboxchild", Cell, CellAugment, cell_augment);
+ self->item_manager = gtk_list_base_get_manager (GTK_LIST_BASE (self));
self->anchor = gtk_list_item_tracker_new (self->item_manager);
self->anchor_xstart = TRUE;
self->anchor_ystart = TRUE;