listitemwidget: Only take a single child
authorBenjamin Otte <otte@redhat.com>
Wed, 15 Mar 2023 01:12:33 +0000 (02:12 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 23 Mar 2023 03:45:03 +0000 (04:45 +0100)
gtk/gtkcolumnviewcell.c
gtk/gtklistitem.c
gtk/gtklistitemwidget.c
gtk/gtklistitemwidgetprivate.h

index 3eb39c4db3f2b380497a3d917f30a414c2cc1167..d7d0b98cb5bdb9bb054809694315293dec28df08 100644 (file)
 #include "gtkcolumnviewcellprivate.h"
 
 #include "gtkcolumnviewcolumnprivate.h"
-#include "gtkprivate.h"
-#include "gtklistitemwidgetprivate.h"
-#include "gtkwidgetprivate.h"
+#include "gtkcolumnviewrowwidgetprivate.h"
 #include "gtkcssnodeprivate.h"
 #include "gtkcssnumbervalueprivate.h"
+#include "gtklistitemwidgetprivate.h"
+#include "gtkprivate.h"
+#include "gtkwidgetprivate.h"
 
 
 struct _GtkColumnViewCell
@@ -248,7 +249,7 @@ gtk_column_view_cell_remove (GtkColumnViewCell *self)
 {
   GtkWidget *widget = GTK_WIDGET (self);
 
-  gtk_list_item_widget_remove_child (GTK_LIST_ITEM_WIDGET (gtk_widget_get_parent (widget)), widget);
+  gtk_column_view_row_widget_remove_child (GTK_COLUMN_VIEW_ROW_WIDGET (gtk_widget_get_parent (widget)), widget);
 }
 
 GtkColumnViewCell *
index 3bea81c5dfad814cbaccab90c9a922bd67bdfcae..6a357b3dd33cc5d6165682d11dcda6d9ea4dd133 100644 (file)
@@ -309,20 +309,17 @@ gtk_list_item_set_child (GtkListItem *self,
   if (self->child == child)
     return;
 
-  if (self->child && self->owner)
-    gtk_list_item_widget_remove_child (self->owner, self->child);
-
   g_clear_object (&self->child);
 
   if (child)
     {
       g_object_ref_sink (child);
       self->child = child;
-
-      if (self->owner)
-        gtk_list_item_widget_add_child (self->owner, child);
     }
 
+  if (self->owner)
+    gtk_list_item_widget_set_child (self->owner, child);
+
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ITEM]);
 }
 
index 871d6d0d1ab9a649a1877534101fc4dbb9fcfd6f..ccd56c1b3a5021701cf4aca9c1b8051df585bff7 100644 (file)
@@ -107,8 +107,7 @@ gtk_list_item_widget_setup_object (GtkListFactoryWidget *fw,
 
   list_item->owner = self;
 
-  if (list_item->child)
-    gtk_list_item_widget_add_child (self, list_item->child);
+  gtk_list_item_widget_set_child (self, list_item->child);
 
   gtk_list_factory_widget_set_activatable (fw, list_item->activatable);
   gtk_list_factory_widget_set_selectable (fw, list_item->selectable);
@@ -130,8 +129,7 @@ gtk_list_item_widget_teardown_object (GtkListFactoryWidget *fw,
 
   list_item->owner = NULL;
 
-  if (list_item->child)
-    gtk_list_item_widget_remove_child (self, list_item->child);
+  gtk_list_item_widget_set_child (self, NULL);
 
   gtk_list_factory_widget_set_activatable (fw, FALSE);
   gtk_list_factory_widget_set_selectable (fw, FALSE);
@@ -213,45 +211,17 @@ gtk_list_item_widget_new (GtkListItemFactory *factory,
 }
 
 void
-gtk_list_item_widget_add_child (GtkListItemWidget *self,
+gtk_list_item_widget_set_child (GtkListItemWidget *self,
                                 GtkWidget         *child)
 {
-  gtk_widget_set_parent (child, GTK_WIDGET (self));
-}
+  GtkWidget *cur_child = gtk_widget_get_first_child (GTK_WIDGET (self));
 
-void
-gtk_list_item_widget_reorder_child (GtkListItemWidget *self,
-                                    GtkWidget         *child,
-                                    guint              position)
-{
-  GtkWidget *widget = GTK_WIDGET (self);
-  GtkWidget *sibling = NULL;
+  if (cur_child == child)
+    return;
 
-  if (position > 0)
-    {
-      GtkWidget *c;
-      guint i;
-
-      for (c = gtk_widget_get_first_child (widget), i = 0;
-           c;
-           c = gtk_widget_get_next_sibling (c), i++)
-        {
-          if (i + 1 == position)
-            {
-              sibling = c;
-              break;
-            }
-        }
-    }
+  g_clear_pointer (&cur_child, gtk_widget_unparent);
 
-  if (child != sibling)
-    gtk_widget_insert_after (child, widget, sibling);
-}
-
-void
-gtk_list_item_widget_remove_child (GtkListItemWidget *self,
-                                   GtkWidget         *child)
-{
-  gtk_widget_unparent (child);
+  if (child)
+    gtk_widget_set_parent (child, GTK_WIDGET (self));
 }
 
index 154eb2cbd20453919ba1f75c5d49d2c0fd348a41..cccea77de55a7281962a53e49fc719e3b686bf66 100644 (file)
@@ -50,12 +50,7 @@ GtkWidget *             gtk_list_item_widget_new                (GtkListItemFact
                                                                  const char             *css_name,
                                                                  GtkAccessibleRole       role);
 
-void                    gtk_list_item_widget_add_child          (GtkListItemWidget      *self,
-                                                                 GtkWidget              *child);
-void                    gtk_list_item_widget_reorder_child      (GtkListItemWidget      *self,
-                                                                 GtkWidget              *child,
-                                                                 guint                   position);
-void                    gtk_list_item_widget_remove_child       (GtkListItemWidget      *self,
+void                    gtk_list_item_widget_set_child          (GtkListItemWidget      *self,
                                                                  GtkWidget              *child);
 
 G_END_DECLS