summaryrefslogtreecommitdiff
path: root/atspi/atspi-event-listener.c
diff options
context:
space:
mode:
authorMike Gorse <mgorse@alum.wpi.edu>2019-07-18 18:29:45 -0500
committerMike Gorse <mgorse@alum.wpi.edu>2019-07-18 18:29:45 -0500
commit8decb77c551536ef527f2b5c07968fd4da4e2e61 (patch)
tree999e5a9fd80e305db6bc0f7232a3387680563cc4 /atspi/atspi-event-listener.c
parent36a621aa17ed27be55cd9f16a1f7b29904cb510c (diff)
downloadat-spi2-core-8decb77c551536ef527f2b5c07968fd4da4e2e61.tar.gz
Add a sender to the AtspiEvent struct.
Normally, this is set to the application / root accessible from the application corresponding to the event source, but screen-reader-generated events are actually generated by the screen reader. The sender is set based on the application that sent the signal over dbus, so, in the latter case, this will be set to the screen reader. Per discussion at https://gitlab.gnome.org/GNOME/orca/issues/36
Diffstat (limited to 'atspi/atspi-event-listener.c')
-rw-r--r--atspi/atspi-event-listener.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/atspi/atspi-event-listener.c b/atspi/atspi-event-listener.c
index 9b95c3dd..5fb84026 100644
--- a/atspi/atspi-event-listener.c
+++ b/atspi/atspi-event-listener.c
@@ -882,6 +882,7 @@ atspi_event_copy (AtspiEvent *src)
dst->detail2 = src->detail2;
g_value_init (&dst->any_data, G_VALUE_TYPE (&src->any_data));
g_value_copy (&src->any_data, &dst->any_data);
+ dst->sender = g_object_ref (src->sender);
return dst;
}
@@ -892,6 +893,7 @@ atspi_event_free (AtspiEvent *event)
g_free (event->type);
g_value_unset (&event->any_data);
g_free (event);
+ g_object_unref (event->sender);
}
static gboolean
@@ -961,6 +963,7 @@ _atspi_dbus_handle_event (DBusConnection *bus, DBusMessage *message, void *data)
{
char *detail = NULL;
const char *category = dbus_message_get_interface (message);
+ const char *sender = dbus_message_get_sender (message);
const char *member = dbus_message_get_member (message);
const char *signature = dbus_message_get_signature (message);
gchar *name;
@@ -1026,7 +1029,7 @@ _atspi_dbus_handle_event (DBusConnection *bus, DBusMessage *message, void *data)
e.type = converted_type;
if (strcmp (category, "ScreenReader") != 0)
{
- e.source = _atspi_ref_accessible (dbus_message_get_sender(message), dbus_message_get_path(message));
+ e.source = _atspi_ref_accessible (sender, dbus_message_get_path (message));
if (e.source == NULL)
{
g_warning ("Got no valid source accessible for signal %s from interface %s\n", member, category);
@@ -1084,6 +1087,8 @@ _atspi_dbus_handle_event (DBusConnection *bus, DBusMessage *message, void *data)
cache = _atspi_dbus_update_cache_from_dict (e.source, &iter);
}
+ e.sender = _atspi_ref_accessible (sender, ATSPI_DBUS_PATH_ROOT);
+
if (!strncmp (e.type, "object:children-changed", 23))
{
cache_process_children_changed (&e);