2008-12-04 Mike Gorse <mgorse@novell.com>
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / tree.c
index 7efca21..4a256a9 100644 (file)
@@ -28,7 +28,7 @@
 #include "accessible.h"
 #include "bridge.h"
 
-extern SpiAppData *this_app;
+extern SpiAppData *app_data;
 static gboolean update_pending = FALSE;
 
 /*---------------------------------------------------------------------------*/
@@ -39,7 +39,7 @@ static const char *dumm = "/APath/1";
  * Marshals the given AtkObject into the provided D-Bus iterator.
  *
  * The object is marshalled including all its client side cache data.
- * The format of the strucuture is (ooaoassus).
+ * The format of the structure is (ooaoassusau).
  * This is used in the updateTree signal and the getTree method
  * of the org.freedesktop.atspi.Tree interface.
  */
@@ -50,6 +50,8 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter)
   DBusMessageIter *iter_array;
   DBusMessageIter iter_struct, iter_sub_array;
   DRouteData *data;
+  dbus_int32_t states [2];
+  int count;
 
   const char *name, *desc;
   int i;
@@ -58,7 +60,7 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter)
 
   obj = ATK_OBJECT(obj_data);
   iter_array = (DBusMessageIter *) iter;
-  data = &(this_app->droute);
+  data = &(app_data->droute);
 
   dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
     {
@@ -67,7 +69,6 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter)
 
       path = atk_dbus_get_path_from_ref(GPOINTER_TO_INT(ref));
       dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path);
-      g_free(path);
 
       parent = atk_object_get_parent(obj);
       if (parent == NULL)
@@ -128,7 +129,14 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter)
       if (!desc)
         desc = "";
       dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &desc);
+
+      g_free(path);
     }      
+  spi_atk_state_to_dbus_array (obj, &states);
+      dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "u", &iter_sub_array);
+  for (count = 0; count < 2; count++)
+    dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_UINT32, &states[count]);
+      dbus_message_iter_close_container (&iter_struct, &iter_sub_array);
   dbus_message_iter_close_container (iter_array, &iter_struct);
 }
 
@@ -162,13 +170,13 @@ send_cache_update(gpointer d)
   DBusMessageIter iter_array;
   DRouteData *data;
 
-  data = &(this_app->droute);
+  data = &(app_data->droute);
 
   message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", SPI_DBUS_INTERFACE_TREE, "updateTree");
 
   dbus_message_iter_init_append (message, &iter);
 
-  dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ooaoassus)", &iter_array);
+  dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ooaoassusau)", &iter_array);
   atk_dbus_foreach_update_list(append_accessible, &iter_array);
   dbus_message_iter_close_container(&iter, &iter_array);
 
@@ -226,7 +234,7 @@ impl_getTree (DBusConnection *bus, DBusMessage *message, void *user_data)
   reply = dbus_message_new_method_return (message);
 
   dbus_message_iter_init_append (reply, &iter);
-  dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(ooaoassus)", &iter_array);
+  dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(ooaoassusau)", &iter_array);
   atk_dbus_foreach_registered(append_accessible, &iter_array);
   dbus_message_iter_close_container(&iter, &iter_array);
   return reply;