diff options
author | Mike Gorse <mgorse@suse.com> | 2020-06-07 15:41:15 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@suse.com> | 2020-06-07 15:41:15 -0500 |
commit | 67b35674b5c04ad514c53d71b2e2f0017e00acdd (patch) | |
tree | 14f7a7211eb941cc9076351d244f8eab542afba7 /atspi/atspi-accessible.c | |
parent | 053af44c2a270c29ef286abdb3d0b083f05e39a6 (diff) | |
download | at-spi2-core-67b35674b5c04ad514c53d71b2e2f0017e00acdd.tar.gz |
Add mode-changed signal
Add a signal to allow a screen reader to indicate that its mode has changed.
https://gitlab.gnome.org/GNOME/orca/issues/36
Diffstat (limited to 'atspi/atspi-accessible.c')
-rw-r--r-- | atspi/atspi-accessible.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c index de99fbb7..e85e6f43 100644 --- a/atspi/atspi-accessible.c +++ b/atspi/atspi-accessible.c @@ -28,6 +28,7 @@ enum { REGION_CHANGED, + MODE_CHANGED, LAST_SIGNAL }; @@ -48,7 +49,7 @@ screen_reader_signal_watcher (GSignalInvocationHint *signal_hint, const char *name; DBusMessage *signal; DBusMessageIter iter, iter_struct, iter_variant, iter_array; - dbus_int32_t detail1, detail2; + dbus_int32_t detail1 = 0, detail2 = 0; const char *detail = ""; gchar *dbus_name; @@ -57,8 +58,12 @@ screen_reader_signal_watcher (GSignalInvocationHint *signal_hint, g_signal_query (signal_hint->signal_id, &signal_query); name = signal_query.signal_name; - detail1 = g_value_get_int (param_values + 1); - detail2 = g_value_get_int (param_values + 2); + if (signal_hint->detail) + detail = g_quark_to_string (signal_hint->detail); + if (n_param_values > 1) + detail1 = g_value_get_int (param_values + 1); + if (n_param_values > 2 && G_VALUE_HOLDS_INT (param_values + 2)) + detail2 = g_value_get_int (param_values + 2); accessible = ATSPI_ACCESSIBLE (object); dbus_name = _atspi_strdup_and_adjust_for_dbus (name); @@ -290,9 +295,35 @@ atspi_accessible_class_init (AtspiAccessibleClass *klass) G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); + /** + * AtspiAccessible::mode-changed: + * @atspiaccessible: the object which received the signal + * @arg1: a boolean specifying whether the mode is being toggled on or off. + * + * The signal "mode-changed" is emitted by a screen reader to indicate + * that its mode has changed. This signal supports the following details: + * focus-tracking + * flat-review + * mouse-review + * say-all + * caret-tracking + */ + atspi_accessible_signals[MODE_CHANGED] = + g_signal_new ("mode_changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, + G_STRUCT_OFFSET (AtspiAccessibleClass, mode_changed), + NULL, NULL, + atspi_marshal_VOID__INT_STRING, + G_TYPE_NONE, + 1, G_TYPE_INT); + g_signal_add_emission_hook (atspi_accessible_signals[REGION_CHANGED], 0, screen_reader_signal_watcher, NULL, (GDestroyNotify) NULL); + g_signal_add_emission_hook (atspi_accessible_signals[MODE_CHANGED], 0, + screen_reader_signal_watcher, NULL, + (GDestroyNotify) NULL); } /** |