X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fadaptors%2Fcache-adaptor.c;h=79a9e6aca00588e6375827ec02f5c8098271a694;hb=9700b1af8a276f7f858f0319bab64aa3d30a4cd5;hp=3b6b28c29a1271fcccc107596d5d844b8d154af5;hpb=76eef82a0842f4db4d70aad466e8af5ca4ec3956;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/adaptors/cache-adaptor.c b/atk-adaptor/adaptors/cache-adaptor.c index 3b6b28c..79a9e6a 100644 --- a/atk-adaptor/adaptors/cache-adaptor.c +++ b/atk-adaptor/adaptors/cache-adaptor.c @@ -28,8 +28,8 @@ #include #include -#include "common/spi-dbus.h" -#include "common/spi-stateset.h" +#include "spi-dbus.h" +#include "accessible-stateset.h" #include "accessible-cache.h" #include "bridge.h" #include "object.h" @@ -80,8 +80,6 @@ append_cache_item (AtkObject * obj, gpointer data) const char *name, *desc; dbus_uint32_t role; - g_object_ref (G_OBJECT (obj)); - set = atk_object_ref_state_set (obj); { AtkObject *application, *parent; @@ -132,7 +130,7 @@ append_cache_item (AtkObject * obj, gpointer data) spi_object_append_null_reference (&iter_struct); } } - else if (role != Accessibility_ROLE_APPLICATION) + else if (role != ATSPI_ROLE_APPLICATION) spi_object_append_null_reference (&iter_struct); else spi_object_append_desktop_reference (&iter_struct); @@ -145,7 +143,8 @@ append_cache_item (AtkObject * obj, gpointer data) /* Marshall children */ dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "(so)", &iter_sub_array); - if (!atk_state_set_contains_state (set, ATK_STATE_MANAGES_DESCENDANTS)) + if (!atk_state_set_contains_state (set, ATK_STATE_MANAGES_DESCENDANTS) && + !atk_state_set_contains_state (set, ATK_STATE_DEFUNCT)) { gint childcount, i; @@ -153,7 +152,6 @@ append_cache_item (AtkObject * obj, gpointer data) for (i = 0; i < childcount; i++) { AtkObject *child; - gchar *child_path; child = atk_object_ref_accessible_child (obj, i); spi_object_append_reference (&iter_sub_array, child); @@ -215,11 +213,16 @@ append_cache_item (AtkObject * obj, gpointer data) } dbus_message_iter_close_container (iter_array, &iter_struct); g_object_unref (set); - g_object_unref (obj); } /*---------------------------------------------------------------------------*/ +static void +ref_accessible_hf (gpointer key, gpointer obj_data, gpointer data) +{ + g_object_ref (key); +} + /* For use as a GHFunc */ static void append_accessible_hf (gpointer key, gpointer obj_data, gpointer data) @@ -229,6 +232,13 @@ append_accessible_hf (gpointer key, gpointer obj_data, gpointer data) append_cache_item (ATK_OBJECT (key), data); } +static void +add_to_list_hf (gpointer key, gpointer obj_data, gpointer data) +{ + GSList **listptr = data; + *listptr = g_slist_prepend (*listptr, key); +} + /*---------------------------------------------------------------------------*/ static void @@ -237,11 +247,10 @@ emit_cache_remove (SpiCache *cache, GObject * obj) DBusMessage *message; if ((message = dbus_message_new_signal (SPI_CACHE_OBJECT_PATH, - SPI_DBUS_INTERFACE_CACHE, + ATSPI_DBUS_INTERFACE_CACHE, "RemoveAccessible"))) { DBusMessageIter iter; - gchar *path; dbus_message_iter_init_append (message, &iter); @@ -260,13 +269,15 @@ emit_cache_add (SpiCache *cache, GObject * obj) DBusMessage *message; if ((message = dbus_message_new_signal (SPI_CACHE_OBJECT_PATH, - SPI_DBUS_INTERFACE_CACHE, + ATSPI_DBUS_INTERFACE_CACHE, "AddAccessible"))) { DBusMessageIter iter; dbus_message_iter_init_append (message, &iter); + g_object_ref (accessible); append_cache_item (accessible, &iter); + g_object_unref (accessible); dbus_connection_send (spi_global_app_data->bus, message, NULL); @@ -290,13 +301,20 @@ impl_GetItems (DBusConnection * bus, DBusMessage * message, void *user_data) { DBusMessage *reply; DBusMessageIter iter, iter_array; + GSList *pending_unrefs = NULL; + + if (bus == spi_global_app_data->bus) + spi_atk_add_client (dbus_message_get_sender (message)); reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, SPI_CACHE_ITEM_SIGNATURE, &iter_array); + spi_cache_foreach (spi_global_cache, ref_accessible_hf, NULL); spi_cache_foreach (spi_global_cache, append_accessible_hf, &iter_array); + spi_cache_foreach (spi_global_cache, add_to_list_hf, &pending_unrefs); + g_slist_free_full (pending_unrefs, g_object_unref); dbus_message_iter_close_container (&iter, &iter_array); return reply; } @@ -312,17 +330,13 @@ static DRouteMethod methods[] = { void spi_initialize_cache (DRoutePath * path) { - droute_path_add_interface (path, SPI_DBUS_INTERFACE_CACHE, spi_org_a11y_atspi_Cache, methods, NULL); + droute_path_add_interface (path, ATSPI_DBUS_INTERFACE_CACHE, spi_org_a11y_atspi_Cache, methods, NULL); - g_signal_connect (spi_global_cache, - "object-added", - (GCallback) emit_cache_add, - NULL); + g_signal_connect (spi_global_cache, "object-added", + (GCallback) emit_cache_add, NULL); - g_signal_connect (spi_global_cache, - "object-removed", - (GCallback) emit_cache_remove, - NULL); + g_signal_connect (spi_global_cache, "object-removed", + (GCallback) emit_cache_remove, NULL); }; /*END------------------------------------------------------------------------*/