listview: Move ::single-click-activate out of the item manager
authorBenjamin Otte <otte@redhat.com>
Sun, 12 Mar 2023 20:54:07 +0000 (21:54 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 23 Mar 2023 03:45:03 +0000 (04:45 +0100)
It's a listitemwidget property, and the item manager manages the items,
not the widgets.

gtk/gtkcolumnview.c
gtk/gtkgridview.c
gtk/gtklistitemmanager.c
gtk/gtklistitemmanagerprivate.h
gtk/gtklistview.c
gtk/gtklistviewprivate.h

index 6f6ef5c7d7bb2a53b338b875424140d2f8e01584..c5eb91a364e7f6114695278eb711110099729195 100644 (file)
@@ -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);
 }
 
index b03076bb8fd9ce54335e22d29d36ad7922d7ad1a..eb261b8a81ac7e28f7a63356b576e151f379d148 100644 (file)
@@ -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;
 }
 
 /**
index 2d83b24b9aa905845a2a65f03ab4ba854cb71736..cb0d0709609271b76e3294f031072e565b35e553 100644 (file)
@@ -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)
 {
index 02578c5c5b087dd98732b443d6b1fe88bdf4b80a..74772651c93a4df9ed249861f42e42c209f0ead9 100644 (file)
@@ -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);
index ae8322755b4fbc79db52bc8c0b0663bf17c12fbe..cb4e601269049aefe701928782fa4ea97e966cbc 100644 (file)
@@ -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;
 }
 
 /**
index 5e323d9e146711ccc9597ef97f8a067df09606a9..42aea60454ad12c45d1689efe2dbdf3d0ec880c1 100644 (file)
@@ -31,6 +31,7 @@ struct _GtkListView
 
   GtkListItemManager *item_manager;
   gboolean show_separators;
+  gboolean single_click_activate;
 };
 
 struct _GtkListViewClass