summaryrefslogtreecommitdiff
path: root/gtk/gtkwidget.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2021-01-21 16:39:22 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2021-01-21 16:40:57 +0000
commit95ceb4977055a3659369551364088340321c1224 (patch)
tree857ffb07e7c846df095ed0fa11150272b61cbc69 /gtk/gtkwidget.c
parent0bde58ffd7a72c708102f943a3ed8eaf929a31c1 (diff)
downloadgtk+-ebassi/lazier-a11y.tar.gz
a11y: Make GtkATContext realization lazierebassi/lazier-a11y
We only realize the ATContext on the top level, which will create an GtkAtSpiRoot object and the corresponding GtkAtSpiCache object. Whenever an AT connects to the accessibility bus, and asks for the various objects, all the ATContext will be realized on demand.
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r--gtk/gtkwidget.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 5ac8b9ac84..217293cd23 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -2374,7 +2374,7 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
priv->at_context = gtk_accessible_get_at_context (GTK_ACCESSIBLE (widget));
}
-static void
+void
gtk_widget_realize_at_context (GtkWidget *self)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (self);
@@ -2383,10 +2383,6 @@ gtk_widget_realize_at_context (GtkWidget *self)
if (priv->at_context == NULL || gtk_at_context_is_realized (priv->at_context))
return;
- /* Realize the root ATContext first */
- if (!GTK_IS_ROOT (self))
- gtk_widget_realize_at_context (GTK_WIDGET (priv->root));
-
/* Reset the accessible role to its current value */
if (role == GTK_ACCESSIBLE_ROLE_WIDGET)
{
@@ -2401,6 +2397,18 @@ gtk_widget_realize_at_context (GtkWidget *self)
}
void
+gtk_widget_unrealize_at_context (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ if (priv->at_context != NULL)
+ {
+ gtk_at_context_set_display (priv->at_context, gdk_display_get_default ());
+ gtk_at_context_unrealize (priv->at_context);
+ }
+}
+
+void
gtk_widget_root (GtkWidget *widget)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
@@ -2428,8 +2436,6 @@ gtk_widget_root (GtkWidget *widget)
if (priv->layout_manager)
gtk_layout_manager_set_root (priv->layout_manager, priv->root);
- gtk_widget_realize_at_context (widget);
-
GTK_WIDGET_GET_CLASS (widget)->root (widget);
if (!GTK_IS_ROOT (widget))
@@ -2454,12 +2460,6 @@ gtk_widget_unroot (GtkWidget *widget)
GTK_WIDGET_GET_CLASS (widget)->unroot (widget);
- if (priv->at_context != NULL)
- {
- gtk_at_context_set_display (priv->at_context, gdk_display_get_default ());
- gtk_at_context_unrealize (priv->at_context);
- }
-
if (priv->context)
gtk_style_context_set_display (priv->context, gdk_display_get_default ());