Merge branch 'master' of git+ssh://git.codethink.co.uk/git/atspi-dbus
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / tree.c
index a4a155d..01b53a4 100644 (file)
@@ -183,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);
@@ -207,7 +207,7 @@ message_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
 
   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"))
        {
@@ -293,23 +293,27 @@ static void handle_cache_item(char *path, guint action, CacheIterData *d)
   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 (SPI_DBUS_INTERFACE_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
@@ -322,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: