#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;
}
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);
}
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;
}
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);
}
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;
}
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;
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;
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))
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;
}
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;
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;
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;
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];
}
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;
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 */
}
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;
if (reply)
{
dbus_message_append_args (reply, DBUS_TYPE_UINT32, &rv,
- DBUS_TYPE_INVALID);
+ DBUS_TYPE_INVALID);
}
return reply;
}
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;
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;
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);
};