From: Benjamin Otte Date: Mon, 27 Mar 2023 02:53:48 +0000 (+0200) Subject: listfactorywidget: Stop trying to be smart X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~496^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3fb10ff2d8cdffdc5e026f9b57c4d5580a36d308;p=gtk4.git listfactorywidget: Stop trying to be smart The widget would teardown the factory on unroot to avoid unnecessary work when it isn't shown. However, recycling may reposition widgets, and repositioning widgets does a unroot/root. We don't want to recycle widgets then. --- diff --git a/gtk/gtklistfactorywidget.c b/gtk/gtklistfactorywidget.c index 684cefa3e6..dbe64442ca 100644 --- a/gtk/gtklistfactorywidget.c +++ b/gtk/gtklistfactorywidget.c @@ -204,30 +204,6 @@ gtk_list_factory_widget_update (GtkListItemBase *base, } } -static void -gtk_list_factory_widget_root (GtkWidget *widget) -{ - GtkListFactoryWidget *self = GTK_LIST_FACTORY_WIDGET (widget); - GtkListFactoryWidgetPrivate *priv = gtk_list_factory_widget_get_instance_private (self); - - GTK_WIDGET_CLASS (gtk_list_factory_widget_parent_class)->root (widget); - - if (priv->factory) - gtk_list_factory_widget_setup_factory (self); -} - -static void -gtk_list_factory_widget_unroot (GtkWidget *widget) -{ - GtkListFactoryWidget *self = GTK_LIST_FACTORY_WIDGET (widget); - GtkListFactoryWidgetPrivate *priv = gtk_list_factory_widget_get_instance_private (self); - - GTK_WIDGET_CLASS (gtk_list_factory_widget_parent_class)->unroot (widget); - - if (priv->object) - gtk_list_factory_widget_teardown_factory (self); -} - static void gtk_list_factory_widget_set_property (GObject *object, guint property_id, @@ -261,14 +237,24 @@ gtk_list_factory_widget_set_property (GObject *object, } static void -gtk_list_factory_widget_dispose (GObject *object) +gtk_list_factory_widget_clear_factory (GtkListFactoryWidget *self) { - GtkListFactoryWidget *self = GTK_LIST_FACTORY_WIDGET (object); GtkListFactoryWidgetPrivate *priv = gtk_list_factory_widget_get_instance_private (self); - g_assert (priv->object == NULL); + if (priv->factory == NULL) + return; + + if (priv->object) + gtk_list_factory_widget_teardown_factory (self); g_clear_object (&priv->factory); +} +static void +gtk_list_factory_widget_dispose (GObject *object) +{ + GtkListFactoryWidget *self = GTK_LIST_FACTORY_WIDGET (object); + + gtk_list_factory_widget_clear_factory (self); G_OBJECT_CLASS (gtk_list_factory_widget_parent_class)->dispose (object); } @@ -319,9 +305,6 @@ gtk_list_factory_widget_class_init (GtkListFactoryWidgetClass *klass) base_class->update = gtk_list_factory_widget_update; - widget_class->root = gtk_list_factory_widget_root; - widget_class->unroot = gtk_list_factory_widget_unroot; - gobject_class->set_property = gtk_list_factory_widget_set_property; gobject_class->dispose = gtk_list_factory_widget_dispose; @@ -553,19 +536,13 @@ gtk_list_factory_widget_set_factory (GtkListFactoryWidget *self, if (priv->factory == factory) return; - if (priv->factory) - { - if (priv->object) - gtk_list_factory_widget_teardown_factory (self); - g_clear_object (&priv->factory); - } + gtk_list_factory_widget_clear_factory (self); if (factory) { priv->factory = g_object_ref (factory); - if (gtk_widget_get_root (GTK_WIDGET (self))) - gtk_list_factory_widget_setup_factory (self); + gtk_list_factory_widget_setup_factory (self); } g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FACTORY]);