API changes for out--of-process accessibles, and support ParentOf
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / accessible-adaptor.c
index 1536236..8c115f1 100644 (file)
 #include <atk/atk.h>
 #include <droute/droute.h>
 
-#include "spi-common/spi-dbus.h"
+#include "common/spi-dbus.h"
+#include "common/spi-stateset.h"
 #include "accessible-marshaller.h"
 #include "accessible-register.h"
 
 static dbus_bool_t
-impl_get_name (DBusMessageIter *iter, void *user_data)
+impl_get_Name (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
 
@@ -40,7 +41,7 @@ impl_get_name (DBusMessageIter *iter, void *user_data)
 }
 
 static dbus_bool_t
-impl_set_name (DBusMessageIter *iter, void *user_data)
+impl_set_Name (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   const char *name = droute_get_v_string (iter);
@@ -52,7 +53,7 @@ impl_set_name (DBusMessageIter *iter, void *user_data)
 }
 
 static dbus_bool_t
-impl_get_description (DBusMessageIter *iter, void *user_data)
+impl_get_Description (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
 
@@ -62,7 +63,7 @@ impl_get_description (DBusMessageIter *iter, void *user_data)
 }
 
 static dbus_bool_t
-impl_set_description (DBusMessageIter *iter, void *user_data)
+impl_set_Description (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   const char *description = droute_get_v_string (iter);
@@ -74,7 +75,7 @@ impl_set_description (DBusMessageIter *iter, void *user_data)
 }
 
 static dbus_bool_t
-impl_get_parent (DBusMessageIter *iter, void *user_data)
+impl_get_Parent (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
 
@@ -86,7 +87,7 @@ impl_get_parent (DBusMessageIter *iter, void *user_data)
 }
 
 static dbus_bool_t
-impl_get_childCount (DBusMessageIter *iter, void *user_data)
+impl_get_ChildCount (DBusMessageIter *iter, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
 
@@ -98,7 +99,7 @@ impl_get_childCount (DBusMessageIter *iter, void *user_data)
 }
 
 static DBusMessage *
-impl_getChildAtIndex (DBusConnection *bus,
+impl_GetChildAtIndex (DBusConnection *bus,
                       DBusMessage *message,
                       void *user_data)
 {
@@ -113,11 +114,11 @@ impl_getChildAtIndex (DBusConnection *bus,
   if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID))
       return spi_dbus_general_error (message);
   child = atk_object_ref_accessible_child (object, i);
-  return spi_dbus_return_object (message, child, FALSE);
+  return spi_dbus_return_object (message, child, FALSE, FALSE);
 }
 
 static DBusMessage *
