summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--atspi/atspi-accessible.c37
-rw-r--r--atspi/atspi-accessible.h1
-rw-r--r--atspi/atspi-misc.c1
-rw-r--r--atspi/atspimarshal.list1
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