diff options
author | Benjamin Otte <otte@redhat.com> | 2019-10-23 02:34:28 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-05-30 19:26:46 -0400 |
commit | 0bd16308d628de68d6f5e12a3e673b81f1399b68 (patch) | |
tree | 2eb62d7485f7f1b0474b804e2aa8a10c65dd3219 /gtk/gtkgridview.c | |
parent | 0011ce949c3580e02c4b2c3d83584a6c6e82090c (diff) | |
download | gtk+-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.c | 66 |
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; |