From: Julian Sparber Date: Mon, 13 Sep 2021 14:29:30 +0000 (+0200) Subject: stack: Dispose children before emitting items-changed X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2^2~41 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=137a62cb944158a25220ef496000946dfc211b45;p=gtk4.git stack: Dispose children before emitting items-changed This makes sure that the `GListModel` returned by `gtk_stack_get_pages()` actually has the items removed before `items-changed` is emitted. Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4255 --- diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index dffc603452..469a25714a 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -690,13 +690,14 @@ gtk_stack_dispose (GObject *obj) GtkStack *stack = GTK_STACK (obj); GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); GtkWidget *child; - - if (priv->pages) - g_list_model_items_changed (G_LIST_MODEL (priv->pages), 0, g_list_length (priv->children), 0); + guint n_pages = g_list_length (priv->children); while ((child = gtk_widget_get_first_child (GTK_WIDGET (stack)))) stack_remove (stack, child, TRUE); + if (priv->pages) + g_list_model_items_changed (G_LIST_MODEL (priv->pages), 0, n_pages, 0); + G_OBJECT_CLASS (gtk_stack_parent_class)->dispose (obj); }