[gtk/wip/ebassi/a11y-2: 417/442] Notify mapped state to the accessible object directly
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/ebassi/a11y-2: 417/442] Notify mapped state to the accessible object directly
- Date: Fri, 5 Jun 2020 19:36:21 +0000 (UTC)
commit 9606c1eee9faaca7a7822ada3509b27fa98966e7
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Apr 22 20:25:48 2020 +0100
Notify mapped state to the accessible object directly
Do not use signal connections: if we have an accessible object, notify
it directly when getting mapped and unmapped.
gtk/a11y/gtkwidgetaccessible.c | 23 ++++++++++++++---------
gtk/a11y/gtkwidgetaccessibleprivate.h | 4 +++-
gtk/gtkwidget.c | 10 ++++++++++
3 files changed, 27 insertions(+), 10 deletions(-)
---
diff --git a/gtk/a11y/gtkwidgetaccessible.c b/gtk/a11y/gtkwidgetaccessible.c
index 9725d00f2e..ddd16a0cd6 100644
--- a/gtk/a11y/gtkwidgetaccessible.c
+++ b/gtk/a11y/gtkwidgetaccessible.c
@@ -76,16 +76,23 @@ gtk_widget_accessible_update_bounds (GtkWidgetAccessible *self)
g_signal_emit_by_name (self, "bounds-changed", &rect);
}
-/* Translate GtkWidget mapped state into AtkObject showing */
-static gint
-map_cb (GtkWidget *widget)
+/*< private >
+ * gtk_widget_accessible_notify_showing:
+ * @self: a #GtkWidgetAccessible
+ *
+ * Translates the #GtkWidget mapped state into the #AtkObject
+ * showing state.
+ */
+void
+gtk_widget_accessible_notify_showing (GtkWidgetAccessible *self)
{
- AtkObject *accessible;
+ g_return_if_fail (GTK_IS_WIDGET_ACCESSIBLE (self));
+
+ GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (self));
- accessible = gtk_widget_get_accessible (widget);
- atk_object_notify_state_change (accessible, ATK_STATE_SHOWING,
+ atk_object_notify_state_change (ATK_OBJECT (self),
+ ATK_STATE_SHOWING,
gtk_widget_get_mapped (widget));
- return 1;
}
static void
@@ -97,8 +104,6 @@ gtk_widget_accessible_initialize (AtkObject *obj,
widget = GTK_WIDGET (data);
g_signal_connect (widget, "notify", G_CALLBACK (notify_cb), NULL);
- g_signal_connect (widget, "map", G_CALLBACK (map_cb), NULL);
- g_signal_connect (widget, "unmap", G_CALLBACK (map_cb), NULL);
GTK_WIDGET_ACCESSIBLE (obj)->priv->layer = ATK_LAYER_WIDGET;
obj->role = ATK_ROLE_UNKNOWN;
diff --git a/gtk/a11y/gtkwidgetaccessibleprivate.h b/gtk/a11y/gtkwidgetaccessibleprivate.h
index ac60f0e43d..e1f210bb35 100644
--- a/gtk/a11y/gtkwidgetaccessibleprivate.h
+++ b/gtk/a11y/gtkwidgetaccessibleprivate.h
@@ -25,7 +25,9 @@ G_BEGIN_DECLS
void _gtk_widget_accessible_set_layer (GtkWidgetAccessible *accessible,
AtkLayer layer);
-void gtk_widget_accessible_update_bounds (GtkWidgetAccessible *self);
+void gtk_widget_accessible_update_bounds (GtkWidgetAccessible *self);
+
+void gtk_widget_accessible_notify_showing (GtkWidgetAccessible *self);
G_END_DECLS
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 0b23197342..de02f2b3ae 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -2754,11 +2754,16 @@ gtk_widget_map (GtkWidget *widget)
if (!_gtk_widget_get_mapped (widget))
{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
gtk_widget_push_verify_invariants (widget);
if (!_gtk_widget_get_realized (widget))
gtk_widget_realize (widget);
+ if (priv->accessible != NULL)
+ gtk_widget_accessible_notify_showing (GTK_WIDGET_ACCESSIBLE (priv->accessible));
+
g_signal_emit (widget, widget_signals[MAP], 0);
update_cursor_on_state_change (widget);
@@ -2783,6 +2788,8 @@ gtk_widget_unmap (GtkWidget *widget)
if (_gtk_widget_get_mapped (widget))
{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
g_object_ref (widget);
gtk_widget_push_verify_invariants (widget);
@@ -2791,6 +2798,9 @@ gtk_widget_unmap (GtkWidget *widget)
g_signal_emit (widget, widget_signals[UNMAP], 0);
+ if (priv->accessible != NULL)
+ gtk_widget_accessible_notify_showing (GTK_WIDGET_ACCESSIBLE (priv->accessible));
+
update_cursor_on_state_change (widget);
gtk_widget_pop_verify_invariants (widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]