[at-spi2-core] Use the event name when sending screen reader events over dbus
- From: Mike Gorse <mgorse src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [at-spi2-core] Use the event name when sending screen reader events over dbus
- Date: Wed, 27 May 2020 15:49:41 +0000 (UTC)
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]