summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-12 21:54:07 +0100
committerBenjamin Otte <otte@redhat.com>2023-03-23 04:45:03 +0100
commit4ecda13fbd223ed1b85c105d7a47b6dc9d867360 (patch)
tree1e07b284a7c15127ac320bb45131e3978013e850 /gtk
parentccacf80f478cb34ba04d6fca5a292a8cb64fd1ae (diff)
downloadgtk+-4ecda13fbd223ed1b85c105d7a47b6dc9d867360.tar.gz
listview: Move ::single-click-activate out of the item manager
It's a listitemwidget property, and the item manager manages the items, not the widgets.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcolumnview.c2
-rw-r--r--gtk/gtkgridview.c22
-rw-r--r--gtk/gtklistitemmanager.c30
-rw-r--r--gtk/gtklistitemmanagerprivate.h6
-rw-r--r--gtk/gtklistview.c20
-rw-r--r--gtk/gtklistviewprivate.h1
6 files changed, 37 insertions, 44 deletions
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index 6f6ef5c7d7..c5eb91a364 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -146,6 +146,8 @@ gtk_column_list_view_create_list_widget (GtkListBase *base)
"row",
GTK_ACCESSIBLE_ROLE_ROW);
+ gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (result), self->single_click_activate);
+
return GTK_LIST_ITEM_BASE (result);
}
diff --git a/gtk/gtkgridview.c b/gtk/gtkgridview.c
index b03076bb8f..eb261b8a81 100644
--- a/gtk/gtkgridview.c
+++ b/gtk/gtkgridview.c
@@ -90,6 +90,7 @@ struct _GtkGridView
GtkListItemManager *item_manager;
guint min_columns;
guint max_columns;
+ gboolean single_click_activate;
/* set in size_allocate */
guint n_columns;
double column_width;
@@ -266,6 +267,8 @@ gtk_grid_view_create_list_widget (GtkListBase *base)
"child",
GTK_ACCESSIBLE_ROLE_GRID_CELL);
+ gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (result), self->single_click_activate);
+
return GTK_LIST_ITEM_BASE (result);
}
@@ -890,7 +893,7 @@ gtk_grid_view_get_property (GObject *object,
break;
case PROP_SINGLE_CLICK_ACTIVATE:
- g_value_set_boolean (value, gtk_list_item_manager_get_single_click_activate (self->item_manager));
+ g_value_set_boolean (value, self->single_click_activate);
break;
case PROP_ENABLE_RUBBERBAND:
@@ -1330,12 +1333,23 @@ void
gtk_grid_view_set_single_click_activate (GtkGridView *self,
gboolean single_click_activate)
{
+ GtkListTile *tile;
+
g_return_if_fail (GTK_IS_GRID_VIEW (self));
- if (single_click_activate == gtk_list_item_manager_get_single_click_activate (self->item_manager))
+ if (single_click_activate == self->single_click_activate)
return;
- gtk_list_item_manager_set_single_click_activate (self->item_manager, single_click_activate);
+ self->single_click_activate = single_click_activate;
+
+ for (tile = gtk_list_item_manager_get_first (self->item_manager);
+ tile != NULL;
+ tile = gtk_rb_tree_node_get_next (tile))
+ {
+ if (tile->widget)
+ gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (tile->widget), single_click_activate);
+ }
+
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SINGLE_CLICK_ACTIVATE]);
}
@@ -1354,7 +1368,7 @@ gtk_grid_view_get_single_click_activate (GtkGridView *self)
{
g_return_val_if_fail (GTK_IS_GRID_VIEW (self), FALSE);
- return gtk_list_item_manager_get_single_click_activate (self->item_manager);
+ return self->single_click_activate;
}
/**
diff --git a/gtk/gtklistitemmanager.c b/gtk/gtklistitemmanager.c
index 2d83b24b9a..cb0d070960 100644
--- a/gtk/gtklistitemmanager.c
+++ b/gtk/gtklistitemmanager.c
@@ -32,7 +32,6 @@ struct _GtkListItemManager
GtkWidget *widget;
GtkSelectionModel *model;
GtkListItemFactory *factory;
- gboolean single_click_activate;
GtkRbTree *items;
GSList *trackers;
@@ -1197,8 +1196,6 @@ gtk_list_item_manager_acquire_list_item (GtkListItemManager *self,
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 (result, position, item, selected);
@@ -1348,33 +1345,6 @@ gtk_list_item_manager_release_list_item (GtkListItemManager *self,
gtk_widget_unparent (item);
}
-void
-gtk_list_item_manager_set_single_click_activate (GtkListItemManager *self,
- gboolean single_click_activate)
-{
- GtkListTile *tile;
-
- g_return_if_fail (GTK_IS_LIST_ITEM_MANAGER (self));
-
- self->single_click_activate = single_click_activate;
-
- for (tile = gtk_rb_tree_get_first (self->items);
- tile != NULL;
- tile = gtk_rb_tree_node_get_next (tile))
- {
- if (tile->widget)
- gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (tile->widget), single_click_activate);
- }
-}
-
-gboolean
-gtk_list_item_manager_get_single_click_activate (GtkListItemManager *self)
-{
- g_return_val_if_fail (GTK_IS_LIST_ITEM_MANAGER (self), FALSE);
-
- return self->single_click_activate;
-}
-
GtkListItemTracker *
gtk_list_item_tracker_new (GtkListItemManager *self)
{
diff --git a/gtk/gtklistitemmanagerprivate.h b/gtk/gtklistitemmanagerprivate.h
index 02578c5c5b..74772651c9 100644
--- a/gtk/gtklistitemmanagerprivate.h
+++ b/gtk/gtklistitemmanagerprivate.h
@@ -108,12 +108,6 @@ void gtk_list_item_manager_set_model (GtkListItemMana
GtkSelectionModel *model);
GtkSelectionModel * gtk_list_item_manager_get_model (GtkListItemManager *self);
-void gtk_list_item_manager_set_single_click_activate
- (GtkListItemManager *self,
- gboolean single_click_activate);
-gboolean gtk_list_item_manager_get_single_click_activate
- (GtkListItemManager *self);
-
GtkListItemTracker * gtk_list_item_tracker_new (GtkListItemManager *self);
void gtk_list_item_tracker_free (GtkListItemManager *self,
GtkListItemTracker *tracker);
diff --git a/gtk/gtklistview.c b/gtk/gtklistview.c
index ae8322755b..cb4e601269 100644
--- a/gtk/gtklistview.c
+++ b/gtk/gtklistview.c
@@ -226,6 +226,8 @@ gtk_list_view_create_list_widget (GtkListBase *base)
"row",
GTK_ACCESSIBLE_ROLE_LIST_ITEM);
+ gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (result), self->single_click_activate);
+
return GTK_LIST_ITEM_BASE (result);
}
@@ -638,7 +640,7 @@ gtk_list_view_get_property (GObject *object,
break;
case PROP_SINGLE_CLICK_ACTIVATE:
- g_value_set_boolean (value, gtk_list_item_manager_get_single_click_activate (self->item_manager));
+ g_value_set_boolean (value, self->single_click_activate);
break;
case PROP_ENABLE_RUBBERBAND:
@@ -1006,12 +1008,22 @@ void
gtk_list_view_set_single_click_activate (GtkListView *self,
gboolean single_click_activate)
{
+ GtkListTile *tile;
+
g_return_if_fail (GTK_IS_LIST_VIEW (self));
- if (single_click_activate == gtk_list_item_manager_get_single_click_activate (self->item_manager))
+ if (single_click_activate == self->single_click_activate)
return;
- gtk_list_item_manager_set_single_click_activate (self->item_manager, single_click_activate);
+ self->single_click_activate = single_click_activate;
+
+ for (tile = gtk_list_item_manager_get_first (self->item_manager);
+ tile != NULL;
+ tile = gtk_rb_tree_node_get_next (tile))
+ {
+ if (tile->widget)
+ gtk_list_item_widget_set_single_click_activate (GTK_LIST_ITEM_WIDGET (tile->widget), single_click_activate);
+ }
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SINGLE_CLICK_ACTIVATE]);
}
@@ -1030,7 +1042,7 @@ gtk_list_view_get_single_click_activate (GtkListView *self)
{
g_return_val_if_fail (GTK_IS_LIST_VIEW (self), FALSE);
- return gtk_list_item_manager_get_single_click_activate (self->item_manager);
+ return self->single_click_activate;
}
/**
diff --git a/gtk/gtklistviewprivate.h b/gtk/gtklistviewprivate.h
index 5e323d9e14..42aea60454 100644
--- a/gtk/gtklistviewprivate.h
+++ b/gtk/gtklistviewprivate.h
@@ -31,6 +31,7 @@ struct _GtkListView
GtkListItemManager *item_manager;
gboolean show_separators;
+ gboolean single_click_activate;
};
struct _GtkListViewClass