columnviewrowwidget: Don't discard items in unroot()
Follows 3411b0306ee3b88038abdc736adf60bd004c7b7a and
3fb10ff2d8.
This commit is contained in:
@@ -113,52 +113,6 @@
|
||||
* some parameters for item creation.
|
||||
*/
|
||||
|
||||
#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)
|
||||
|
||||
struct _GtkColumnListView
|
||||
{
|
||||
GtkListView parent_instance;
|
||||
};
|
||||
|
||||
struct _GtkColumnListViewClass
|
||||
{
|
||||
GtkListViewClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GtkColumnListView, gtk_column_list_view, GTK_TYPE_LIST_VIEW)
|
||||
|
||||
static void
|
||||
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_column_view_row_widget_new (FALSE);
|
||||
|
||||
gtk_list_factory_widget_set_single_click_activate (GTK_LIST_FACTORY_WIDGET (result), self->single_click_activate);
|
||||
|
||||
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->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);
|
||||
}
|
||||
|
||||
|
||||
struct _GtkColumnView
|
||||
{
|
||||
GtkWidget parent_instance;
|
||||
@@ -197,6 +151,69 @@ 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)
|
||||
|
||||
struct _GtkColumnListView
|
||||
{
|
||||
GtkListView parent_instance;
|
||||
};
|
||||
|
||||
struct _GtkColumnListViewClass
|
||||
{
|
||||
GtkListViewClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GtkColumnListView, gtk_column_list_view, GTK_TYPE_LIST_VIEW)
|
||||
|
||||
static void
|
||||
gtk_column_list_view_init (GtkColumnListView *view)
|
||||
{
|
||||
}
|
||||
|
||||
static GtkListItemBase *
|
||||
gtk_column_list_view_create_list_widget (GtkListBase *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), 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);
|
||||
}
|
||||
|
||||
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->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);
|
||||
}
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
|
||||
@@ -351,56 +351,17 @@ gtk_column_view_row_widget_set_focus_child (GtkWidget *widget,
|
||||
}
|
||||
|
||||
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
|
||||
@@ -539,6 +500,7 @@ gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass)
|
||||
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;
|
||||
@@ -552,8 +514,8 @@ gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass)
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user