Code style enforcement.
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / accessible-adaptor.c
index d93a57f..434223e 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,19 +75,18 @@ 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;
 
   g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
 
   return spi_dbus_return_v_object (iter,
-                                   atk_object_get_parent (object),
-                                   FALSE);
+                                   atk_object_get_parent (object), FALSE);
 }
 
 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,9 +98,8 @@ impl_get_childCount (DBusMessageIter *iter, void *user_data)
 }
 
 static DBusMessage *
-impl_getChildAtIndex (DBusConnection *bus,
-                      DBusMessage *message,
-                      void *user_data)
+impl_GetChildAtIndex (DBusConnection * bus,
+                      DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   DBusError error;
@@ -110,16 +109,18 @@ impl_getChildAtIndex (DBusConnection *bus,
   dbus_error_init (&error);
   g_return_val_if_fail (ATK_IS_OBJECT (user_data),
                         droute_not_yet_handled_error (message));
-  if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID))
-      return spi_dbus_general_error (message);
+  if (!dbus_message_get_args 
+       (message, &error, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID))
+    {
+      return droute_invalid_arguments_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, TRUE, TRUE);
 }
 
 static DBusMessage *
-impl_getChildren (DBusConnection *bus,
-                  DBusMessage *message,
-                  void *user_data)
+impl_GetChildren (DBusConnection * bus,
+                  DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   gint i;
@@ -131,7 +132,8 @@ impl_getChildren (DBusConnection *bus,
                         droute_not_yet_handled_error (message));
   count = atk_object_get_n_accessible_children (object);
   reply = dbus_message_new_method_return (message);
-  if (!reply) goto oom;
+  if (!reply)
+    goto oom;
   dbus_message_iter_init_append (reply, &iter);
   if (!dbus_message_iter_open_container
       (&iter, DBUS_TYPE_ARRAY, "o", &iter_array))
@@ -139,15 +141,15 @@ 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,
-                                         &path);
-         g_free (path);
-       }
+        {
+          dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_OBJECT_PATH,
+                                          &path);
+          g_free (path);
+        }
       if (child)
-       g_object_unref (child);
+        g_object_unref (child);
     }
   if (!dbus_message_iter_close_container (&iter, &iter_array))
     goto oom;
@@ -158,9 +160,8 @@ oom:
 }
 
 static DBusMessage *
-impl_getIndexInParent (DBusConnection *bus,
-                       DBusMessage *message,
-                       void *user_data)
+impl_GetIndexInParent (DBusConnection * bus,
+                       DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   dbus_uint32_t rv;
@@ -173,13 +174,13 @@ impl_getIndexInParent (DBusConnection *bus,
   if (reply)
     {
       dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv,
-                               DBUS_TYPE_INVALID);
+                                DBUS_TYPE_INVALID);
     }
   return reply;
 }
 
 static gboolean
-spi_init_relation_type_table (Accessibility_RelationType *types)
+spi_init_relation_type_table (Accessibility_RelationType * types)
 {
   gint i;
 
@@ -198,8 +199,10 @@ spi_init_relation_type_table (Accessibility_RelationType *types)
   types[ATK_RELATION_EMBEDS] = Accessibility_RELATION_EMBEDS;
   types[ATK_RELATION_EMBEDDED_BY] = Accessibility_RELATION_EMBEDDED_BY;
   types[ATK_RELATION_POPUP_FOR] = Accessibility_RELATION_POPUP_FOR;
-  types[ATK_RELATION_PARENT_WINDOW_OF] = Accessibility_RELATION_PARENT_WINDOW_OF;
-  types[ATK_RELATION_DESCRIPTION_FOR] = Accessibility_RELATION_DESCRIPTION_FOR;
+  types[ATK_RELATION_PARENT_WINDOW_OF] =
+    Accessibility_RELATION_PARENT_WINDOW_OF;
+  types[ATK_RELATION_DESCRIPTION_FOR] =
+    Accessibility_RELATION_DESCRIPTION_FOR;
   types[ATK_RELATION_DESCRIBED_BY] = Accessibility_RELATION_DESCRIBED_BY;
 
   return TRUE;
@@ -209,11 +212,12 @@ static Accessibility_RelationType
 spi_relation_type_from_atk_relation_type (AtkRelationType type)
 {
   static gboolean is_initialized = FALSE;
-  static Accessibility_RelationType spi_relation_type_table [ATK_RELATION_LAST_DEFINED];
+  static Accessibility_RelationType
+    spi_relation_type_table[ATK_RELATION_LAST_DEFINED];
   Accessibility_RelationType spi_type;
 
   if (!is_initialized)
-    is_initialized = spi_init_relation_type_table (spi_relation_type_table);      
+    is_initialized = spi_init_relation_type_table (spi_relation_type_table);
 
   if (type > ATK_RELATION_NULL && type < ATK_RELATION_LAST_DEFINED)
     spi_type = spi_relation_type_table[type];
@@ -223,9 +227,8 @@ spi_relation_type_from_atk_relation_type (AtkRelationType type)
 }
 
 static DBusMessage *
-impl_getRelationSet (DBusConnection *bus,
-                     DBusMessage *message,
-                     void *user_data)
+impl_GetRelationSet (DBusConnection * bus,
+                     DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   DBusMessage *reply;
@@ -237,44 +240,55 @@ impl_getRelationSet (DBusConnection *bus,
   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) return NULL;
+  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))
-  {
-    goto oom;
-  }
-  count = atk_relation_set_get_n_relations (set);
-  for (i = 0; i < count; i++)
-  {
-    AtkRelation *r = atk_relation_set_get_relation (set, i);
-    AtkRelationType rt;
-    GPtrArray *target;
-    dbus_uint32_t type;
-    if (!r) continue;
-    rt= atk_relation_get_relation_type (r);
-    type = spi_relation_type_from_atk_relation_type (rt);
-    target = atk_relation_get_target (r);
-    if (!dbus_message_iter_open_container (&iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct))
-    {
-      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, DBUS_TYPE_ARRAY, "(ua(so))", &iter_array))
     {
       goto oom;
     }
