X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Faccessible-marshaller.c;h=bccd0894aef48134b438870eb29d7ba9851611b9;hb=ea5287796c9b5d0045c4b401f3f1e7fec1d3c3cf;hp=2d5e4fd1c4d283feeedf1da8264a273b1658d5e1;hpb=b81654c1ff0e2602963d8cdec23f910458486801;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/accessible-marshaller.c b/atk-adaptor/accessible-marshaller.c index 2d5e4fd..bccd089 100644 --- a/atk-adaptor/accessible-marshaller.c +++ b/atk-adaptor/accessible-marshaller.c @@ -47,19 +47,20 @@ spi_dbus_append_name_and_path_inner (DBusMessageIter *iter, const char *bus_name dbus_message_iter_close_container (iter, &iter_struct); } +extern gchar *atspi_dbus_name; + void -spi_dbus_append_name_and_path (DBusMessage *message, DBusMessageIter *iter, AtkObject *obj, gboolean unref) +spi_dbus_append_name_and_path (DBusMessage *message, DBusMessageIter *iter, AtkObject *obj, gboolean do_register, gboolean unref) { gchar *path; DBusMessageIter iter_struct; - const char *bus_name = dbus_message_get_sender (message); - path = atk_dbus_object_to_path (obj, FALSE); + path = atk_dbus_object_to_path (obj, do_register); if (!path) path = g_strdup (SPI_DBUS_PATH_NULL); - spi_dbus_append_name_and_path_inner (iter, bus_name, path); + spi_dbus_append_name_and_path_inner (iter, atspi_dbus_name, path); g_free (path); if (obj && unref) @@ -79,8 +80,8 @@ spi_dbus_return_object (DBusMessage *message, AtkObject *obj, gboolean do_regist if (reply) { DBusMessageIter iter; - dbus_message_iter_init_append (message, &iter); - spi_dbus_append_name_and_path (message, &iter, obj, unref); + dbus_message_iter_init_append (reply, &iter); + spi_dbus_append_name_and_path (message, &iter, obj, do_register, unref); } return reply; @@ -129,6 +130,7 @@ spi_dbus_return_sub_object (DBusMessage *message, GObject *sub, GObject *contain dbus_bool_t spi_dbus_return_v_object (DBusMessageIter *iter, AtkObject *obj, int unref) { + DBusMessageIter iter_variant; char *path; path = atk_dbus_object_to_path (obj, FALSE); @@ -139,7 +141,10 @@ spi_dbus_return_v_object (DBusMessageIter *iter, AtkObject *obj, int unref) if (unref) g_object_unref (obj); - return droute_return_v_object (iter, path); + dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "(so)", &iter_variant); + spi_dbus_append_name_and_path_inner (&iter_variant, NULL, path); + dbus_message_iter_close_container (iter, &iter_variant); + return TRUE; } /*---------------------------------------------------------------------------*/ @@ -253,19 +258,29 @@ spi_atk_append_accessible(AtkObject *obj, gpointer data) dbus_uint32_t role; set = atk_object_ref_state_set (obj); - dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct); { AtkObject *parent; - gchar *path, *path_parent; + gchar *path; + gchar *bus_parent = NULL, *path_parent; /* Marshall object path */ path = atk_dbus_object_to_path (obj, FALSE); + role = spi_accessible_role_from_atk_role (atk_object_get_role (obj)); + /* Marshall parent */ parent = atk_object_get_parent(obj); if (parent == NULL) { - path_parent = atk_dbus_desktop_object_path (); + /* TODO: Support getting parent of an AtkPlug */ +#ifdef __ATK_PLUG_H__ + if (role != Accessibility_ROLE_APPLICATION && !ATK_IS_PLUG (obj)) +#else + if (role != Accessibility_ROLE_APPLICATION) +#endif + path_parent = g_strdup (SPI_DBUS_PATH_NULL); + else + path_parent = atk_dbus_desktop_object_path (); } else { @@ -286,9 +301,11 @@ spi_atk_append_accessible(AtkObject *obj, gpointer data) } } + dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct); dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path); - spi_dbus_append_name_and_path_inner (&iter_struct, NULL, path_parent); + spi_dbus_append_name_and_path_inner (&iter_struct, bus_parent, path_parent); g_free(path_parent); + g_free (bus_parent); /* Marshall children */ dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "(so)", &iter_sub_array); @@ -312,6 +329,22 @@ spi_atk_append_accessible(AtkObject *obj, gpointer data) g_object_unref(G_OBJECT(child)); } } +#ifdef __ATK_PLUG_H__ + if (ATK_IS_SOCKET (obj) && atk_socket_is_occupied (ATK_SOCKET(obj))) + { + AtkSocket *socket = ATK_SOCKET(obj); + 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) + { + *(child_path++) = '\0'; + spi_dbus_append_name_and_path_inner (&iter_sub_array, child_name, child_path); + } + g_free (child_name); + } +#endif + dbus_message_iter_close_container (&iter_struct, &iter_sub_array); /* Marshall interfaces */ @@ -326,7 +359,6 @@ spi_atk_append_accessible(AtkObject *obj, gpointer data) dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name); /* Marshall role */ - role = spi_accessible_role_from_atk_role (atk_object_get_role (obj)); dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_UINT32, &role); /* Marshall description */