X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fobject.c;h=351168285c7f3cfad0fdce4d3b864d50a01f5632;hb=f6a0fdcf50c5bcbab547996313161ee4200266e4;hp=0e6b6e2155a00829ab201e321f48fe292f0035a1;hpb=58dc2993f9bed48102566a5092593c76ef1844d8;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/object.c b/atk-adaptor/object.c index 0e6b6e2..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); } } @@ -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; }