-    for (j = 0; j < target->len; j++)
+  count = atk_relation_set_get_n_relations (set);
+  for (i = 0; i < count; i++)
     {
-      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);
+      AtkRelation *r = atk_relation_set_get_relation (set, i);
+      AtkRelationType rt;
+      GPtrArray *target;
+      dbus_uint32_t type;
+      if (!r)
+        continue;
+      rt = atk_relation_get_relation_type (r);
+      type = spi_relation_type_from_atk_relation_type (rt);
+      target = atk_relation_get_target (r);
+      if (!dbus_message_iter_open_container
+          (&iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct))
+        {
+          goto oom;
+        }
+      dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_UINT32, &type);
+      if (!dbus_message_iter_open_container
+          (&iter_struct, DBUS_TYPE_ARRAY, "(so)", &iter_targets))
+        {
+          goto oom;
+        }
+      for (j = 0; j < target->len; j++)
+        {
+          AtkObject *obj = target->pdata[j];
+          char *path;
+          if (!obj)
+            continue;
+          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);
     }
-    dbus_message_iter_close_container (&iter_struct, &iter_targets);
-    dbus_message_iter_close_container (&iter_array, &iter_struct);
-  }
   dbus_message_iter_close_container (&iter, &iter_array);
 oom:
   // TODO: handle out of memory */
@@ -409,7 +423,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;
@@ -424,7 +438,7 @@ impl_getRole (DBusConnection *bus, DBusMessage *message, void *user_data)
   if (reply)
     {
       dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv,
-                               DBUS_TYPE_INVALID);
+                                DBUS_TYPE_INVALID);
     }
   return reply;
 }
@@ -432,16 +446,15 @@ impl_getRole (DBusConnection *bus, DBusMessage *message, void *user_data)
 static char *
 impl_get_role_str (void *datum)
 {
-  g_assert (ATK_IS_OBJECT (datum));
+  g_return_val_if_fail (ATK_IS_OBJECT (datum), g_strdup (""));
   return g_strdup_printf ("%d",
-                         spi_accessible_role_from_atk_role
-                         (atk_object_get_role ((AtkObject *) datum)));
+                          spi_accessible_role_from_atk_role
+                          (atk_object_get_role ((AtkObject *) datum)));
 }
 
 static DBusMessage *
-impl_getRoleName (DBusConnection *bus,
-                  DBusMessage *message,
-                  void *user_data)
+impl_GetRoleName (DBusConnection * bus,
+                  DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   gint role;
@@ -458,15 +471,14 @@ impl_getRoleName (DBusConnection *bus,
   if (reply)
     {
       dbus_message_append_args (reply, DBUS_TYPE_STRING, &role_name,
-                               DBUS_TYPE_INVALID);
+                                DBUS_TYPE_INVALID);
     }
   return reply;
 }
 
 static DBusMessage *
