{
}
+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);
#include "gtklistbaseprivate.h"
#include "gtklistitemfactory.h"
#include "gtklistitemmanagerprivate.h"
+#include "gtklistitemwidgetprivate.h"
#include "gtkmain.h"
#include "gtkprivate.h"
#include "gtksingleselection.h"
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,
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;
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)
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;
{
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,
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
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;
/* 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),
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);
}
#include "gtk/gtktypes.h"
#include "gtk/gtkenums.h"
+#include "gtk/gtklistitembaseprivate.h"
#include "gtk/gtklistitemfactory.h"
#include "gtk/gtkrbtreeprivate.h"
#include "gtk/gtkselectionmodel.h"
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);
#include "gtkbitset.h"
#include "gtklistbaseprivate.h"
#include "gtklistitemmanagerprivate.h"
+#include "gtklistitemwidgetprivate.h"
#include "gtkmain.h"
#include "gtkprivate.h"
#include "gtkrbtreeprivate.h"
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,
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;