[at-spi2-core] Use the event name when sending screen reader events over dbus



commit 053af44c2a270c29ef286abdb3d0b083f05e39a6
Author: Mike Gorse <mgorse suse com>
Date:   Wed May 27 10:47:13 2020 -0500

    Use the event name when sending screen reader events over dbus
    
    For screen reader events, look at the name of the signal and convert it,
    rather than hard-coding "RegionChanged." This is necessary to allow
    screen_reader_signal_watcher to process signals that will be added in the
    future.
    
    https://gitlab.gnome.org/GNOME/orca/issues/36

 atspi/atspi-accessible.c     |  5 ++++-
 atspi/atspi-event-listener.c | 32 +-------------------------------
 atspi/atspi-misc-private.h   |  2 ++
 atspi/atspi-misc.c           | 30 ++++++++++++++++++++++++++++++
 4 files changed, 37 insertions(+), 32 deletions(-)
---
diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c
index fd6737d..de99fbb 100644
--- a/atspi/atspi-accessible.c
+++ b/atspi/atspi-accessible.c
@@ -50,6 +50,7 @@ screen_reader_signal_watcher (GSignalInvocationHint *signal_hint,
   DBusMessageIter iter, iter_struct, iter_variant, iter_array;
   dbus_int32_t detail1, detail2;
   const char *detail = "";
+  gchar *dbus_name;
 
   object = g_value_get_object (param_values + 0);
   g_return_val_if_fail (ATSPI_IS_ACCESSIBLE(object), FALSE);
@@ -60,9 +61,11 @@ screen_reader_signal_watcher (GSignalInvocationHint *signal_hint,
   detail2 = g_value_get_int (param_values + 2);
   accessible = ATSPI_ACCESSIBLE (object);
 
+  dbus_name = _atspi_strdup_and_adjust_for_dbus (name);
   signal = dbus_message_new_signal (ATSPI_DBUS_PATH_SCREEN_READER,
                                     ATSPI_DBUS_INTERFACE_EVENT_SCREEN_READER,
-                                    "RegionChanged");
+                                    dbus_name);
+  g_free (dbus_name);
   dbus_message_iter_init_append (signal, &iter);
   dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &detail);
   dbus_message_iter_append_basic (&iter, DBUS_TYPE_INT32, &detail1);
diff --git a/atspi/atspi-event-listener.c b/atspi/atspi-event-listener.c
index 249890b..03e930a 100644
--- a/atspi/atspi-event-listener.c
+++ b/atspi/atspi-event-listener.c
@@ -332,40 +332,10 @@ demarshal_rect (DBusMessageIter *iter, AtspiRect *rect)
   return TRUE;
 }
 
-static gchar *
-strdup_and_adjust_for_dbus (const char *s)
-{
-  gchar *d = g_strdup (s);
-  gchar *p;
-  int parts = 0;
-
-  if (!d)
-    return NULL;
-
-  for (p = d; *p; p++)
-  {
-    if (*p == '-')
-    {
-      memmove (p, p + 1, g_utf8_strlen (p, -1));
-      *p = toupper (*p);
-    }
-    else if (*p == ':')
-    {
-      parts++;
-      if (parts == 2)
-        break;
-      p [1] = toupper (p [1]);
-    }
-  }
-
-  d [0] = toupper (d [0]);
-  return d;
-}
-
 static gboolean
 convert_event_type_to_dbus (const char *eventType, char **categoryp, char **namep, char **detailp, GPtrArray 
**matchrule_array)
 {
-  gchar *tmp = strdup_and_adjust_for_dbus (eventType);
+  gchar *tmp = _atspi_strdup_and_adjust_for_dbus (eventType);
   char *category = NULL, *name = NULL, *detail = NULL;
   char *saveptr = NULL;
 
diff --git a/atspi/atspi-misc-private.h b/atspi/atspi-misc-private.h
index f0b5adb..fb78b02 100644
--- a/atspi/atspi-misc-private.h
+++ b/atspi/atspi-misc-private.h
@@ -168,6 +168,8 @@ gboolean _atspi_set_allow_sync (gboolean val);
 void _atspi_set_error_no_sync (GError **error);
 
 gboolean _atspi_prepare_screen_reader_interface ();
+
+gchar * _atspi_strdup_and_adjust_for_dbus (const char *s);
 G_END_DECLS
 
 #endif /* _ATSPI_MISC_PRIVATE_H_ */
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c
index 9e8595a..f49041e 100644
--- a/atspi/atspi-misc.c
+++ b/atspi/atspi-misc.c
@@ -1899,3 +1899,33 @@ _atspi_prepare_screen_reader_interface ()
   dbus_connection_add_filter (a11y_bus, screen_reader_filter, NULL, NULL);
   return TRUE;
 }
+
+gchar *
+_atspi_strdup_and_adjust_for_dbus (const char *s)
+{
+  gchar *d = g_strdup (s);
+  gchar *p;
+  int parts = 0;
+
+  if (!d)
+    return NULL;
+
+  for (p = d; *p; p++)
+  {
+    if (*p == '-')
+    {
+      memmove (p, p + 1, g_utf8_strlen (p, -1));
+      *p = toupper (*p);
+    }
+    else if (*p == ':')
+    {
+      parts++;
+      if (parts == 2)
+        break;
+      p [1] = toupper (p [1]);
+    }
+  }
+
+  d [0] = toupper (d [0]);
+  return d;
+}


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