diff --git a/gtk/gtkatcontext.c b/gtk/gtkatcontext.c index 6e38f14cd5..1d263832c6 100644 --- a/gtk/gtkatcontext.c +++ b/gtk/gtkatcontext.c @@ -515,29 +515,35 @@ static GtkATContext * get_parent_context (GtkATContext *self); static inline void maybe_realize_context (GtkATContext *self) { - GtkAccessible *accessible_parent; - GtkATContext *parent_context; - - parent_context = get_parent_context (self); - - if (!GTK_IS_WIDGET (self->accessible) || (parent_context && parent_context->realized)) - gtk_at_context_realize (self); - - g_clear_object (&parent_context); - - accessible_parent = self->accessible_parent; - while (accessible_parent && !GTK_IS_WIDGET (accessible_parent)) + if (GTK_IS_WIDGET (self->accessible)) { - parent_context = gtk_accessible_get_at_context (accessible_parent); + GtkATContext *parent_context = get_parent_context (self); - if (!parent_context) - break; - - gtk_at_context_realize (parent_context); - accessible_parent = parent_context->accessible_parent; + if (parent_context && parent_context->realized) + gtk_at_context_realize (self); g_clear_object (&parent_context); } + else + { + GtkAccessible *accessible_parent; + + gtk_at_context_realize (self); + + accessible_parent = self->accessible_parent; + while (accessible_parent && !GTK_IS_WIDGET (accessible_parent)) + { + GtkATContext *parent_context = gtk_accessible_get_at_context (accessible_parent); + + if (!parent_context) + break; + + gtk_at_context_realize (parent_context); + accessible_parent = parent_context->accessible_parent; + + g_clear_object (&parent_context); + } + } } /*< private >