From: Matthias Clasen Date: Fri, 3 Mar 2023 13:44:29 +0000 (-0500) Subject: stack: Don't recreate at contexts in dispose X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~6^2~4^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=611788fb5305eff18d6e66eab800af304a84bfc7;p=gtk4.git stack: Don't recreate at contexts in dispose This is the same protection we have in GtkWidgetAccessible. --- diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 0975ecf472..59a3a0357b 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -219,6 +219,7 @@ struct _GtkStackPage guint needs_attention : 1; guint visible : 1; guint use_underline : 1; + guint in_destruction : 1; }; typedef struct _GtkStackPageClass GtkStackPageClass; @@ -235,6 +236,14 @@ gtk_stack_page_accessible_get_at_context (GtkAccessible *accessible) { GtkStackPage *page = GTK_STACK_PAGE (accessible); + if (page->in_destruction) + { + GTK_DEBUG (A11Y, "ATContext for “%s” [%p] accessed during destruction", + G_OBJECT_TYPE_NAME (accessible), + accessible); + return NULL; + } + if (page->at_context == NULL) { GtkAccessibleRole role = GTK_ACCESSIBLE_ROLE_TAB_PANEL; @@ -353,6 +362,8 @@ gtk_stack_page_dispose (GObject *object) { GtkStackPage *page = GTK_STACK_PAGE (object); + page->in_destruction = TRUE; + g_clear_object (&page->at_context); G_OBJECT_CLASS (gtk_stack_page_parent_class)->dispose (object);