X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git;a=blobdiff_plain;f=atk-adaptor%2Fobject.c;h=351168285c7f3cfad0fdce4d3b864d50a01f5632;hp=ebaf4e568196373167b53b37d41c6fab3d43534c;hb=62ef943cbe84b8293bd99910a6a01d432d122eb5;hpb=f2abfa54853446970c1c3dda683132c1eac2e0b7 diff --git a/atk-adaptor/object.c b/atk-adaptor/object.c index ebaf4e5..3511682 100644 --- a/atk-adaptor/object.c +++ b/atk-adaptor/object.c @@ -55,12 +55,12 @@ * This function will simply look for all the accessibles that the cache object * has not found and assume that they need to be leased. */ -static void -maybe_lease (AtkObject *obj) +void +spi_object_lease_if_needed (GObject *obj) { - if (!spi_cache_in (spi_global_cache, G_OBJECT (obj))) + if (!spi_cache_in (spi_global_cache, obj)) { - spi_leasing_take (spi_global_leasing, G_OBJECT (obj)); + spi_leasing_take (spi_global_leasing, obj); } } @@ -78,7 +78,7 @@ spi_object_append_null_reference (DBusMessageIter * iter) { DBusMessageIter iter_struct; const char *name; - const char *path = "/org/at_spi/null"; + const char *path = SPI_DBUS_PATH_NULL; name = dbus_bus_get_unique_name (spi_global_app_data->bus); @@ -101,7 +101,38 @@ spi_object_append_reference (DBusMessageIter * iter, AtkObject * obj) return; } - maybe_lease (obj); + spi_object_lease_if_needed (G_OBJECT (obj)); + + name = dbus_bus_get_unique_name (spi_global_app_data->bus); + path = spi_register_object_to_path (spi_global_register, G_OBJECT (obj)); + + if (!path) + path = g_strdup (SPI_DBUS_PATH_NULL); + + dbus_message_iter_open_container (iter, DBUS_TYPE_STRUCT, NULL, + &iter_struct); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path); + dbus_message_iter_close_container (iter, &iter_struct); + + g_free (path); +} + +/* TODO: Perhaps combine with spi_object_append_reference. Leaving separate + * for now in case we want to use a different path for hyperlinks. */ +void +spi_hyperlink_append_reference (DBusMessageIter * iter, AtkHyperlink * obj) +{ + DBusMessageIter iter_struct; + const gchar *name; + gchar *path; + + if (!obj) { + spi_object_append_null_reference (iter); + return; + } + + spi_object_lease_if_needed (G_OBJECT (obj)); name = dbus_bus_get_unique_name (spi_global_app_data->bus); path = spi_register_object_to_path (spi_global_register, G_OBJECT (obj)); @@ -155,7 +186,24 @@ spi_object_return_reference (DBusMessage * msg, AtkObject * obj) dbus_message_iter_init_append (reply, &iter); spi_object_append_reference (&iter, obj); } - g_object_unref (G_OBJECT (obj)); + + return reply; +} + +DBusMessage * +spi_hyperlink_return_reference (DBusMessage * msg, AtkHyperlink * obj) +{ + DBusMessage *reply; + + reply = dbus_message_new_method_return (msg); + if (reply) + { + DBusMessageIter iter; + dbus_message_iter_init_append (reply, &iter); + spi_hyperlink_append_reference (&iter, obj); + } + if (obj) + g_object_unref (G_OBJECT (obj)); return reply; } @@ -176,6 +224,12 @@ spi_object_append_interfaces (DBusMessageIter * iter, AtkObject * obj) dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); } + if (atk_object_get_role (obj) == ATK_ROLE_APPLICATION) + { + itf = SPI_DBUS_INTERFACE_APPLICATION; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + if (ATK_IS_COMPONENT (obj)) { itf = SPI_DBUS_INTERFACE_COMPONENT; @@ -227,14 +281,14 @@ spi_object_append_interfaces (DBusMessageIter * iter, AtkObject * obj) #if 0 if (ATK_IS_STREAMABLE_CONTENT (obj)) { - itf = "org.freedesktop.atspi.StreamableContent"; + itf = "org.a11y.atspi.StreamableContent"; dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); } #endif if (ATK_IS_DOCUMENT (obj)) { - itf = "org.freedesktop.atspi.Collection"; + itf = "org.a11y.atspi.Collection"; dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); itf = SPI_DBUS_INTERFACE_DOCUMENT; dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf);