* Boston, MA 02111-1307, USA.
*/
-#include "accessible.h"
+#include <atk/atk.h>
+#include <droute/droute.h>
-#define get_object(message) spi_dbus_get_object(dbus_message_get_path(message))
-
-static AtkObject *
-get_object_from_path (const char *path, void *user_data)
-{
- return spi_dbus_get_object (path);
-}
+#include "atk-dbus.h"
+#include "spi-common/spi-dbus.h"
static dbus_bool_t
-impl_get_name (const char *path, DBusMessageIter * iter, void *user_data)
+impl_get_name (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
- if (!object)
- return FALSE;
+ AtkObject *object = (AtkObject *) user_data;
+
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
+
return droute_return_v_string (iter, atk_object_get_name (object));
}
static dbus_bool_t
-impl_set_name (const char *path, DBusMessageIter * iter, void *user_data)
+impl_set_name (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
+ AtkObject *object = (AtkObject *) user_data;
const char *name = droute_get_v_string (iter);
+
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
+
atk_object_set_name (object, name);
return TRUE;
}
static dbus_bool_t
-impl_get_description (const char *path, DBusMessageIter * iter,
- void *user_data)
+impl_get_description (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
- if (!object)
- return FALSE;
+ AtkObject *object = (AtkObject *) user_data;
+
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
+
return droute_return_v_string (iter, atk_object_get_description (object));
}
static dbus_bool_t
-impl_set_description (const char *path, DBusMessageIter * iter,
- void *user_data)
+impl_set_description (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
+ AtkObject *object = (AtkObject *) user_data;
const char *description = droute_get_v_string (iter);
+
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
+
atk_object_set_description (object, description);
return TRUE;
}
static dbus_bool_t
-impl_get_parent (const char *path, DBusMessageIter * iter, void *user_data)
+impl_get_parent (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
+ AtkObject *object = (AtkObject *) user_data;
- if (!object)
- return FALSE;
- return spi_dbus_return_v_object (iter, atk_object_get_parent (object),
- FALSE);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
+
+ return spi_dbus_return_v_object (iter,
+ atk_object_get_parent (object),
+ FALSE);
}
static dbus_bool_t
-impl_get_childCount (const char *path, DBusMessageIter * iter,
- void *user_data)
+impl_get_childCount (DBusMessageIter *iter, void *user_data)
{
- AtkObject *object = spi_dbus_get_object (path);
+ AtkObject *object = (AtkObject *) user_data;
+
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data), FALSE);
- if (!object)
- return FALSE;
return droute_return_v_int32 (iter,
- atk_object_get_n_accessible_children
- (object));
+ atk_object_get_n_accessible_children
+ (object));
+}
+
+static DBusMessage *
+impl_getChildAtIndex (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
+{
+ AtkObject *object = (AtkObject *) user_data;
+ DBusError error;
+ dbus_int32_t i;
+ AtkObject *child;
+
+ 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);
+ child = atk_object_ref_accessible_child (object, i);
+ return spi_dbus_return_object (message, child, FALSE);
}
static DBusMessage *
-impl_getChildren (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getChildren (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
gint i;
gint count;
DBusMessage *reply;
DBusMessageIter iter, iter_array;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ 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;
for (i = 0; i < count; i++)
{
AtkObject *child = atk_object_ref_accessible_child (object, i);
- char *path = spi_dbus_get_path (child);
+ char *path = atk_dbus_get_path (child);
if (path)
{
dbus_message_iter_append_basic (&iter_array, DBUS_TYPE_OBJECT_PATH,
}
static DBusMessage *
-impl_getIndexInParent (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getIndexInParent (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
dbus_uint32_t rv;
DBusMessage *reply;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ droute_not_yet_handled_error (message));
rv = atk_object_get_index_in_parent (object);
reply = dbus_message_new_method_return (message);
if (reply)
}
static DBusMessage *
-impl_getRelationSet (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getRelationSet (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
DBusMessage *reply;
AtkRelationSet *set;
DBusMessageIter iter, iter_array, iter_struct, iter_targets;
gint count;
gint i, j;
- if (!object)
- return spi_dbus_general_error (message);
+ 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;
set = atk_object_ref_relation_set (object);
AtkObject *obj = target->pdata[j];
char *path;
if (!obj) continue;
- path = spi_dbus_get_path (obj);
- dbus_message_iter_append (&iter_targets, DBUS_TYPE_OBJECT_PATH, &path);
+ path = atk_dbus_get_path (obj);
+ dbus_message_iter_append_basic (&iter_targets, DBUS_TYPE_OBJECT_PATH, &path);
}
dbus_message_iter_close_container (&iter_struct, &iter_targets);
dbus_message_iter_close_container (&iter_array, &iter_struct);
}
static DBusMessage *
-impl_getRole (DBusConnection * bus, DBusMessage * message, void *user_data)
+impl_getRole (DBusConnection *bus, DBusMessage *message, void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
gint role;
dbus_uint32_t rv;
DBusMessage *reply;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ droute_not_yet_handled_error (message));
role = atk_object_get_role (object);
rv = spi_accessible_role_from_atk_role (role);
reply = dbus_message_new_method_return (message);
}
static DBusMessage *
-impl_getRoleName (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getRoleName (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
gint role;
const char *role_name;
DBusMessage *reply;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ droute_not_yet_handled_error (message));
role = atk_object_get_role (object);
role_name = atk_role_get_name (role);
if (!role_name)
}
static DBusMessage *
-impl_getLocalizedRoleName (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getLocalizedRoleName (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
gint role;
const char *role_name;
DBusMessage *reply;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ droute_not_yet_handled_error (message));
role = atk_object_get_role (object);
role_name = atk_role_get_localized_name (role);
if (!role_name)
}
static DBusMessage *
-impl_getState (DBusConnection * bus, DBusMessage * message, void *user_data)
+impl_getState (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
dbus_uint32_t rv[2];
+ dbus_uint32_t *array = rv;
DBusMessage *reply;
- if (!object)
- return spi_dbus_general_error (message);
+ 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_append_args (reply, DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &rv,
+ dbus_message_append_args (reply, DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &array,
2, DBUS_TYPE_INVALID);
}
return reply;
}
static DBusMessage *
-impl_getAttributes (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getAttributes (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
- AtkObject *object = get_object (message);
+ AtkObject *object = (AtkObject *) user_data;
DBusMessage *reply;
AtkAttributeSet *attributes;
AtkAttribute *attr = NULL;
gint n_attributes = 0;
gint i;
- if (!object)
- return spi_dbus_general_error (message);
+ g_return_val_if_fail (ATK_IS_OBJECT (user_data),
+ droute_not_yet_handled_error (message));
attributes = atk_object_get_attributes (object);
if (attributes)
}
static DBusMessage *
-impl_getApplication (DBusConnection * bus, DBusMessage * message,
- void *user_data)
+impl_getApplication (DBusConnection *bus,
+ DBusMessage *message,
+ void *user_data)
{
AtkObject *root = atk_get_root ();
return spi_dbus_return_object (message, root, FALSE);
}
static DRouteMethod methods[] = {
- //{impl_isEqual, "isEqual"},
+ {impl_getChildAtIndex, "getChildAtIndex"},
{impl_getChildren, "getChildren"},
{impl_getIndexInParent, "getIndexInParent"},
{impl_getRelationSet, "getRelationSet"},
{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, "role"},
+ {impl_get_childCount, NULL, "childCount"},
{NULL, NULL, NULL}
};
void
-spi_initialize_accessible (DRouteData * data)
+spi_initialize_accessible (DRoutePath *path)
{
- droute_add_interface (data, SPI_DBUS_INTERFACE_ACCESSIBLE,
- methods, properties,
- (DRouteGetDatumFunction) get_object_from_path, NULL);
+ droute_path_add_interface (path,
+ SPI_DBUS_INTERFACE_ACCESSIBLE,
+ methods,
+ properties);
};