[at-spi2-core] Add mode-changed signal



commit 67b35674b5c04ad514c53d71b2e2f0017e00acdd
Author: Mike Gorse <mgorse suse com>
Date:   Sun Jun 7 15:41:15 2020 -0500

    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

 atspi/atspi-accessible.c | 37 ++++++++++++++++++++++++++++++++++---
 atspi/atspi-accessible.h |  1 +
 atspi/atspi-misc.c       |  1 +
 atspi/atspimarshal.list  |  1 +
 4 files changed, 37 insertions(+), 3 deletions(-)
---
diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c
index de99fbb..e85e6f4 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 13e4962..35c0d5b 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 f49041e..6c4c368 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 2d9dd51..163720a 100644
--- a/atspi/atspimarshal.list
+++ b/atspi/atspimarshal.list
@@ -23,3 +23,4 @@
 #   BOOL       deprecated alias for BOOLEAN
 
 VOID:INT,INT
+VOID:INT,STRING


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]