-impl_getChildren (DBusConnection *bus,
+impl_GetChildren (DBusConnection *bus,
                   DBusMessage *message,
                   void *user_data)
 {
@@ -139,7 +140,7 @@ impl_getChildren (DBusConnection *bus,
   for (i = 0; i < count; i++)
     {
       AtkObject *child = atk_object_ref_accessible_child (object, i);
-      char *path = atk_dbus_object_to_path (child);
+      char *path = atk_dbus_object_to_path (child, FALSE);
       if (path)
        {
          dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_OBJECT_PATH,
@@ -158,7 +159,7 @@ oom:
 }
 
 static DBusMessage *
-impl_getIndexInParent (DBusConnection *bus,
+impl_GetIndexInParent (DBusConnection *bus,
                        DBusMessage *message,
                        void *user_data)
 {
@@ -223,7 +224,7 @@ spi_relation_type_from_atk_relation_type (AtkRelationType type)
 }
 
 static DBusMessage *
-impl_getRelationSet (DBusConnection *bus,
+impl_GetRelationSet (DBusConnection *bus,
                      DBusMessage *message,
                      void *user_data)
 {
@@ -240,7 +241,7 @@ impl_getRelationSet (DBusConnection *bus,
   if (!reply) return NULL;
   set = atk_object_ref_relation_set (object);
   dbus_message_iter_init_append (reply, &iter);
-  if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(uao)", &iter_array))
+  if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ua(so))", &iter_array))
   {
     goto oom;
   }
@@ -260,7 +261,7 @@ impl_getRelationSet (DBusConnection *bus,
       goto oom;
     }
     dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_UINT32, &type);
-    if (!dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "o", &iter_targets))
+    if (!dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "(so)", &iter_targets))
     {
       goto oom;
     }
@@ -269,8 +270,13 @@ impl_getRelationSet (DBusConnection *bus,
       AtkObject *obj = target->pdata[j];
       char *path;
       if (!obj) continue;
-      path = atk_dbus_object_to_path (obj);
-      dbus_message_iter_append_basic (&iter_targets, DBUS_TYPE_OBJECT_PATH, &path);
+      path = atk_dbus_object_to_path (obj, FALSE);
+      if (!path)
+      {
+       g_warning ("Unknown object in relation type %d\n", type);
+       continue;
+      }
+      spi_dbus_append_name_and_path_inner (&iter_targets, NULL, path);
     }
     dbus_message_iter_close_container (&iter_struct, &iter_targets);
     dbus_message_iter_close_container (&iter_array, &iter_struct);
@@ -409,7 +415,7 @@ spi_accessible_role_from_atk_role (AtkRole role)
 }
 
 static DBusMessage *
-impl_getRole (DBusConnection *bus, DBusMessage *message, void *user_data)
+impl_GetRole (DBusConnection *bus, DBusMessage *message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   gint role;
@@ -439,7 +445,7 @@ impl_get_role_str (void *datum)
 }
 
 static DBusMessage *
-impl_getRoleName (DBusConnection *bus,
+impl_GetRoleName (DBusConnection *bus,
                   DBusMessage *message,
                   void *user_data)
 {
@@ -464,7 +470,7 @@ impl_getRoleName (DBusConnection *bus,
 }
 
 static DBusMessage *
-impl_getLocalizedRoleName (DBusConnection *bus,
+impl_GetLocalizedRoleName (DBusConnection *bus,
                            DBusMessage *message,
                            void *user_data)
 {
@@ -489,7 +495,7 @@ impl_getLocalizedRoleName (DBusConnection *bus,
 }
 
 static DBusMessage *
-impl_getState (DBusConnection *bus,
+impl_GetState (DBusConnection *bus,
                DBusMessage *message,
                void *user_data)
 {
@@ -511,41 +517,24 @@ impl_getState (DBusConnection *bus,
 }
 
 static DBusMessage *
-impl_getAttributes (DBusConnection *bus,
+impl_GetAttributes (DBusConnection *bus,
                     DBusMessage *message,
                     void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   DBusMessage *reply;
 
-  GSList *attr;
   AtkAttributeSet *attributes;
-  DBusMessageIter iter, dictIter, dictEntryIter;
-  gint n_attributes = 0;
+  DBusMessageIter iter;
 
   g_return_val_if_fail (ATK_IS_OBJECT (user_data),
                         droute_not_yet_handled_error (message));
 
   attributes = atk_object_get_attributes (object);
 
-  if (attributes)
-    n_attributes = g_slist_length (attributes);
-
-  attr = attributes;
-
   reply = dbus_message_new_method_return (message);
   dbus_message_iter_init_append (reply, &iter);
-  dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "{ss}", &dictIter);
-  while (attr)
-    {
-      AtkAttribute *attribute = (AtkAttribute *) attr->data;
-      dbus_message_iter_open_container (&dictIter, DBUS_TYPE_DICT_ENTRY, NULL, &dictEntryIter);
-      dbus_message_iter_append_basic (&dictEntryIter, DBUS_TYPE_STRING, &attribute->name);
-      dbus_message_iter_append_basic (&dictEntryIter, DBUS_TYPE_STRING, &attribute->value);
-      dbus_message_iter_close_container (&dictIter, &dictEntryIter);
-      attr = g_slist_next (attr);
-    }
-  dbus_message_iter_close_container (&iter, &dictIter);
+  spi_atk_append_attribute_set (&iter, attributes);
 
   if (attributes)
     atk_attribute_set_free (attributes);
@@ -554,33 +543,58 @@ impl_getAttributes (DBusConnection *bus,
 }
 
 static DBusMessage *
-impl_getApplication (DBusConnection *bus,
+impl_GetApplication (DBusConnection *bus,
                      DBusMessage *message,
                      void *user_data)
 {
   AtkObject *root = atk_get_root ();
-  return spi_dbus_return_object (message, root, FALSE);
+  return spi_dbus_return_object (message, root, FALSE, FALSE);
+}
+
+static DBusMessage *
+impl_GetInterfaces (DBusConnection *bus,
+                    DBusMessage *message,
+                    void *user_data)
+{
+  AtkObject *object = (AtkObject *) user_data;
+  gint role;
+  const char *role_name;
+  DBusMessage *reply;
+  DBusMessageIter iter, iter_array;
+
+  g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+                        droute_not_yet_handled_error (message));
+  reply = dbus_message_new_method_return (message);
+  if (reply)
+    {
+      dbus_message_iter_init_append (reply, &iter);
+      dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "s", &iter_array);
+      append_atk_object_interfaces (object, &iter_array);
+      dbus_message_iter_close_container (&iter, &iter_array);
+    }
+  return reply;
 }
 
 static DRouteMethod methods[] = {
-  {impl_getChildAtIndex, "getChildAtIndex"},
-  {impl_getChildren, "getChildren"},
-  {impl_getIndexInParent, "getIndexInParent"},
-  {impl_getRelationSet, "getRelationSet"},
-  {impl_getRole, "getRole"},
-  {impl_getRoleName, "getRoleName"},
-  {impl_getLocalizedRoleName, "getLocalizedRoleName"},
-  {impl_getState, "getState"},
-  {impl_getAttributes, "getAttributes"},
-  {impl_getApplication, "getApplication"},
+  {impl_GetChildAtIndex, "GetChildAtIndex"},
+  {impl_GetChildren, "GetChildren"},
+  {impl_GetIndexInParent, "GetIndexInParent"},
+  {impl_GetRelationSet, "GetRelationSet"},
+  {impl_GetRole, "GetRole"},
+  {impl_GetRoleName, "GetRoleName"},
+  {impl_GetLocalizedRoleName, "GetLocalizedRoleName"},
+  {impl_GetState, "GetState"},
+  {impl_GetAttributes, "GetAttributes"},
+  {impl_GetApplication, "GetApplication"},
+  {impl_GetInterfaces, "GetInterfaces"},
   {NULL, NULL}
 };
 
 static DRouteProperty properties[] = {
-  {impl_get_name, impl_set_name, "name"},
-  {impl_get_description, impl_set_description, "description"},
-  {impl_get_parent, NULL, "parent"},
-  {impl_get_childCount, NULL, "childCount"},
+  {impl_get_Name, impl_set_Name, "Name"},
+  {impl_get_Description, impl_set_Description, "Description"},
+  {impl_get_Parent, NULL, "Parent"},
+  {impl_get_ChildCount, NULL, "ChildCount"},
   {NULL, NULL, NULL}
 };