gtkcolumnviewcolumn: Only create cells when the column is visible
authorBenjamin Otte <otte.benjamin@googlemail.com>
Thu, 29 Dec 2022 22:21:43 +0000 (22:21 +0000)
committerSimon McVittie <smcv@debian.org>
Sat, 4 Feb 2023 15:14:39 +0000 (15:14 +0000)
Merge branch 'wip/corey/list-item-visible' into 'main'

listitemwidget: Setup factory only once the widget is visible

See merge request GNOME/gtk!5374

(cherry picked from commit 188f9269b7e25847d4d50ba12c004f5da81aa352)

Origin: upstream, 4.8.4, commit:2aaefd9ff67446bcd0fdee90fe0ed3ac8c02fb12

Gbp-Pq: Name gtkcolumnviewcolumn-Only-create-cells-when-the-column-is-.patch

gtk/gtkcolumnlistitemfactory.c
gtk/gtkcolumnviewcolumn.c

index 9951a7c47a90c036e4d53b80c2256afbb80a05bf..d69bd12e0484de03544eba29bf4377990a092dba 100644 (file)
@@ -65,10 +65,11 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
     {
       GtkColumnViewColumn *column = g_list_model_get_item (columns, i);
 
-      gtk_column_list_item_factory_add_column (self,
-                                               widget,
-                                               column,
-                                               FALSE);
+      if (gtk_column_view_column_get_visible (column))
+        gtk_column_list_item_factory_add_column (self,
+                                                 widget,
+                                                 column,
+                                                 FALSE);
 
       g_object_unref (column);
     }
index 74c89c0c8d1e876e9724ac9132d7b8865fd7251e..75209894e3d739311f1ef347c4ab9f31068db907 100644 (file)
@@ -551,7 +551,8 @@ gtk_column_view_column_remove_header (GtkColumnViewColumn *self)
 static void
 gtk_column_view_column_ensure_cells (GtkColumnViewColumn *self)
 {
-  if (self->view && gtk_widget_get_root (GTK_WIDGET (self->view)))
+  if (self->view && gtk_widget_get_root (GTK_WIDGET (self->view)) &&
+      gtk_column_view_column_get_visible (self))
     gtk_column_view_column_create_cells (self);
   else
     gtk_column_view_column_remove_cells (self);
@@ -787,8 +788,6 @@ void
 gtk_column_view_column_set_visible (GtkColumnViewColumn *self,
                                     gboolean             visible)
 {
-  GtkColumnViewCell *cell;
-
   g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (self));
 
   if (self->visible == visible)
@@ -802,10 +801,7 @@ gtk_column_view_column_set_visible (GtkColumnViewColumn *self,
   if (self->header)
     gtk_widget_set_visible (GTK_WIDGET (self->header), visible);
 
-  for (cell = self->first_cell; cell; cell = gtk_column_view_cell_get_next (cell))
-    {
-      gtk_widget_set_visible (GTK_WIDGET (cell), visible);
-    }
+  gtk_column_view_column_ensure_cells (self);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_VISIBLE]);
 }