summaryrefslogtreecommitdiff
path: root/atspi/atspi-accessible.c
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2020-06-07 15:41:15 -0500
committerMike Gorse <mgorse@suse.com>2020-06-07 15:41:15 -0500
commit67b35674b5c04ad514c53d71b2e2f0017e00acdd (patch)
tree14f7a7211eb941cc9076351d244f8eab542afba7 /atspi/atspi-accessible.c
parent053af44c2a270c29ef286abdb3d0b083f05e39a6 (diff)
downloadat-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.c37
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);
}
/**