X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Ftree.c;h=01b53a4d520906526649b9c574c38c85bf75c8c9;hb=9509d1810600ad3640b3868363f4ee298a97c129;hp=ec5428cbc5a2bdebebfa0e562fda292dad0f0a1f;hpb=fba068b572d32d232f4b2b3ac594e88aef5d0f1c;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/tree.c b/atk-adaptor/tree.c index ec5428c..01b53a4 100644 --- a/atk-adaptor/tree.c +++ b/atk-adaptor/tree.c @@ -43,6 +43,8 @@ append_update (DBusMessageIter * iter_array, AtkObject * obj, gint childcount; GSList *l; + g_assert(data != NULL); + dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct); path = spi_dbus_get_path (obj); @@ -126,6 +128,8 @@ spi_dbus_append_tree (DBusMessage * message, AtkObject * obj, DBusMessageIter iter, iter_array; dbus_bool_t result; + g_assert(data != NULL); + dbus_message_iter_init_append (message, &iter); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ooaoassus)", &iter_array); @@ -179,7 +183,7 @@ impl_introspect (DBusConnection *bus, DBusMessage *message, void *user_data) g_string_append_printf(output, spi_introspection_node_element, path); - spi_append_interface(output, "org.freedesktop.atspi.Tree"); + spi_append_interface(output, SPI_DBUS_INTERFACE_TREE); g_string_append(output, spi_introspection_footer); final = g_string_free(output, FALSE); @@ -200,8 +204,10 @@ message_handler (DBusConnection *bus, DBusMessage *message, void *user_data) const char *member = dbus_message_get_member (message); DBusMessage *reply = NULL; + + g_return_val_if_fail(iface != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED); - if (!strcmp(iface, "org.freedesktop.atspi.Tree")) + if (!strcmp(iface, SPI_DBUS_INTERFACE_TREE)) { if (!strcmp(member, "getRoot")) { @@ -240,10 +246,11 @@ static DBusObjectPathVTable tree_vtable = void spi_register_tree_object(DBusConnection *bus, + DRouteData *data, const char *path) { dbus_bool_t mem = FALSE; - mem = dbus_connection_register_object_path(bus, path, &tree_vtable, NULL); + mem = dbus_connection_register_object_path(bus, path, &tree_vtable, data); g_assert(mem == TRUE); } @@ -284,23 +291,29 @@ static void handle_cache_item(char *path, guint action, CacheIterData *d) break; } g_hash_table_remove(cache_list, path); - } +} -gboolean spi_dbus_update_cache(DRouteData *data) +gboolean +spi_dbus_update_cache(DRouteData *data) { DBusMessage *message; DBusMessageIter iter; CacheIterData d; + static gboolean in_update_cache = FALSE; + + if (in_update_cache) return TRUE; + g_assert(data != NULL); if (update_pending == 0) return FALSE; //printf("Sending cache\n"); - message = dbus_message_new_signal("/org/freedesktop/atspi/tree", "org.freedesktop.atspi.Tree", "UpdateTree"); + message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", SPI_DBUS_INTERFACE_TREE, "updateTree"); if (!message) goto done; dbus_message_iter_init_append (message, &iter); dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ooaoassus)", &d.iter); d.droute = data; d.removing = FALSE; + in_update_cache = TRUE; do { /* This loop is needed because appending an item may cause new children @@ -313,6 +326,7 @@ gboolean spi_dbus_update_cache(DRouteData *data) dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "o", &d.iter); d.removing = TRUE; g_hash_table_foreach(cache_list, (GHFunc)handle_cache_item, &d); + in_update_cache = FALSE; dbus_message_iter_close_container(&iter, &d.iter); dbus_connection_send(data->bus, message, NULL); done: