diff options
-rw-r--r-- | gtk/gtkcolumnview.c | 16 | ||||
-rw-r--r-- | gtk/gtkgridview.c | 17 | ||||
-rw-r--r-- | gtk/gtklistbase.c | 11 | ||||
-rw-r--r-- | gtk/gtklistbaseprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtklistitemmanager.c | 21 | ||||
-rw-r--r-- | gtk/gtklistitemmanagerprivate.h | 6 | ||||
-rw-r--r-- | gtk/gtklistview.c | 17 |
7 files changed, 64 insertions, 28 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index 33fe678c8e..6f6ef5c7d7 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -136,14 +136,26 @@ gtk_column_list_view_init (GtkColumnListView *view) { } +static GtkListItemBase * +gtk_column_list_view_create_list_widget (GtkListBase *base) +{ + GtkListView *self = GTK_LIST_VIEW (base); + GtkWidget *result; + + result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager), + "row", + GTK_ACCESSIBLE_ROLE_ROW); + + return GTK_LIST_ITEM_BASE (result); +} + static void gtk_column_list_view_class_init (GtkColumnListViewClass *klass) { GtkListBaseClass *list_base_class = GTK_LIST_BASE_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - list_base_class->list_item_name = "row"; - list_base_class->list_item_role = GTK_ACCESSIBLE_ROLE_ROW; + list_base_class->create_list_widget = gtk_column_list_view_create_list_widget; gtk_widget_class_set_css_name (widget_class, I_("listview")); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_LIST); diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c index 76f2e26e00..b03076bb8f 100644 --- a/gtk/gtkgridview.c +++ b/gtk/gtkgridview.c @@ -25,6 +25,7 @@ #include "gtklistbaseprivate.h" #include "gtklistitemfactory.h" #include "gtklistitemmanagerprivate.h" +#include "gtklistitemwidgetprivate.h" #include "gtkmain.h" #include "gtkprivate.h" #include "gtksingleselection.h" @@ -255,6 +256,19 @@ gtk_grid_view_split (GtkListBase *base, return split; } +static GtkListItemBase * +gtk_grid_view_create_list_widget (GtkListBase *base) +{ + GtkGridView *self = GTK_GRID_VIEW (base); + GtkWidget *result; + + result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager), + "child", + GTK_ACCESSIBLE_ROLE_GRID_CELL); + + return GTK_LIST_ITEM_BASE (result); +} + static gboolean gtk_grid_view_get_allocation (GtkListBase *base, guint pos, @@ -954,9 +968,8 @@ 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 = "child"; - list_base_class->list_item_role = GTK_ACCESSIBLE_ROLE_GRID_CELL; list_base_class->split = gtk_grid_view_split; + list_base_class->create_list_widget = gtk_grid_view_create_list_widget; list_base_class->get_allocation = gtk_grid_view_get_allocation; list_base_class->get_items_in_rect = gtk_grid_view_get_items_in_rect; list_base_class->get_position_from_allocation = gtk_grid_view_get_position_from_allocation; diff --git a/gtk/gtklistbase.c b/gtk/gtklistbase.c index a9d6700bf1..a5d85aabb7 100644 --- a/gtk/gtklistbase.c +++ b/gtk/gtklistbase.c @@ -1920,6 +1920,12 @@ gtk_list_base_split_func (GtkWidget *widget, return GTK_LIST_BASE_GET_CLASS (widget)->split (GTK_LIST_BASE (widget), tile, n_items); } +static GtkListItemBase * +gtk_list_base_create_widget_func (GtkWidget *widget) +{ + return GTK_LIST_BASE_GET_CLASS (widget)->create_list_widget (GTK_LIST_BASE (widget)); +} + static void gtk_list_base_init_real (GtkListBase *self, GtkListBaseClass *g_class) @@ -1928,9 +1934,8 @@ gtk_list_base_init_real (GtkListBase *self, GtkEventController *controller; priv->item_manager = gtk_list_item_manager_new (GTK_WIDGET (self), - g_class->list_item_name, - g_class->list_item_role, - gtk_list_base_split_func); + gtk_list_base_split_func, + gtk_list_base_create_widget_func); priv->anchor = gtk_list_item_tracker_new (priv->item_manager); priv->anchor_side_along = GTK_PACK_START; priv->anchor_side_across = GTK_PACK_START; diff --git a/gtk/gtklistbaseprivate.h b/gtk/gtklistbaseprivate.h index c4d436308d..9ee30b79b4 100644 --- a/gtk/gtklistbaseprivate.h +++ b/gtk/gtklistbaseprivate.h @@ -34,12 +34,10 @@ struct _GtkListBaseClass { GtkWidgetClass parent_class; - const char * list_item_name; - GtkAccessibleRole list_item_role; - GtkListTile * (* split) (GtkListBase *self, GtkListTile *tile, guint n_items); + GtkListItemBase * (* create_list_widget) (GtkListBase *self); gboolean (* get_allocation) (GtkListBase *self, guint pos, diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c index 9f671b6168..2d83b24b9a 100644 --- a/gtk/gtklistitemmanager.c +++ b/gtk/gtklistitemmanager.c @@ -33,13 +33,12 @@ struct _GtkListItemManager GtkSelectionModel *model; GtkListItemFactory *factory; gboolean single_click_activate; - const char *item_css_name; - GtkAccessibleRole item_role; GtkRbTree *items; GSList *trackers; GtkListTile * (* split_func) (GtkWidget *, GtkListTile *, guint); + GtkListItemBase * (* create_widget) (GtkWidget *); }; struct _GtkListItemManagerClass @@ -131,9 +130,8 @@ gtk_list_item_manager_clear_node (gpointer _tile) GtkListItemManager * gtk_list_item_manager_new (GtkWidget *widget, - const char *item_css_name, - GtkAccessibleRole item_role, - GtkListTile * (* split_func) (GtkWidget *, GtkListTile *, guint)) + GtkListTile * (* split_func) (GtkWidget *, GtkListTile *, guint), + GtkListItemBase * (* create_widget) (GtkWidget *)) { GtkListItemManager *self; @@ -143,9 +141,8 @@ gtk_list_item_manager_new (GtkWidget *widget, /* not taking a ref because the widget refs us */ self->widget = widget; - self->item_css_name = g_intern_string (item_css_name); - self->item_role = item_role; self->split_func = split_func; + self->create_widget = create_widget; self->items = gtk_rb_tree_new_for_size (sizeof (GtkListTile), sizeof (GtkListTileAugment), @@ -1191,24 +1188,22 @@ gtk_list_item_manager_acquire_list_item (GtkListItemManager *self, guint position, GtkWidget *prev_sibling) { - GtkWidget *result; + GtkListItemBase *result; gpointer item; gboolean selected; g_return_val_if_fail (GTK_IS_LIST_ITEM_MANAGER (self), NULL); g_return_val_if_fail (prev_sibling == NULL || GTK_IS_WIDGET (prev_sibling), NULL); - result = gtk_list_item_widget_new (self->factory, - self->item_css_name, - self->item_role); + result = self->create_widget (self->widget); gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (result), self->single_click_activate); item = g_list_model_get_item (G_LIST_MODEL (self->model), position); selected = gtk_selection_model_is_selected (self->model, position); - gtk_list_item_base_update (GTK_LIST_ITEM_BASE (result), position, item, selected); + gtk_list_item_base_update (result, position, item, selected); g_object_unref (item); - gtk_widget_insert_after (result, self->widget, prev_sibling); + gtk_widget_insert_after (GTK_WIDGET (result), self->widget, prev_sibling); return GTK_WIDGET (result); } diff --git a/gtk/gtklistitemmanagerprivate.h b/gtk/gtklistitemmanagerprivate.h index bd49838db9..02578c5c5b 100644 --- a/gtk/gtklistitemmanagerprivate.h +++ b/gtk/gtklistitemmanagerprivate.h @@ -24,6 +24,7 @@ #include "gtk/gtktypes.h" #include "gtk/gtkenums.h" +#include "gtk/gtklistitembaseprivate.h" #include "gtk/gtklistitemfactory.h" #include "gtk/gtkrbtreeprivate.h" #include "gtk/gtkselectionmodel.h" @@ -62,9 +63,8 @@ struct _GtkListTileAugment GType gtk_list_item_manager_get_type (void) G_GNUC_CONST; GtkListItemManager * gtk_list_item_manager_new (GtkWidget *widget, - const char *item_css_name, - GtkAccessibleRole item_role, - GtkListTile * (* split_func) (GtkWidget *, GtkListTile *, guint)); + GtkListTile * (* split_func) (GtkWidget *, GtkListTile *, guint), + GtkListItemBase * (* create_widget) (GtkWidget *)); void gtk_list_item_manager_get_tile_bounds (GtkListItemManager *self, GdkRectangle *out_bounds); diff --git a/gtk/gtklistview.c b/gtk/gtklistview.c index f822c53529..ae8322755b 100644 --- a/gtk/gtklistview.c +++ b/gtk/gtklistview.c @@ -24,6 +24,7 @@ #include "gtkbitset.h" #include "gtklistbaseprivate.h" #include "gtklistitemmanagerprivate.h" +#include "gtklistitemwidgetprivate.h" #include "gtkmain.h" #include "gtkprivate.h" #include "gtkrbtreeprivate.h" @@ -215,6 +216,19 @@ gtk_list_view_split (GtkListBase *base, return new_tile; } +static GtkListItemBase * +gtk_list_view_create_list_widget (GtkListBase *base) +{ + GtkListView *self = GTK_LIST_VIEW (base); + GtkWidget *result; + + result = gtk_list_item_widget_new (gtk_list_item_manager_get_factory (self->item_manager), + "row", + GTK_ACCESSIBLE_ROLE_LIST_ITEM); + + return GTK_LIST_ITEM_BASE (result); +} + static gboolean gtk_list_view_get_allocation (GtkListBase *base, guint pos, @@ -698,9 +712,8 @@ gtk_list_view_class_init (GtkListViewClass *klass) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - list_base_class->list_item_name = "row"; - list_base_class->list_item_role = GTK_ACCESSIBLE_ROLE_LIST_ITEM; list_base_class->split = gtk_list_view_split; + list_base_class->create_list_widget = gtk_list_view_create_list_widget; list_base_class->get_allocation = gtk_list_view_get_allocation; list_base_class->get_items_in_rect = gtk_list_view_get_items_in_rect; list_base_class->get_position_from_allocation = gtk_list_view_get_position_from_allocation; |