diff options
-rw-r--r-- | atk-adaptor/adaptors/accessible-adaptor.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/atk-adaptor/adaptors/accessible-adaptor.c b/atk-adaptor/adaptors/accessible-adaptor.c index ad71a021..097a9ef5 100644 --- a/atk-adaptor/adaptors/accessible-adaptor.c +++ b/atk-adaptor/adaptors/accessible-adaptor.c @@ -174,6 +174,7 @@ impl_GetChildAtIndex (DBusConnection *bus, &iter_socket); dbus_message_iter_append_basic (&iter_socket, DBUS_TYPE_STRING, &child_name); dbus_message_iter_append_basic (&iter_socket, DBUS_TYPE_OBJECT_PATH, &child_path); + g_free (child_name); dbus_message_iter_close_container (&iter, &iter_socket); return reply; } @@ -207,6 +208,32 @@ impl_GetChildren (DBusConnection *bus, dbus_message_iter_init_append (reply, &iter); if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(so)", &iter_array)) goto oom; + + if (ATK_IS_SOCKET (object) && atk_socket_is_occupied (ATK_SOCKET (object))) + { + AtkSocket *socket = ATK_SOCKET (object); + gchar *child_name, *child_path; + child_name = g_strdup (socket->embedded_plug_id); + child_path = g_utf8_strchr (child_name + 1, -1, ':'); + if (child_path) + { + DBusMessageIter iter_struct; + *(child_path++) = '\0'; + dbus_message_iter_open_container (&iter_array, DBUS_TYPE_STRUCT, NULL, + &iter_struct); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, + &child_name); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, + &child_path); + dbus_message_iter_close_container (&iter_array, &iter_struct); + g_free (child_name); + if (!dbus_message_iter_close_container (&iter, &iter_array)) + goto oom; + return reply; + } + g_free (child_name); + } + for (i = 0; i < count; i++) { AtkObject *child = atk_object_ref_accessible_child (object, i); |