diff options
Diffstat (limited to 'atspi')
-rw-r--r-- | atspi/atspi-accessible.c | 37 | ||||
-rw-r--r-- | atspi/atspi-accessible.h | 1 | ||||
-rw-r--r-- | atspi/atspi-misc.c | 1 | ||||
-rw-r--r-- | atspi/atspimarshal.list | 1 |
4 files changed, 37 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); } /** diff --git a/atspi/atspi-accessible.h b/atspi/atspi-accessible.h index 13e49628..35c0d5b2 100644 --- a/atspi/atspi-accessible.h +++ b/atspi/atspi-accessible.h @@ -66,6 +66,7 @@ struct _AtspiAccessibleClass AtspiObjectClass parent_class; void (*region_changed) (AtspiAccessible *accessible, gint current_offset, gint last_offset); + void (*mode_changed) (AtspiAccessible *accessible, gboolean enabled); }; GType atspi_accessible_get_type (void); diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c index f49041ec..6c4c3687 100644 --- a/atspi/atspi-misc.c +++ b/atspi/atspi-misc.c @@ -35,6 +35,7 @@ #include "atspi-gmain.h" #include <stdio.h> #include <string.h> +#include <ctype.h> static void handle_get_items (DBusPendingCall *pending, void *user_data); diff --git a/atspi/atspimarshal.list b/atspi/atspimarshal.list index 2d9dd51c..163720a6 100644 --- a/atspi/atspimarshal.list +++ b/atspi/atspimarshal.list @@ -23,3 +23,4 @@ # BOOL deprecated alias for BOOLEAN VOID:INT,INT +VOID:INT,STRING |