-impl_getLocalizedRoleName (DBusConnection *bus,
-                           DBusMessage *message,
-                           void *user_data)
+impl_GetLocalizedRoleName (DBusConnection * bus,
+                           DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
   gint role;
@@ -483,110 +495,146 @@ impl_getLocalizedRoleName (DBusConnection *bus,
   if (reply)
     {
       dbus_message_append_args (reply, DBUS_TYPE_STRING, &role_name,
-                               DBUS_TYPE_INVALID);
+                                DBUS_TYPE_INVALID);
     }
   return reply;
 }
 
 static DBusMessage *
-impl_getState (DBusConnection *bus,
-               DBusMessage *message,
-               void *user_data)
+impl_GetState (DBusConnection * bus, DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
-  dbus_uint32_t rv[2];
-  dbus_uint32_t *array = rv;
-  DBusMessage *reply;
+
+  DBusMessage *reply = NULL;
+  DBusMessageIter iter, iter_array;
+
+  dbus_uint32_t states[2];
+
+  guint count;
 
   g_return_val_if_fail (ATK_IS_OBJECT (user_data),
                         droute_not_yet_handled_error (message));
-  spi_atk_state_to_dbus_array (object, rv);
+
   reply = dbus_message_new_method_return (message);
-  if (reply)
+  dbus_message_iter_init_append (reply, &iter);
+
+  spi_atk_state_to_dbus_array (object, states);
+  dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "u", &iter_array);
+  for (count = 0; count < 2; count++)
     {
-      dbus_message_append_args (reply, DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &array,
-                               2, DBUS_TYPE_INVALID);
+      dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_UINT32,
+                                      &states[count]);
     }
+  dbus_message_iter_close_container (&iter, &iter_array);
   return reply;
 }
 
 static DBusMessage *
-impl_getAttributes (DBusConnection *bus,
-                    DBusMessage *message,
-                    void *user_data)
+impl_GetAttributes (DBusConnection * bus,
+                    DBusMessage * message, void *user_data)
 {
   AtkObject *object = (AtkObject *) user_data;
-  DBusMessage *reply;
+  DBusMessage *reply = NULL;
+
   AtkAttributeSet *attributes;
-  AtkAttribute *attr = NULL;
-  char **retval;
-  gint n_attributes = 0;
-  gint i;
+  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);
 
-  retval = (char **) g_malloc (n_attributes * sizeof (char *));
+  reply = dbus_message_new_method_return (message);
+  dbus_message_iter_init_append (reply, &iter);
+  spi_atk_append_attribute_set (&iter, attributes);
 
-  for (i = 0; i < n_attributes; ++i)
-    {
-      attr = g_slist_nth_data (attributes, i);
-      retval[i] = g_strconcat (attr->name, ":", attr->value, NULL);
-    }
   if (attributes)
     atk_attribute_set_free (attributes);
+
+  return reply;
+}
+
+static DBusMessage *
+impl_GetApplication (DBusConnection * bus,
+                     DBusMessage * message, void *user_data)
+{
+  AtkObject *root = atk_get_root ();
+  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_append_args (reply, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-                               &retval, n_attributes, DBUS_TYPE_INVALID);
+      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);
     }
-  for (i = 0; i < n_attributes; i++)
-    g_free (retval[i]);
-  g_free (retval);
   return reply;
 }
 
 static DBusMessage *
-impl_getApplication (DBusConnection *bus,
-                     DBusMessage *message,
-                     void *user_data)
+impl_Embedded (DBusConnection *bus,
+                    DBusMessage *message,
+                    void *user_data)
 {
-  AtkObject *root = atk_get_root ();
-  return spi_dbus_return_object (message, root, FALSE);
+  AtkObject *object = (AtkObject *) user_data;
+  char *path;
+  gchar *id;
+
+  if (!dbus_message_get_args (message, NULL, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID))
+    {
+      return droute_invalid_arguments_error (message);
+    }
+  id = g_object_get_data (G_OBJECT (object), "dbus-plug-parent");
+  if (id)
+    g_free (id);
+  id = g_strconcat (dbus_message_get_sender (message), ":", path, NULL);
+  g_object_set_data (G_OBJECT (object), "dbus-plug-parent", id);
+  return dbus_message_new_method_return (message);
 }
 
 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"},
+  {impl_Embedded, "Embedded"},
   {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}
 };
 
 void
-spi_initialize_accessible (DRoutePath *path)
+spi_initialize_accessible (DRoutePath * path)
 {
   droute_path_add_interface (path,
                              SPI_DBUS_INTERFACE_ACCESSIBLE,
-                             methods,
-                             properties);
+                             methods, properties);
 };