From 817732ded954893b3f7e83f7fa3613717552704c Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 15 Mar 2023 02:12:33 +0100 Subject: [PATCH] listitemwidget: Only take a single child --- gtk/gtkcolumnviewcell.c | 9 ++++--- gtk/gtklistitem.c | 9 +++---- gtk/gtklistitemwidget.c | 48 +++++++--------------------------- gtk/gtklistitemwidgetprivate.h | 7 +---- 4 files changed, 18 insertions(+), 55 deletions(-) diff --git a/gtk/gtkcolumnviewcell.c b/gtk/gtkcolumnviewcell.c index 3eb39c4db3..d7d0b98cb5 100644 --- a/gtk/gtkcolumnviewcell.c +++ b/gtk/gtkcolumnviewcell.c @@ -22,11 +22,12 @@ #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 * diff --git a/gtk/gtklistitem.c b/gtk/gtklistitem.c index 3bea81c5df..6a357b3dd3 100644 --- a/gtk/gtklistitem.c +++ b/gtk/gtklistitem.c @@ -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]); } diff --git a/gtk/gtklistitemwidget.c b/gtk/gtklistitemwidget.c index 871d6d0d1a..ccd56c1b3a 100644 --- a/gtk/gtklistitemwidget.c +++ b/gtk/gtklistitemwidget.c @@ -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)); } diff --git a/gtk/gtklistitemwidgetprivate.h b/gtk/gtklistitemwidgetprivate.h index 154eb2cbd2..cccea77de5 100644 --- a/gtk/gtklistitemwidgetprivate.h +++ b/gtk/gtklistitemwidgetprivate.h @@ -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 -- 2.30.2