* some parameters for item creation.
*/
+struct _GtkColumnView
+{
+ GtkWidget parent_instance;
+
+ GListStore *columns;
+
+ GtkColumnViewColumn *focus_column;
+
+ GtkWidget *header;
+
+ GtkListView *listview;
+
+ GtkSorter *sorter;
+
+ GtkAdjustment *hadjustment;
+
+ guint reorderable : 1;
+ guint show_column_separators : 1;
+ guint in_column_resize : 1;
+ guint in_column_reorder : 1;
+
+ int drag_pos;
+ int drag_x;
+ int drag_offset;
+ int drag_column_x;
+
+ guint autoscroll_id;
+ double autoscroll_x;
+ double autoscroll_delta;
+
+ GtkGesture *drag_gesture;
+};
+
+struct _GtkColumnViewClass
+{
+ GtkWidgetClass parent_class;
+};
+
+
#define GTK_TYPE_COLUMN_LIST_VIEW (gtk_column_list_view_get_type ())
G_DECLARE_FINAL_TYPE (GtkColumnListView, gtk_column_list_view, GTK, COLUMN_LIST_VIEW, GtkListView)
static GtkListItemBase *
gtk_column_list_view_create_list_widget (GtkListBase *base)
{
- GtkListView *self = GTK_LIST_VIEW (base);
+ GtkColumnView *self = GTK_COLUMN_VIEW (gtk_widget_get_parent (GTK_WIDGET (base)));
GtkWidget *result;
+ guint i;
result = gtk_column_view_row_widget_new (FALSE);
- gtk_list_factory_widget_set_single_click_activate (GTK_LIST_FACTORY_WIDGET (result), self->single_click_activate);
+ gtk_list_factory_widget_set_single_click_activate (GTK_LIST_FACTORY_WIDGET (result), GTK_LIST_VIEW (base)->single_click_activate);
+
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->columns)); i++)
+ {
+ GtkColumnViewColumn *column = g_list_model_get_item (G_LIST_MODEL (self->columns), i);
+
+ if (gtk_column_view_column_get_visible (column))
+ {
+ GtkWidget *cell;
+
+ cell = gtk_column_view_cell_widget_new (column);
+ gtk_column_view_row_widget_add_child (GTK_COLUMN_VIEW_ROW_WIDGET (result), cell);
+ }
+
+ g_object_unref (column);
+ }
return GTK_LIST_ITEM_BASE (result);
}
}
-struct _GtkColumnView
-{
- GtkWidget parent_instance;
-
- GListStore *columns;
-
- GtkColumnViewColumn *focus_column;
-
- GtkWidget *header;
-
- GtkListView *listview;
-
- GtkSorter *sorter;
-
- GtkAdjustment *hadjustment;
-
- guint reorderable : 1;
- guint show_column_separators : 1;
- guint in_column_resize : 1;
- guint in_column_reorder : 1;
-
- int drag_pos;
- int drag_x;
- int drag_offset;
- int drag_column_x;
-
- guint autoscroll_id;
- double autoscroll_x;
- double autoscroll_delta;
-
- GtkGesture *drag_gesture;
-};
-
-struct _GtkColumnViewClass
-{
- GtkWidgetClass parent_class;
-};
-
enum
{
PROP_0,
}
static void
-gtk_column_view_row_widget_root (GtkWidget *widget)
+gtk_column_view_row_widget_dispose (GObject *object)
{
- GtkColumnViewRowWidget *self = GTK_COLUMN_VIEW_ROW_WIDGET (widget);
-
- GTK_WIDGET_CLASS (gtk_column_view_row_widget_parent_class)->root (widget);
-
- if (!gtk_column_view_row_widget_is_header (self))
- {
- GtkListItemBase *base = GTK_LIST_ITEM_BASE (self);
- GListModel *columns;
- guint i;
-
- columns = gtk_column_view_get_columns (gtk_column_view_row_widget_get_column_view (self));
-
- for (i = 0; i < g_list_model_get_n_items (columns); i++)
- {
- GtkColumnViewColumn *column = g_list_model_get_item (columns, i);
-
- if (gtk_column_view_column_get_visible (column))
- {
- GtkWidget *cell;
-
- cell = gtk_column_view_cell_widget_new (column);
- gtk_column_view_row_widget_add_child (self, cell);
- gtk_list_item_base_update (GTK_LIST_ITEM_BASE (cell),
- gtk_list_item_base_get_position (base),
- gtk_list_item_base_get_item (base),
- gtk_list_item_base_get_selected (base));
- }
-
- g_object_unref (column);
- }
- }
-}
-
-static void
-gtk_column_view_row_widget_unroot (GtkWidget *widget)
-{
- GtkColumnViewRowWidget *self = GTK_COLUMN_VIEW_ROW_WIDGET (widget);
+ GtkColumnViewRowWidget *self = GTK_COLUMN_VIEW_ROW_WIDGET (object);
GtkWidget *child;
- if (!gtk_column_view_row_widget_is_header (self))
+ while ((child = gtk_widget_get_first_child (GTK_WIDGET (self))))
{
- while ((child = gtk_widget_get_first_child (GTK_WIDGET (self))))
- {
- gtk_column_view_row_widget_remove_child (self, child);
- }
+ gtk_column_view_row_widget_remove_child (self, child);
}
- GTK_WIDGET_CLASS (gtk_column_view_row_widget_parent_class)->unroot (widget);
+ G_OBJECT_CLASS (gtk_column_view_row_widget_parent_class)->dispose (object);
}
static void
GtkListFactoryWidgetClass *factory_class = GTK_LIST_FACTORY_WIDGET_CLASS (klass);
GtkListItemBaseClass *base_class = GTK_LIST_ITEM_BASE_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
factory_class->create_object = gtk_column_view_row_widget_create_object;
factory_class->setup_object = gtk_column_view_row_widget_setup_object;
widget_class->set_focus_child = gtk_column_view_row_widget_set_focus_child;
widget_class->measure = gtk_column_view_row_widget_measure;
widget_class->size_allocate = gtk_column_view_row_widget_allocate;
- widget_class->root = gtk_column_view_row_widget_root;
- widget_class->unroot = gtk_column_view_row_widget_unroot;
+
+ object_class->dispose = gtk_column_view_row_widget_dispose;
add_arrow_bindings (widget_class, GDK_KEY_Left, GTK_DIR_LEFT);
add_arrow_bindings (widget_class, GDK_KEY_Right, GTK_DIR_RIGHT);