From 95ac4886d1b6649d54daffa7191be1b2bbaf2989 Mon Sep 17 00:00:00 2001 From: Mark Doffman Date: Wed, 17 Dec 2008 17:53:30 +0000 Subject: [PATCH] 2008-12-17 Mark Doffman Mega commit that changes droute, adding an interface for creating a droute context and registering single, or multiple objects with the droute context. Modifies atk-adaptor and registryd to use the new interface. * droute/ New interface * atk-adaptor Use new droute interface * registryd Use new droute interface * pyatspi Bug fix, methods were using "null" interface. --- atk-adaptor/Makefile.am | 11 +- atk-adaptor/accessible.c | 187 ++++++++++++++++------------- atk-adaptor/accessible.h | 31 +---- atk-adaptor/action.c | 78 ++++++------ atk-adaptor/application.c | 26 ++-- atk-adaptor/atk-dbus.c | 45 +++---- atk-adaptor/atk-dbus.h | 6 +- atk-adaptor/bridge.c | 111 ++++++++++------- atk-adaptor/bridge.h | 34 +++++- atk-adaptor/collection.c | 22 ++-- atk-adaptor/component.c | 95 +++++++-------- atk-adaptor/document.c | 53 ++++---- atk-adaptor/editabletext.c | 73 +++++------ atk-adaptor/event.c | 20 +++- atk-adaptor/event.h | 38 ++++++ atk-adaptor/hyperlink.c | 71 +++++------ atk-adaptor/hypertext.c | 49 +++----- atk-adaptor/image.c | 62 ++++------ atk-adaptor/introspectable.c | 123 ------------------- atk-adaptor/relation.c | 7 +- atk-adaptor/selection.c | 84 ++++++------- atk-adaptor/table.c | 193 ++++++++++++++---------------- atk-adaptor/text.c | 163 ++++++++++++------------- atk-adaptor/tree.c | 236 +++++++++++++++++------------------- atk-adaptor/tree.h | 36 ++++++ atk-adaptor/value.c | 57 ++++----- dbind/dbind.c | 1 + droute/Makefile.am | 15 +++ droute/droute-pairhash.c | 6 + droute/droute-test.c | 246 ++++++++++++++++++++++++++++++++++++++ droute/droute.c | 122 ++++++++++++++----- droute/droute.h | 7 ++ droute/test.interface.One | 15 +++ droute/test.interface.Two | 15 +++ pyatspi/action.py | 16 +-- pyatspi/application.py | 19 ++- pyatspi/collection.py | 23 ++-- pyatspi/component.py | 32 ++--- pyatspi/desktop.py | 8 +- pyatspi/document.py | 14 +-- pyatspi/editabletext.py | 19 ++- pyatspi/hyperlink.py | 14 +-- pyatspi/hypertext.py | 14 +-- pyatspi/image.py | 14 +-- pyatspi/loginhelper.py | 15 +-- pyatspi/selection.py | 22 ++-- pyatspi/selector.py | 21 ++-- pyatspi/streamablecontent.py | 21 ++-- pyatspi/table.py | 48 ++++---- pyatspi/text.py | 49 ++++---- pyatspi/value.py | 8 +- registryd/Makefile.am | 3 +- registryd/deviceeventcontroller.c | 75 ++++-------- registryd/deviceeventcontroller.h | 17 +-- registryd/registry-main.c | 35 +++--- registryd/registry.c | 56 +++------ registryd/registry.h | 5 +- 57 files changed, 1516 insertions(+), 1370 deletions(-) create mode 100644 atk-adaptor/event.h delete mode 100644 atk-adaptor/introspectable.c create mode 100644 atk-adaptor/tree.h create mode 100644 droute/droute-test.c create mode 100644 droute/test.interface.One create mode 100644 droute/test.interface.Two diff --git a/atk-adaptor/Makefile.am b/atk-adaptor/Makefile.am index 51c714f..944681f 100644 --- a/atk-adaptor/Makefile.am +++ b/atk-adaptor/Makefile.am @@ -1,7 +1,8 @@ gtkmoduledir = $(libdir)/$(GTK_MODULE_DIR) gtkmodule_LTLIBRARIES = libspiatk.la -libspiatk_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(ATK_CFLAGS) -I$(top_srcdir) +libspiatk_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(ATK_CFLAGS) -I$(top_srcdir)\ + -DATSPI_INTROSPECTION_PATH=\"$(pkgdatadir)/$(DEFAULT_ATSPI_INTROSPECTION_PATH)\" libspiatk_la_LDFLAGS = -no-undefined \ -module \ @@ -31,10 +32,8 @@ libspiatk_la_SOURCES = \ atk-dbus.h \ image.c \ selection.c \ - spi-private.h \ table.c \ text.c \ - tree.c \ - util.c \ - value.c \ - introspectable.c + tree.c \ + tree.h \ + value.c diff --git a/atk-adaptor/accessible.c b/atk-adaptor/accessible.c index 220167e..9d2b62a 100644 --- a/atk-adaptor/accessible.c +++ b/atk-adaptor/accessible.c @@ -22,106 +22,112 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -#define get_object(message) atk_dbus_get_object(dbus_message_get_path(message)) - -static AtkObject * -get_object_from_path (const char *path, void *user_data) -{ - return atk_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 = atk_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 = atk_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 = atk_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 = atk_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 = atk_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 spi_dbus_return_v_object (iter, atk_object_get_parent (object), - 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 = atk_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) +impl_getChildAtIndex (DBusConnection *bus, + DBusMessage *message, + void *user_data) { - AtkObject *object = get_object (message); + AtkObject *object = (AtkObject *) user_data; + DBusError error; dbus_int32_t i; AtkObject *child; - if (!object) - return spi_dbus_general_error (message); - if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID)) - return spi_dbus_general_error (message); + 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; @@ -151,15 +157,16 @@ oom: } 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) @@ -215,18 +222,19 @@ 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 = 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); @@ -400,15 +408,15 @@ 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 = 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); @@ -430,16 +438,17 @@ impl_get_role_str (void *datum) } 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) @@ -454,16 +463,17 @@ impl_getRoleName (DBusConnection * bus, DBusMessage * message, } 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) @@ -478,15 +488,17 @@ impl_getLocalizedRoleName (DBusConnection * bus, DBusMessage * message, } 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) @@ -498,10 +510,11 @@ impl_getState (DBusConnection * bus, DBusMessage * message, void *user_data) } 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; @@ -509,8 +522,8 @@ impl_getAttributes (DBusConnection * bus, DBusMessage * message, 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) @@ -538,8 +551,9 @@ impl_getAttributes (DBusConnection * bus, DBusMessage * message, } 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); @@ -568,9 +582,10 @@ static DRouteProperty properties[] = { }; 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); }; diff --git a/atk-adaptor/accessible.h b/atk-adaptor/accessible.h index ce904aa..f15b397 100644 --- a/atk-adaptor/accessible.h +++ b/atk-adaptor/accessible.h @@ -24,42 +24,13 @@ #ifndef SPI_ACCESSIBLE_H_ #define SPI_ACCESSIBLE_H_ -#include -#include +#include #include -#include "atk/atk.h" - G_BEGIN_DECLS Accessibility_Role spi_accessible_role_from_atk_role (AtkRole role); -void spi_initialize_accessible(DRouteData *data); -void spi_initialize_action(DRouteData *data); -void spi_initialize_application(DRouteData *data); -void spi_initialize_collection(DRouteData *data); -void spi_initialize_component(DRouteData *data); -void spi_initialize_document(DRouteData *data); -void spi_initialize_editabletext(DRouteData *data); -void spi_initialize_hyperlink(DRouteData *data); -void spi_initialize_hypertext(DRouteData *data); -void spi_initialize_image(DRouteData *data); -void spi_initialize_selection(DRouteData *data); -void spi_initialize_table(DRouteData *data); -void spi_initialize_text(DRouteData *data); -void spi_initialize_value(DRouteData *data); -void spi_initialize_introspectable(DRouteData *data, DRouteGetDatumFunction verify_object); - -/* tree.c */ -void spi_register_tree_object(DBusConnection *bus, DRouteData *data, const char *path); - -dbus_bool_t spi_dbus_append_tree (DBusMessage * message, AtkObject * obj, DRouteData * data); - -void -atk_tree_cache_needs_update(void); - -#include "atk-dbus.h" - G_END_DECLS #endif /* SPI_ACCESSIBLE_H_ */ diff --git a/atk-adaptor/action.c b/atk-adaptor/action.c index 693a9a4..e9da657 100644 --- a/atk-adaptor/action.c +++ b/atk-adaptor/action.c @@ -22,45 +22,33 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkAction * -get_action (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_ACTION (obj); -} - -static AtkAction * -get_action_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_ACTION(obj)) - return NULL; - return ATK_ACTION (obj); -} +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_nActions (const char *path, DBusMessageIter *iter, void *user_data) +impl_get_nActions (DBusMessageIter *iter, void *user_data) { - AtkAction *action = get_action_from_path (path, user_data); - if (!action) - return FALSE; + AtkAction *action = (AtkAction *) user_data; + + g_return_val_if_fail (ATK_IS_ACTION (user_data), FALSE); return droute_return_v_int32 (iter, atk_action_get_n_actions (action)); } static DBusMessage * impl_get_description (DBusConnection *bus, DBusMessage *message, void *user_data) { + AtkAction *action = (AtkAction *) user_data; + DBusError error; DBusMessage *reply; dbus_int32_t index; const char *desc; - AtkAction *action = get_action (message); - if (!action) return spi_dbus_general_error (message); - if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) + dbus_error_init (&error); + g_return_val_if_fail (ATK_IS_ACTION (user_data), + droute_not_yet_handled_error (message)); + if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) { return spi_dbus_general_error (message); } @@ -78,12 +66,15 @@ static DBusMessage * impl_get_name (DBusConnection *bus, DBusMessage *message, void *user_data) { DBusMessage *reply; + DBusError error; dbus_int32_t index; const char *name; - AtkAction *action = get_action (message); + AtkAction *action = (AtkAction *) user_data; - if (!action) return spi_dbus_general_error (message); - if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) + dbus_error_init (&error); + g_return_val_if_fail (ATK_IS_ACTION (user_data), + droute_not_yet_handled_error (message)); + if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) { return spi_dbus_general_error (message); } @@ -101,12 +92,15 @@ static DBusMessage * impl_get_keybinding (DBusConnection *bus, DBusMessage *message, void *user_data) { DBusMessage *reply; + DBusError error; dbus_int32_t index; const char *kb; - AtkAction *action = get_action (message); + AtkAction *action = (AtkAction *) user_data; - if (!action) return spi_dbus_general_error (message); - if (!dbus_message_get_args (message, NULL, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) + dbus_error_init (&error); + g_return_val_if_fail (ATK_IS_ACTION (user_data), + droute_not_yet_handled_error (message)); + if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) { return spi_dbus_general_error (message); } @@ -122,14 +116,14 @@ impl_get_keybinding (DBusConnection *bus, DBusMessage *message, void *user_data) static DBusMessage *impl_getActions(DBusConnection *bus, DBusMessage *message, void *user_data) { - AtkAction *action = get_action(message); + AtkAction *action = (AtkAction *) user_data; DBusMessage *reply; gint count; gint i; DBusMessageIter iter, iter_array, iter_struct; - if (!action) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_ACTION (user_data), + droute_not_yet_handled_error (message)); count = atk_action_get_n_actions(action); reply = dbus_message_new_method_return (message); if (!reply) goto oom; @@ -161,14 +155,14 @@ oom: static DBusMessage *impl_doAction(DBusConnection *bus, DBusMessage *message, void *user_data) { - AtkAction *action = get_action(message); + AtkAction *action = (AtkAction *) user_data; DBusError error; dbus_int32_t index; dbus_bool_t rv; DBusMessage *reply; - if (!action) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_ACTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) @@ -201,10 +195,10 @@ static DRouteProperty properties[] = }; void -spi_initialize_action (DRouteData * data) +spi_initialize_action (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_ACTION, - methods, properties, - (DRouteGetDatumFunction) get_action_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_ACTION, + methods, + properties); }; diff --git a/atk-adaptor/application.c b/atk-adaptor/application.c index ccaa6c2..cf6b689 100644 --- a/atk-adaptor/application.c +++ b/atk-adaptor/application.c @@ -21,18 +21,21 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include + +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_toolkitName (const char *path, DBusMessageIter * iter, +impl_get_toolkitName (DBusMessageIter * iter, void *user_data) { return droute_return_v_string (iter, atk_get_toolkit_name ()); } static dbus_bool_t -impl_get_version (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_version (DBusMessageIter * iter, void *user_data) { return droute_return_v_string (iter, atk_get_toolkit_version ()); } @@ -40,13 +43,13 @@ impl_get_version (const char *path, DBusMessageIter * iter, void *user_data) static dbus_int32_t id; static dbus_bool_t -impl_get_id (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_id (DBusMessageIter * iter, void *user_data) { return droute_return_v_int32 (iter, id); } static dbus_bool_t -impl_set_id (const char *path, DBusMessageIter * iter, void *user_data) +impl_set_id (DBusMessageIter * iter, void *user_data) { id = droute_get_v_int32 (iter); return TRUE; @@ -100,17 +103,18 @@ static DRouteProperty properties[] = { {NULL, NULL, NULL} }; -static long +/*static long obj_is_root (const char *path, void *user_data) { AtkObject *obj = atk_dbus_get_object (path); return (obj == atk_get_root ()); -} +}*/ void -spi_initialize_application (DRouteData * data) +spi_initialize_application (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_APPLICATION, - methods, properties, - (DRouteGetDatumFunction) obj_is_root, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_APPLICATION, + methods, + properties); }; diff --git a/atk-adaptor/atk-dbus.c b/atk-adaptor/atk-dbus.c index 94b8a8a..6bf009c 100644 --- a/atk-adaptor/atk-dbus.c +++ b/atk-adaptor/atk-dbus.c @@ -24,9 +24,10 @@ #include #include +#include "bridge.h" #include "accessible.h" -/* TODO +/* TODO * Need to add concurrency support. */ @@ -79,6 +80,13 @@ GHashTable *remove_list = NULL; /* Stores the objects that need to be removed fr static guint counter = 1; +/* Amazingly the ATK event callbacks dont have a user + * data parameter. Instead, with great sadness, we use + * some global data. Data is declared and initialized + * in bridge.c. + */ +extern SpiAppData *atk_adaptor_app_data; + /*---------------------------------------------------------------------------*/ /* @@ -121,7 +129,7 @@ deregister_accessible(gpointer data, GObject *accessible) { g_hash_table_remove(ref2ptr, GINT_TO_POINTER(ref)); /* Add to removal list */ - /* + /* * TODO * Pyatspi client side exceptions have occured indicating * that an object has been removed twice. @@ -130,7 +138,7 @@ deregister_accessible(gpointer data, GObject *accessible) g_hash_table_insert(remove_list, GINT_TO_POINTER(ref), NULL); } - atk_tree_cache_needs_update(); + atk_tree_cache_needs_update(atk_adaptor_app_data->bus); } /*---------------------------------------------------------------------------*/ @@ -157,7 +165,7 @@ register_accessible (AtkObject *accessible) /* Add to update list */ g_hash_table_insert (update_list, GINT_TO_POINTER(reference), accessible); - atk_tree_cache_needs_update(); + atk_tree_cache_needs_update(atk_adaptor_app_data->bus); return reference; } @@ -201,16 +209,16 @@ atk_dbus_notify_change(AtkObject *accessible) { guint ref; g_assert(ATK_IS_OBJECT(accessible)); - + if (!g_object_get_data (G_OBJECT (accessible), "dbus-id")) { register_accessible(accessible); } else { - ref = g_object_get_data (G_OBJECT (accessible), "dbus-id"); - g_hash_table_insert (update_list, ref, accessible); - atk_tree_cache_needs_update(); + ref = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (accessible), "dbus-id")); + g_hash_table_insert (update_list, GINT_TO_POINTER (ref), accessible); + atk_tree_cache_needs_update(atk_adaptor_app_data->bus); } } @@ -270,7 +278,7 @@ atk_dbus_get_path (AtkObject *accessible) index = GPOINTER_TO_INT(g_object_get_data (G_OBJECT (accessible), "dbus-id")); if (!index) - index = register_accessible(G_OBJECT(accessible)); + index = register_accessible(accessible); return g_strdup_printf(ATK_BRIDGE_OBJECT_REFERENCE_TEMPLATE, index); } @@ -360,7 +368,7 @@ spi_dbus_return_v_object (DBusMessageIter *iter, AtkObject *obj, int unref) * Initializes all of the required D-Bus interfaces. */ void -atk_dbus_initialize (DRouteData * data) +atk_dbus_initialize (AtkObject *root) { if (!ref2ptr) ref2ptr = g_hash_table_new(g_direct_hash, g_direct_equal); @@ -370,22 +378,7 @@ atk_dbus_initialize (DRouteData * data) remove_list = g_hash_table_new(g_direct_hash, g_direct_equal); /* Get the root accessible and add */ - atk_dbus_register_subtree(atk_get_root()); - - spi_initialize_accessible (data); - spi_initialize_action(data); - spi_initialize_collection (data); - spi_initialize_component (data); - spi_initialize_document (data); - spi_initialize_editabletext (data); - spi_initialize_hyperlink (data); - spi_initialize_hypertext (data); - spi_initialize_image (data); - spi_initialize_selection (data); - spi_initialize_table (data); - spi_initialize_text (data); - spi_initialize_value (data); - spi_initialize_introspectable(data, (DRouteGetDatumFunction) atk_dbus_get_object); + atk_dbus_register_subtree(root); } /*END------------------------------------------------------------------------*/ diff --git a/atk-adaptor/atk-dbus.h b/atk-adaptor/atk-dbus.h index b3b6507..b409c2b 100644 --- a/atk-adaptor/atk-dbus.h +++ b/atk-adaptor/atk-dbus.h @@ -26,8 +26,7 @@ #include #include #include - -#include "accessible.h" +#include void atk_dbus_foreach_registered(GHFunc func, gpointer data); @@ -59,7 +58,4 @@ spi_dbus_return_object (DBusMessage *message, AtkObject *obj, gboolean unref); dbus_bool_t spi_dbus_return_v_object (DBusMessageIter *iter, AtkObject *obj, int unref); -void -atk_dbus_initialize (DRouteData * data); - #endif /* __ATK_DBUS__ */ diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c index 3e5fba4..da7d331 100644 --- a/atk-adaptor/bridge.c +++ b/atk-adaptor/bridge.c @@ -35,17 +35,25 @@ #include #include #include -#include "accessible.h" + +#include + #include "bridge.h" +#include "event.h" #include "atk-dbus.h" -void spi_atk_register_event_listeners (void); -void spi_atk_deregister_event_listeners (void); -void spi_atk_tidy_windows (void); +#include "spi-common/spi-dbus.h" + +/* + * Provides the path for the introspection directory. + */ +#if !defined ATSPI_INTROSPECTION_PATH + #error "No introspection XML directory defined" +#endif /*---------------------------------------------------------------------------*/ -SpiAppData *app_data = NULL; +SpiAppData *atk_adaptor_app_data = NULL; static const AtkMisc *atk_misc = NULL; @@ -146,11 +154,11 @@ register_application (SpiAppData *app) "registerApplication"); dbus_message_set_no_reply (message, TRUE); - uname = dbus_bus_get_unique_name(app->droute.bus); + uname = dbus_bus_get_unique_name(app->bus); dbus_message_iter_init_append(message, &iter); dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &uname); - dbus_connection_send (app->droute.bus, message, NULL); + dbus_connection_send (app->bus, message, NULL); if (message) dbus_message_unref (message); } @@ -172,11 +180,11 @@ deregister_application (SpiAppData *app) "deregisterApplication"); dbus_message_set_no_reply (message, TRUE); - uname = dbus_bus_get_unique_name(app->droute.bus); + uname = dbus_bus_get_unique_name(app->bus); dbus_message_iter_init_append(message, &iter); dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &uname); - dbus_connection_send (app->droute.bus, message, NULL); + dbus_connection_send (app->bus, message, NULL); if (message) dbus_message_unref (message); } @@ -185,17 +193,17 @@ deregister_application (SpiAppData *app) static void exit_func (void) { - if (!app_data) + if (!atk_adaptor_app_data) { return; } spi_atk_tidy_windows (); spi_atk_deregister_event_listeners(); - deregister_application (app_data); + deregister_application (atk_adaptor_app_data); - g_free(app_data); - app_data = NULL; + g_free(atk_adaptor_app_data); + atk_adaptor_app_data = NULL; /* Not currently creating an XDisplay */ #if 0 @@ -206,13 +214,6 @@ exit_func (void) /*---------------------------------------------------------------------------*/ -static DBusObjectPathVTable droute_vtable = -{ - NULL, - &droute_message, - NULL, NULL, NULL, NULL -}; - static gchar *atspi_dbus_name; static gboolean atspi_no_register; @@ -239,9 +240,10 @@ adaptor_init (gint *argc, gchar **argv[]) GOptionContext *opt; GError *err = NULL; DBusError error; + DBusConnection *bus; + gchar *introspection_directory; - if (app_data != NULL) - return 0; + DRoutePath *treepath, *accpath; /* Parse command line options */ opt = g_option_context_new(NULL); @@ -251,51 +253,70 @@ adaptor_init (gint *argc, gchar **argv[]) g_warning("AT-SPI Option parsing failed: %s\n", err->message); /* Allocate global data and do ATK initializations */ - app_data = g_new0 (SpiAppData, 1); + atk_adaptor_app_data = g_new0 (SpiAppData, 1); atk_misc = atk_misc_get_instance (); + atk_adaptor_app_data->root = atk_get_root(); - /* Get D-Bus connection, register D-Bus name*/ + /* Set up D-Bus connection and register bus name */ dbus_error_init (&error); - app_data->root = atk_get_root(); - app_data->droute.bus = dbus_bus_get (DBUS_BUS_SESSION, &error); - if (!app_data->droute.bus) + atk_adaptor_app_data->bus = dbus_bus_get (DBUS_BUS_SESSION, &error); + if (!atk_adaptor_app_data->bus) { g_warning ("AT-SPI Couldn't connect to D-Bus: %s\n", error.message); - g_free(app_data); - app_data = NULL; + g_free(atk_adaptor_app_data); + atk_adaptor_app_data = NULL; return 0; } if (atspi_dbus_name != NULL && - dbus_bus_request_name(app_data->droute.bus, atspi_dbus_name, 0, &error)) + dbus_bus_request_name(atk_adaptor_app_data->bus, atspi_dbus_name, 0, &error)) { g_print("AT-SPI Recieved D-Bus name - %s\n", atspi_dbus_name); } - /* Finish setting up D-Bus */ - dbus_connection_setup_with_g_main(app_data->droute.bus, g_main_context_default()); + dbus_connection_setup_with_g_main(atk_adaptor_app_data->bus, g_main_context_default()); + + /* Get D-Bus introspection directory */ + introspection_directory = (char *) g_getenv("ATSPI_INTROSPECTION_PATH"); + if (introspection_directory == NULL) + introspection_directory = ATSPI_INTROSPECTION_PATH; /* Register droute for routing AT-SPI messages */ - spi_register_tree_object(app_data->droute.bus, &app_data->droute, "/org/freedesktop/atspi/tree"); + atk_adaptor_app_data->droute = droute_new (atk_adaptor_app_data->bus, introspection_directory); - if (!dbus_connection_register_fallback (app_data->droute.bus, - "/org/freedesktop/atspi/accessible", - &droute_vtable, - &app_data->droute)) - { - g_warning("AT-SPI Couldn't register droute.\n"); - g_free(app_data); - app_data = NULL; - return 0; - } + treepath = droute_add_one (atk_adaptor_app_data->droute, + "/org/freedesktop/atspi/tree", + NULL); + + accpath = droute_add_many (atk_adaptor_app_data->droute, + "/org/freedesktop/atspi/accessible", + NULL, + (DRouteGetDatumFunction) atk_dbus_get_object); /* Register all interfaces with droute and set up application accessible db */ - atk_dbus_initialize (&app_data->droute); + spi_initialize_tree (treepath); + + spi_initialize_accessible (accpath); + spi_initialize_action(accpath); + spi_initialize_collection (accpath); + spi_initialize_component (accpath); + spi_initialize_document (accpath); + spi_initialize_editabletext (accpath); + spi_initialize_hyperlink (accpath); + spi_initialize_hypertext (accpath); + spi_initialize_image (accpath); + spi_initialize_selection (accpath); + spi_initialize_table (accpath); + spi_initialize_text (accpath); + spi_initialize_value (accpath); /* Register methods to send D-Bus signals on certain ATK events */ spi_atk_register_event_listeners (); + /* Initialize the AtkObject registration */ + atk_dbus_initialize (atk_adaptor_app_data->root); + /* Register this app by sending a signal out to AT-SPI registry daemon */ - register_application (app_data); + register_application (atk_adaptor_app_data); g_atexit (exit_func); diff --git a/atk-adaptor/bridge.h b/atk-adaptor/bridge.h index b2bfc51..6b8829b 100644 --- a/atk-adaptor/bridge.h +++ b/atk-adaptor/bridge.h @@ -21,9 +21,39 @@ * Boston, MA 02111-1307, USA. */ +#ifndef SPI_BRIDGE_H_ +#define SPI_BRIDGE_H_ + +#include +#include + +G_BEGIN_DECLS + typedef struct _SpiAppData SpiAppData; struct _SpiAppData { - AtkObject *root; - DRouteData droute; + AtkObject *root; + DBusConnection *bus; + DRouteContext *droute; }; + +void spi_initialize_accessible (DRoutePath *path); +void spi_initialize_action (DRoutePath *path); +void spi_initialize_application (DRoutePath *path); +void spi_initialize_collection (DRoutePath *path); +void spi_initialize_component (DRoutePath *path); +void spi_initialize_document (DRoutePath *path); +void spi_initialize_editabletext (DRoutePath *path); +void spi_initialize_hyperlink (DRoutePath *path); +void spi_initialize_hypertext (DRoutePath *path); +void spi_initialize_image (DRoutePath *path); +void spi_initialize_selection (DRoutePath *path); +void spi_initialize_table (DRoutePath *path); +void spi_initialize_text (DRoutePath *path); +void spi_initialize_value (DRoutePath *path); + +void spi_initialize_tree (DRoutePath *path); + +G_END_DECLS + +#endif /* SPI_BRIDGE_H_ */ diff --git a/atk-adaptor/collection.c b/atk-adaptor/collection.c index 317e147..304ed62 100644 --- a/atk-adaptor/collection.c +++ b/atk-adaptor/collection.c @@ -22,10 +22,16 @@ /* collection.c: implements the Collection interface */ -#include "accessible.h" -#include "spi-common/bitarray.h" #include +#include +#include + +#include "atk-dbus.h" + +#include "spi-common/bitarray.h" +#include "spi-common/spi-dbus.h" + #define get_object(message) atk_dbus_get_object(dbus_message_get_path(message)) typedef struct _MatchRulePrivate MatchRulePrivate; @@ -671,7 +677,7 @@ return_and_free_list(DBusMessage *message, GList *ls) if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "o", &iter_array)) goto oom; for (item = ls; item; item = g_list_next(item)) { - char *path = spi_dbus_get_path((AtkObject *)item->data); + char *path = (char *) spi_dbus_get_path((AtkObject *)item->data); dbus_message_iter_append_basic(&iter_array, DBUS_TYPE_OBJECT_PATH, &path); g_free(path); } @@ -1014,13 +1020,15 @@ impl_getMatches(DBusConnection *bus, DBusMessage *message, void *user_data) static DRouteMethod methods[] = { { impl_getMatchesFrom, "getMatchesFrom" }, { impl_getMatchesTo, "getMatchesTo" }, - {impl_getMatches, "getMatches" }, + { impl_getMatches, "getMatches" }, {NULL, NULL} }; void -spi_initialize_collection (DRouteData * data) +spi_initialize_collection (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_COLLECTION, - methods, NULL, NULL, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_COLLECTION, + methods, + NULL); }; diff --git a/atk-adaptor/component.c b/atk-adaptor/component.c index fdfaaee..cd132da 100644 --- a/atk-adaptor/component.c +++ b/atk-adaptor/component.c @@ -22,38 +22,25 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkComponent * -get_component (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_COMPONENT (obj); -} - -static AtkComponent * -get_component_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_COMPONENT(obj)) - return NULL; - return ATK_COMPONENT (obj); -} +#include "atk-dbus.h" +#include "spi-common/spi-dbus.h" static DBusMessage * impl_contains (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; dbus_int32_t x, y; dbus_int16_t coord_type; DBusError error; dbus_bool_t retval; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, @@ -76,14 +63,15 @@ static DBusMessage * impl_getAccessibleAtPoint (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; dbus_int32_t x, y; dbus_int16_t coord_type; DBusError error; AtkObject *child; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, @@ -100,13 +88,14 @@ impl_getAccessibleAtPoint (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_getExtents (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; DBusError error; dbus_int16_t coord_type; gint ix, iy, iwidth, iheight; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT16, &coord_type, DBUS_TYPE_INVALID)) @@ -122,15 +111,16 @@ static DBusMessage * impl_getPosition (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; DBusError error; dbus_int16_t coord_type; gint ix = 0, iy = 0; dbus_int32_t x, y; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT16, &coord_type, DBUS_TYPE_INVALID)) @@ -152,13 +142,14 @@ impl_getPosition (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_getSize (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; gint iwidth = 0, iheight = 0; dbus_int32_t width, height; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + atk_component_get_size (component, &iwidth, &iheight); width = iwidth; height = iheight; @@ -174,13 +165,14 @@ impl_getSize (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_getLayer (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; AtkLayer atklayer; dbus_uint32_t rv; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + atklayer = atk_component_get_layer (component); switch (atklayer) @@ -223,12 +215,13 @@ static DBusMessage * impl_getMDIZOrder (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; dbus_int16_t rv; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + rv = atk_component_get_mdi_zorder (component); reply = dbus_message_new_method_return (message); if (reply) @@ -241,12 +234,13 @@ impl_getMDIZOrder (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_grabFocus (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; dbus_bool_t rv; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + rv = atk_component_grab_focus (component); reply = dbus_message_new_method_return (message); if (reply) @@ -274,12 +268,13 @@ impl_deregisterFocusHandler (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_getAlpha (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkComponent *component = get_component (message); + AtkComponent *component = (AtkComponent *) user_data; double rv; DBusMessage *reply; - if (!component) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_COMPONENT (user_data), + droute_not_yet_handled_error (message)); + rv = atk_component_get_alpha (component); reply = dbus_message_new_method_return (message); if (reply) @@ -306,10 +301,10 @@ static DRouteMethod methods[] = { }; void -spi_initialize_component (DRouteData * data) +spi_initialize_component (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_COMPONENT, - methods, NULL, - (DRouteGetDatumFunction) get_component_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_COMPONENT, + methods, + NULL); }; diff --git a/atk-adaptor/document.c b/atk-adaptor/document.c index 302f4ab..91f6313 100644 --- a/atk-adaptor/document.c +++ b/atk-adaptor/document.c @@ -22,35 +22,22 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkDocument * -get_document (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_DOCUMENT (obj); -} - -static AtkDocument * -get_document_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_DOCUMENT(obj)) - return NULL; - return ATK_DOCUMENT (obj); -} +#include "spi-common/spi-dbus.h" static DBusMessage * -impl_getLocale (DBusConnection * bus, DBusMessage * message, void *user_data) +impl_getLocale (DBusConnection *bus, + DBusMessage *message, + void *user_data) { - AtkDocument *document = get_document (message); + AtkDocument *document = (AtkDocument *) user_data; const gchar *lc; DBusMessage *reply; - if (!document) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_DOCUMENT (user_data), + droute_not_yet_handled_error (message)); lc = atk_document_get_locale (document); if (!lc) lc = ""; @@ -67,14 +54,14 @@ static DBusMessage * impl_getAttributeValue (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkDocument *document = get_document (message); + AtkDocument *document = (AtkDocument *) user_data; DBusError error; gchar *attributename; const gchar *atr; DBusMessage *reply; - if (!document) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_DOCUMENT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &attributename, DBUS_TYPE_INVALID)) @@ -97,7 +84,7 @@ static DBusMessage * impl_getAttributes (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkDocument *document = get_document (message); + AtkDocument *document = (AtkDocument *) user_data; DBusMessage *reply; AtkAttributeSet *attributes; AtkAttribute *attr = NULL; @@ -105,8 +92,8 @@ impl_getAttributes (DBusConnection * bus, DBusMessage * message, gint n_attributes = 0; gint i; - if (!document) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_DOCUMENT (user_data), + droute_not_yet_handled_error (message)); attributes = atk_document_get_attributes (document); if (attributes) @@ -141,10 +128,10 @@ static DRouteMethod methods[] = { }; void -spi_initialize_document (DRouteData * data) +spi_initialize_document (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_DOCUMENT, - methods, NULL, - (DRouteGetDatumFunction) get_document_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_DOCUMENT, + methods, + NULL); }; diff --git a/atk-adaptor/editabletext.c b/atk-adaptor/editabletext.c index 8e16060..76a8866 100644 --- a/atk-adaptor/editabletext.c +++ b/atk-adaptor/editabletext.c @@ -22,38 +22,23 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkEditableText * -get_editable (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_EDITABLE_TEXT (obj); -} - -static AtkEditableText * -get_editable_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_EDITABLE_TEXT(obj)) - return NULL; - return ATK_EDITABLE_TEXT (obj); -} +#include "spi-common/spi-dbus.h" static DBusMessage * impl_setTextContents (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; const char *newContents; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &newContents, DBUS_TYPE_INVALID)) @@ -75,7 +60,7 @@ impl_setTextContents (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_insertText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t position, length; char *text; dbus_bool_t rv; @@ -83,8 +68,8 @@ impl_insertText (DBusConnection * bus, DBusMessage * message, void *user_data) DBusMessage *reply; gint ip; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &position, DBUS_TYPE_STRING, &text, @@ -109,15 +94,15 @@ static DBusMessage * impl_setAttributes (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; const char *attributes; dbus_int32_t startPos, endPos; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &attributes, DBUS_TYPE_INT32, @@ -139,12 +124,12 @@ impl_setAttributes (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_copyText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t startPos, endPos; DBusError error; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startPos, DBUS_TYPE_INT32, &endPos, @@ -159,14 +144,14 @@ impl_copyText (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_cutText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t startPos, endPos; DBusError error; dbus_bool_t rv; DBusMessage *reply; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startPos, DBUS_TYPE_INT32, &endPos, @@ -189,14 +174,14 @@ impl_cutText (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_deleteText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t startPos, endPos; DBusError error; dbus_bool_t rv; DBusMessage *reply; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startPos, DBUS_TYPE_INT32, &endPos, @@ -219,14 +204,14 @@ impl_deleteText (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_pasteText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkEditableText *editable = get_editable (message); + AtkEditableText *editable = (AtkEditableText *) user_data; dbus_int32_t position; DBusError error; dbus_bool_t rv; DBusMessage *reply; - if (!editable) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_EDITABLE_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &position, DBUS_TYPE_INVALID)) @@ -257,10 +242,10 @@ static DRouteMethod methods[] = { }; void -spi_initialize_editabletext (DRouteData * data) +spi_initialize_editabletext (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_EDITABLE_TEXT, - methods, NULL, - (DRouteGetDatumFunction) get_editable_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_EDITABLE_TEXT, + methods, + NULL); }; diff --git a/atk-adaptor/event.c b/atk-adaptor/event.c index 73e13a0..fef3916 100644 --- a/atk-adaptor/event.c +++ b/atk-adaptor/event.c @@ -22,19 +22,27 @@ * Boston, MA 02111-1307, USA. */ -#include #include -#include "accessible.h" + +#include +#include + #include "bridge.h" #include "atk-dbus.h" -extern SpiAppData *app_data; +#include "spi-common/spi-dbus.h" static GArray *listener_ids = NULL; static gint atk_bridge_key_event_listener_id; static gint atk_bridge_focus_tracker_id; +/* Amazingly the ATK event callbacks dont have a user + * data parameter. Instead, with great sadness, we use + * some global data. Data is declared and initialized + * in bridge.c. + */ +extern SpiAppData *atk_adaptor_app_data; /*---------------------------------------------------------------------------*/ @@ -61,7 +69,7 @@ Accessibility_DeviceEventController_notifyListenersSync(const Accessibility_Devi dbus_error_init(&error); if (spi_dbus_marshal_deviceEvent(message, key_event)) { - DBusMessage *reply = dbus_connection_send_with_reply_and_block(app_data->droute.bus, message, 1000, &error); + DBusMessage *reply = dbus_connection_send_with_reply_and_block(atk_adaptor_app_data->bus, message, 1000, &error); if (reply) { DBusError error; @@ -226,7 +234,7 @@ emit(AtkObject *accessible, dbus_message_iter_append_basic(&sub, (int) *type, &val); dbus_message_iter_close_container(&iter, &sub); - dbus_connection_send(app_data->droute.bus, sig, NULL); + dbus_connection_send(atk_adaptor_app_data->bus, sig, NULL); dbus_message_unref(sig); } @@ -279,7 +287,7 @@ emit_rect(AtkObject *accessible, dbus_message_iter_close_container (&variant, &sub); dbus_message_iter_close_container (&iter, &variant); - dbus_connection_send(app_data->droute.bus, sig, NULL); + dbus_connection_send(atk_adaptor_app_data->bus, sig, NULL); } /*---------------------------------------------------------------------------*/ diff --git a/atk-adaptor/event.h b/atk-adaptor/event.h new file mode 100644 index 0000000..d40567d --- /dev/null +++ b/atk-adaptor/event.h @@ -0,0 +1,38 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) + * + * Copyright 2001, 2002 Sun Microsystems Inc., + * Copyright 2001, 2002 Ximian, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef SPI_EVENT_H_ +#define SPI_EVENT_H_ + +#include +#include + +G_BEGIN_DECLS + +void spi_atk_register_event_listeners (void); +void spi_atk_deregister_event_listeners (void); +void spi_atk_tidy_windows (void); + +G_END_DECLS + +#endif /* SPI_EVENT_H_ */ diff --git a/atk-adaptor/hyperlink.c b/atk-adaptor/hyperlink.c index 42b2096..39264d5 100644 --- a/atk-adaptor/hyperlink.c +++ b/atk-adaptor/hyperlink.c @@ -22,65 +22,48 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkHyperlink * -get_hyperlink (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_HYPERLINK (obj); -} - -static AtkHyperlink * -get_hyperlink_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_HYPERLINK(obj)) - return NULL; - return ATK_HYPERLINK (obj); -} +#include "atk-dbus.h" +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_nAnchors (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_nAnchors (DBusMessageIter * iter, void *user_data) { - AtkHyperlink *link = get_hyperlink_from_path (path, user_data); - if (!link) - return FALSE; + AtkHyperlink *link = (AtkHyperlink *) user_data; + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), FALSE); return droute_return_v_int32 (iter, atk_hyperlink_get_n_anchors (link)); } static dbus_bool_t -impl_get_startIndex (const char *path, DBusMessageIter * iter, +impl_get_startIndex (DBusMessageIter * iter, void *user_data) { - AtkHyperlink *link = get_hyperlink_from_path (path, user_data); - if (!link) - return FALSE; + AtkHyperlink *link = (AtkHyperlink *) user_data; + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), FALSE); return droute_return_v_int32 (iter, atk_hyperlink_get_start_index (link)); } static dbus_bool_t -impl_get_endIndex (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_endIndex (DBusMessageIter * iter, void *user_data) { - AtkHyperlink *link = get_hyperlink_from_path (path, user_data); - if (!link) - return FALSE; + AtkHyperlink *link = (AtkHyperlink *) user_data; + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), FALSE); return droute_return_v_int32 (iter, atk_hyperlink_get_end_index (link)); } static DBusMessage * impl_getObject (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHyperlink *link = get_hyperlink (message); + AtkHyperlink *link = (AtkHyperlink *) user_data; DBusError error; dbus_int32_t i; AtkObject *atk_object; - if (!link) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &i, DBUS_TYPE_INVALID)) @@ -94,14 +77,14 @@ impl_getObject (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_getURI (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHyperlink *link = get_hyperlink (message); + AtkHyperlink *link = (AtkHyperlink *) user_data; dbus_int32_t i; DBusError error; gchar *rv; DBusMessage *reply; - if (!link) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &i, DBUS_TYPE_INT32, &i, @@ -126,12 +109,12 @@ impl_getURI (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_isValid (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHyperlink *link = get_hyperlink (message); + AtkHyperlink *link = (AtkHyperlink *) user_data; dbus_bool_t rv; DBusMessage *reply; - if (!link) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERLINK (user_data), + droute_not_yet_handled_error (message)); rv = atk_hyperlink_is_valid (link); reply = dbus_message_new_method_return (message); @@ -158,10 +141,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_hyperlink (DRouteData * data) +spi_initialize_hyperlink (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_HYPERLINK, - methods, properties, - (DRouteGetDatumFunction) get_hyperlink_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_HYPERLINK, + methods, + properties); }; diff --git a/atk-adaptor/hypertext.c b/atk-adaptor/hypertext.c index 8b5d4d6..a1c2298 100644 --- a/atk-adaptor/hypertext.c +++ b/atk-adaptor/hypertext.c @@ -22,35 +22,20 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkHypertext * -get_hypertext (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_HYPERTEXT (obj); -} - -static AtkHypertext * -get_hypertext_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_HYPERTEXT(obj)) - return NULL; - return ATK_HYPERTEXT (obj); -} +#include "spi-common/spi-dbus.h" static DBusMessage * impl_getNLinks (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHypertext *hypertext = get_hypertext (message); + AtkHypertext *hypertext = (AtkHypertext *) user_data; gint rv; DBusMessage *reply; - if (!hypertext) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERTEXT (user_data), + droute_not_yet_handled_error (message)); rv = atk_hypertext_get_n_links (hypertext); reply = dbus_message_new_method_return (message); if (reply) @@ -64,13 +49,13 @@ impl_getNLinks (DBusConnection * bus, DBusMessage * message, void *user_data) static DBusMessage * impl_getLink (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHypertext *hypertext = get_hypertext (message); + AtkHypertext *hypertext = (AtkHypertext *) user_data; DBusError error; dbus_int32_t linkIndex; AtkHyperlink *link; - if (!hypertext) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERTEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &linkIndex, DBUS_TYPE_INVALID)) @@ -85,14 +70,14 @@ static DBusMessage * impl_getLinkIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkHypertext *hypertext = get_hypertext (message); + AtkHypertext *hypertext = (AtkHypertext *) user_data; DBusError error; dbus_int32_t characterIndex; dbus_int32_t rv; DBusMessage *reply; - if (!hypertext) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_HYPERTEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &characterIndex, DBUS_TYPE_INVALID)) @@ -117,10 +102,10 @@ static DRouteMethod methods[] = { }; void -spi_initialize_hypertext (DRouteData * data) +spi_initialize_hypertext (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_HYPERTEXT, - methods, NULL, - (DRouteGetDatumFunction) get_hypertext_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_HYPERTEXT, + methods, + NULL); }; diff --git a/atk-adaptor/image.c b/atk-adaptor/image.c index f754749..23bf365 100644 --- a/atk-adaptor/image.c +++ b/atk-adaptor/image.c @@ -22,44 +22,27 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkImage * -get_image (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_IMAGE (obj); -} - -static AtkImage * -get_image_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_IMAGE(obj)) - return NULL; - return ATK_IMAGE (obj); -} +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_imageDescription (const char *path, DBusMessageIter * iter, +impl_get_imageDescription (DBusMessageIter * iter, void *user_data) { - AtkImage *image = get_image_from_path (path, user_data); - if (!image) - return FALSE; + AtkImage *image = (AtkImage *) user_data; + g_return_val_if_fail (ATK_IS_IMAGE (user_data), FALSE); return droute_return_v_string (iter, atk_image_get_image_description (image)); } static dbus_bool_t -impl_get_imageLocale (const char *path, DBusMessageIter * iter, +impl_get_imageLocale (DBusMessageIter * iter, void *user_data) { - AtkImage *image = get_image_from_path (path, user_data); - if (!image) - return FALSE; + AtkImage *image = (AtkImage *) user_data; + g_return_val_if_fail (ATK_IS_IMAGE (user_data), FALSE); return droute_return_v_string (iter, atk_image_get_image_locale (image)); } @@ -67,13 +50,13 @@ static DBusMessage * impl_getImageExtents (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkImage *image = get_image (message); + AtkImage *image = (AtkImage *) user_data; DBusError error; dbus_int16_t coordType; gint ix, iy, iwidth, iheight; - if (!image) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_IMAGE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT16, &coordType, DBUS_TYPE_INVALID)) @@ -89,15 +72,15 @@ static DBusMessage * impl_getImagePosition (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkImage *image = get_image (message); + AtkImage *image = (AtkImage *) user_data; DBusError error; dbus_int16_t coord_type; gint ix = 0, iy = 0; dbus_int32_t x, y; DBusMessage *reply; - if (!image) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_IMAGE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT16, &coord_type, DBUS_TYPE_INVALID)) @@ -120,13 +103,13 @@ static DBusMessage * impl_getImageSize (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkImage *image = get_image (message); + AtkImage *image = (AtkImage *) user_data; gint iwidth = 0, iheight = 0; dbus_int32_t width, height; DBusMessage *reply; - if (!image) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_IMAGE (user_data), + droute_not_yet_handled_error (message)); atk_image_get_image_size (image, &iwidth, &iheight); width = iwidth; height = iheight; @@ -153,9 +136,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_image (DRouteData * data) +spi_initialize_image (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_IMAGE, methods, - properties, - (DRouteGetDatumFunction) get_image_from_path, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_IMAGE, + methods, + properties); }; diff --git a/atk-adaptor/introspectable.c b/atk-adaptor/introspectable.c deleted file mode 100644 index 4781979..0000000 --- a/atk-adaptor/introspectable.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2008 Codethink Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include - -#include -#include - -/* - * This file contains an implementation of the D-Bus introspectable interface. - * For ATK objects. - */ - -/* - * This function finds the names of each interface that the ATK object supports - * and appends the introspection XML for each interface. - */ -static DBusMessage * -impl_introspect (DBusConnection *bus, DBusMessage *message, - void *user_data) -{ - AtkObject *object; - const char *path; - GString *output; - char *final; - - DBusMessage *reply; - - path = dbus_message_get_path(message); - object = spi_dbus_get_object(path); - - output = g_string_new(spi_introspection_header); - - g_string_append_printf(output, spi_introspection_node_element, path); - - spi_append_interface(output, SPI_DBUS_INTERFACE_ACCESSIBLE); - - if (ATK_IS_ACTION (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_ACTION); - - if (ATK_IS_COMPONENT (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_COMPONENT); - - if (ATK_IS_EDITABLE_TEXT (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_EDITABLE_TEXT); - - if (ATK_IS_TEXT (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_TEXT); - - if (ATK_IS_HYPERTEXT (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_HYPERTEXT); - - if (ATK_IS_IMAGE (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_IMAGE); - - if (ATK_IS_SELECTION (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_SELECTION); - - if (ATK_IS_TABLE (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_TABLE); - - if (ATK_IS_VALUE (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_VALUE); - - if (ATK_IS_STREAMABLE_CONTENT (object)) - spi_append_interface(output, "org.freedesktop.atspi.StreamableContent"); - - if (ATK_IS_DOCUMENT (object)) - { - spi_append_interface(output, "org.freedesktop.atspi.Collection"); - spi_append_interface(output, SPI_DBUS_INTERFACE_DOCUMENT); - } - - if (ATK_IS_HYPERLINK_IMPL (object)) - spi_append_interface(output, SPI_DBUS_INTERFACE_HYPERLINK); - - g_string_append(output, spi_introspection_footer); - final = g_string_free(output, FALSE); - - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - dbus_message_append_args(reply, DBUS_TYPE_STRING, &final, - DBUS_TYPE_INVALID); - - g_free(final); - return reply; -} - -static DRouteMethod methods[] = { - {impl_introspect, "Introspect"}, - {NULL, NULL} -}; - -/* - * Adds the introspectable interface to the DRoute object provided - */ -void -spi_initialize_introspectable (DRouteData *data, DRouteGetDatumFunction verify_object) -{ - droute_add_interface (data, "org.freedesktop.DBus.Introspectable", - methods, NULL, - verify_object, NULL); -}; diff --git a/atk-adaptor/relation.c b/atk-adaptor/relation.c index 6d487d4..12edc7a 100644 --- a/atk-adaptor/relation.c +++ b/atk-adaptor/relation.c @@ -25,9 +25,12 @@ #include #include -#include -#include +#include +#include + +#include "spi-common/spi-types.h" +#include "spi-common/spi-dbus.h" static gboolean spi_init_relation_type_table (Accessibility_RelationType *types) diff --git a/atk-adaptor/selection.c b/atk-adaptor/selection.c index d7c9b2f..3cae386 100644 --- a/atk-adaptor/selection.c +++ b/atk-adaptor/selection.c @@ -22,58 +22,42 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkSelection * -get_selection (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_SELECTION (obj); -} - -static AtkSelection * -get_selection_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || ~ATK_IS_SELECTION(obj)) - return NULL; - return ATK_SELECTION (obj); -} +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_nSelectedChildren (const char *path, DBusMessageIter * iter, +impl_get_nSelectedChildren (DBusMessageIter * iter, void *user_data) { - AtkSelection *selection = get_selection_from_path (path, user_data); - if (!selection) - return FALSE; + AtkSelection *selection = (AtkSelection *) user_data; + g_return_val_if_fail (ATK_IS_SELECTION (user_data), FALSE); return droute_return_v_int32 (iter, atk_selection_get_selection_count (selection)); } -static char * +/*static char * impl_get_nSelectedChildren_str (void *datum) { g_assert (ATK_IS_HYPERLINK (datum)); return g_strdup_printf ("%d", atk_selection_get_selection_count ((AtkSelection *) datum)); -} +}*/ static DBusMessage * impl_getSelectedChild (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; DBusError error; dbus_int32_t selectedChildIndex; AtkObject *atk_object; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectedChildIndex, @@ -89,14 +73,14 @@ static DBusMessage * impl_selectChild (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; DBusError error; dbus_int32_t childIndex; dbus_bool_t rv; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &childIndex, DBUS_TYPE_INVALID)) @@ -117,14 +101,14 @@ static DBusMessage * impl_deselectSelectedChild (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; DBusError error; dbus_int32_t selectedChildIndex; dbus_bool_t rv; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectedChildIndex, @@ -146,14 +130,14 @@ static DBusMessage * impl_isChildSelected (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; DBusError error; dbus_int32_t childIndex; dbus_bool_t rv; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &childIndex, DBUS_TYPE_INVALID)) @@ -173,12 +157,12 @@ impl_isChildSelected (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_selectAll (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; dbus_bool_t rv; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); rv = atk_selection_select_all_selection (selection); reply = dbus_message_new_method_return (message); if (reply) @@ -193,12 +177,12 @@ static DBusMessage * impl_clearSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; dbus_bool_t rv; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); rv = atk_selection_clear_selection (selection); reply = dbus_message_new_method_return (message); if (reply) @@ -213,15 +197,15 @@ static DBusMessage * impl_deselectChild (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkSelection *selection = get_selection (message); + AtkSelection *selection = (AtkSelection *) user_data; DBusError error; dbus_int32_t selectedChildIndex; dbus_bool_t rv = FALSE; gint i, nselected; DBusMessage *reply; - if (!selection) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_SELECTION (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectedChildIndex, @@ -267,10 +251,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_selection (DRouteData * data) +spi_initialize_selection (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_SELECTION, - methods, properties, - (DRouteGetDatumFunction) get_selection_from_path, - NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_SELECTION, + methods, + properties); }; diff --git a/atk-adaptor/table.c b/atk-adaptor/table.c index 868ae1f..c0c6b0f 100644 --- a/atk-adaptor/table.c +++ b/atk-adaptor/table.c @@ -22,73 +22,54 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" +#include +#include -static AtkTable * -get_table (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_TABLE (obj); -} - -static AtkTable * -get_table_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_TABLE(obj)) - return NULL; - return ATK_TABLE (obj); -} +#include "atk-dbus.h" +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_nRows (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_nRows (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); - if (!table) - return FALSE; + AtkTable *table = (AtkTable *) user_data; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); return droute_return_v_int32 (iter, atk_table_get_n_rows (table)); } static dbus_bool_t -impl_get_nColumns (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_nColumns (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); - if (!table) - return FALSE; + AtkTable *table = (AtkTable *) user_data; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); return droute_return_v_int32 (iter, atk_table_get_n_columns (table)); } static dbus_bool_t -impl_get_caption (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_caption (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); - if (!table) - return FALSE; + AtkTable *table = (AtkTable *) user_data; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); return spi_dbus_return_v_object (iter, atk_table_get_caption (table), FALSE); } static dbus_bool_t -impl_get_summary (const char *path, DBusMessageIter * iter, void *user_data) +impl_get_summary (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); - if (!table) - return FALSE; + AtkTable *table = (AtkTable *) user_data; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); return spi_dbus_return_v_object (iter, atk_table_get_summary (table), FALSE); } static dbus_bool_t -impl_get_nSelectedRows (const char *path, DBusMessageIter * iter, +impl_get_nSelectedRows (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); + AtkTable *table = (AtkTable *) user_data; gint *selected_rows = NULL; int count; - if (!table) - return FALSE; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); count = atk_table_get_selected_rows (table, &selected_rows); if (selected_rows) g_free (selected_rows); @@ -96,14 +77,13 @@ impl_get_nSelectedRows (const char *path, DBusMessageIter * iter, } static dbus_bool_t -impl_get_nSelectedColumns (const char *path, DBusMessageIter * iter, +impl_get_nSelectedColumns (DBusMessageIter * iter, void *user_data) { - AtkTable *table = get_table_from_path (path, user_data); + AtkTable *table = (AtkTable *) user_data; gint *selected_columns = NULL; int count; - if (!table) - return FALSE; + g_return_val_if_fail (ATK_IS_TABLE (user_data), FALSE); count = atk_table_get_selected_columns (table, &selected_columns); if (selected_columns) g_free (selected_columns); @@ -114,13 +94,13 @@ static DBusMessage * impl_getAccessibleAt (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; DBusError error; AtkObject *obj; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, @@ -135,14 +115,14 @@ impl_getAccessibleAt (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_getIndexAt (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; dbus_int32_t index; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, @@ -164,14 +144,14 @@ static DBusMessage * impl_getRowAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t index; dbus_int32_t row; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) @@ -192,14 +172,14 @@ static DBusMessage * impl_getColumnAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t index; dbus_int32_t column; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) @@ -220,14 +200,14 @@ static DBusMessage * impl_getRowDescription (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); dbus_int32_t row; + AtkTable *table = (AtkTable *) user_data; const gchar *description; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) @@ -250,14 +230,14 @@ static DBusMessage * impl_getColumnDescription (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; const char *description; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) @@ -280,14 +260,14 @@ static DBusMessage * impl_getRowExtentAt (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; dbus_int32_t extent; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, @@ -309,14 +289,14 @@ static DBusMessage * impl_getColumnExtentAt (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; dbus_int32_t extent; DBusError error; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, @@ -338,13 +318,13 @@ static DBusMessage * impl_getRowHeader (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row; DBusError error; AtkObject *obj; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) @@ -359,13 +339,13 @@ static DBusMessage * impl_getColumnHeader (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; DBusError error; AtkObject *obj; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) @@ -380,13 +360,13 @@ static DBusMessage * impl_getSelectedRows (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; gint *selected_rows = NULL; gint count; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); count = atk_table_get_selected_rows (table, &selected_rows); if (!selected_rows) count = 0; @@ -406,13 +386,13 @@ static DBusMessage * impl_getSelectedColumns (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; gint *selected_columns = NULL; gint count; DBusMessage *reply; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); count = atk_table_get_selected_columns (table, &selected_columns); if (!selected_columns) count = 0; @@ -432,14 +412,14 @@ static DBusMessage * impl_isRowSelected (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) @@ -460,14 +440,14 @@ static DBusMessage * impl_isColumnSelected (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) @@ -487,14 +467,14 @@ impl_isColumnSelected (DBusConnection * bus, DBusMessage * message, static DBusMessage * impl_isSelected (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row, column; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INT32, &column, @@ -516,14 +496,14 @@ static DBusMessage * impl_addRowSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) @@ -544,14 +524,14 @@ static DBusMessage * impl_addColumnSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) @@ -572,14 +552,14 @@ static DBusMessage * impl_removeRowSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t row; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &row, DBUS_TYPE_INVALID)) @@ -600,14 +580,14 @@ static DBusMessage * impl_removeColumnSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t column; DBusError error; DBusMessage *reply; dbus_bool_t ret; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &column, DBUS_TYPE_INVALID)) @@ -628,7 +608,7 @@ static DBusMessage * impl_getRowColumnExtentsAtIndex (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkTable *table = get_table (message); + AtkTable *table = (AtkTable *) user_data; dbus_int32_t index; DBusError error; dbus_int32_t row, column, row_extents, col_extents; @@ -639,8 +619,8 @@ impl_getRowColumnExtentsAtIndex (DBusConnection * bus, DBusMessage * message, AtkObject *cell; AtkRole role; - if (!table) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TABLE (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &index, DBUS_TYPE_INVALID)) @@ -703,9 +683,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_table (DRouteData * data) +spi_initialize_table (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_TABLE, methods, - properties, - (DRouteGetDatumFunction) get_table_from_path, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_TABLE, + methods, + properties); }; diff --git a/atk-adaptor/text.c b/atk-adaptor/text.c index 451a92b..7c88211 100644 --- a/atk-adaptor/text.c +++ b/atk-adaptor/text.c @@ -22,58 +22,42 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" #include -static AtkText * -get_text (DBusMessage * message) -{ - AtkObject *obj = atk_dbus_get_object (dbus_message_get_path (message)); - if (!obj) - return NULL; - return ATK_TEXT (obj); -} +#include +#include -static AtkText * -get_text_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_TEXT(obj)) - return NULL; - return ATK_TEXT (obj); -} +#include "spi-common/spi-dbus.h" static dbus_bool_t -impl_get_characterCount (const char *path, DBusMessageIter * iter, +impl_get_characterCount (DBusMessageIter * iter, void *user_data) { - AtkText *text = get_text_from_path (path, user_data); - if (!text) - return FALSE; + AtkText *text = (AtkText *) user_data; + g_return_val_if_fail (ATK_IS_TEXT (user_data), FALSE); return droute_return_v_int32 (iter, atk_text_get_character_count (text)); } static dbus_bool_t -impl_get_caretOffset (const char *path, DBusMessageIter * iter, +impl_get_caretOffset (DBusMessageIter * iter, void *user_data) { - AtkText *text = get_text_from_path (path, user_data); - if (!text) - return FALSE; + AtkText *text = (AtkText *) user_data; + g_return_val_if_fail (ATK_IS_TEXT (user_data), FALSE); return droute_return_v_int32 (iter, atk_text_get_caret_offset (text)); } static DBusMessage * impl_getText (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t startOffset, endOffset; gchar *txt; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startOffset, DBUS_TYPE_INT32, @@ -98,14 +82,14 @@ static DBusMessage * impl_setCaretOffset (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INVALID)) @@ -126,7 +110,7 @@ static DBusMessage * impl_getTextBeforeOffset (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_uint32_t type; gchar *txt; @@ -135,8 +119,8 @@ impl_getTextBeforeOffset (DBusConnection * bus, DBusMessage * message, DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_UINT32, &type, @@ -166,7 +150,7 @@ static DBusMessage * impl_getTextAtOffset (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset, type; gchar *txt; dbus_int32_t startOffset, endOffset; @@ -174,8 +158,8 @@ impl_getTextAtOffset (DBusConnection * bus, DBusMessage * message, DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_UINT32, &type, @@ -205,7 +189,7 @@ static DBusMessage * impl_getTextAfterOffset (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_uint32_t type; gchar *txt; @@ -214,8 +198,8 @@ impl_getTextAfterOffset (DBusConnection * bus, DBusMessage * message, DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_UINT32, &type, @@ -245,14 +229,14 @@ static DBusMessage * impl_getCharacterAtOffset (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_int32_t ch; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INVALID)) @@ -272,7 +256,7 @@ static DBusMessage * impl_getAttributeValue (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; char *attributeName; dbus_int32_t startOffset, endOffset; @@ -285,8 +269,8 @@ impl_getAttributeValue (DBusConnection * bus, DBusMessage * message, GSList *cur_attr; AtkAttribute *at; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_STRING, @@ -355,7 +339,7 @@ static DBusMessage * impl_getAttributes (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_int32_t startOffset, endOffset; gint intstart_offset, intend_offset; @@ -364,8 +348,8 @@ impl_getAttributes (DBusConnection * bus, DBusMessage * message, DBusMessage *reply; AtkAttributeSet *set; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INVALID)) @@ -395,14 +379,14 @@ static DBusMessage * impl_getDefaultAttributes (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; char *rv; DBusError error; DBusMessage *reply; AtkAttributeSet *set; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); set = atk_text_get_default_attributes (text); @@ -422,7 +406,7 @@ static DBusMessage * impl_getCharacterExtents (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_int16_t coordType; dbus_int32_t x, y, width, height; @@ -430,8 +414,8 @@ impl_getCharacterExtents (DBusConnection * bus, DBusMessage * message, DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_INT16, &coordType, @@ -459,15 +443,15 @@ static DBusMessage * impl_getOffsetAtPoint (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t x, y; dbus_int16_t coordType; dbus_int32_t rv; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, @@ -489,12 +473,12 @@ static DBusMessage * impl_getNSelections (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t rv; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); rv = atk_text_get_n_selections (text); reply = dbus_message_new_method_return (message); if (reply) @@ -509,15 +493,15 @@ static DBusMessage * impl_getSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t selectionNum; dbus_int32_t startOffset, endOffset; gint intstart_offset = 0, intend_offset = 0; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectionNum, DBUS_TYPE_INVALID)) @@ -543,14 +527,14 @@ static DBusMessage * impl_addSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t startOffset, endOffset; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startOffset, DBUS_TYPE_INT32, @@ -572,14 +556,14 @@ static DBusMessage * impl_removeSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t selectionNum; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectionNum, DBUS_TYPE_INVALID)) @@ -600,14 +584,14 @@ static DBusMessage * impl_setSelection (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t selectionNum, startOffset, endOffset; dbus_bool_t rv; DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &selectionNum, DBUS_TYPE_INT32, @@ -629,7 +613,7 @@ static DBusMessage * impl_getRangeExtents (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t startOffset, endOffset; dbus_int16_t coordType; AtkTextRectangle rect; @@ -637,8 +621,8 @@ impl_getRangeExtents (DBusConnection * bus, DBusMessage * message, DBusError error; DBusMessage *reply; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &startOffset, DBUS_TYPE_INT32, @@ -669,7 +653,7 @@ static DBusMessage * impl_getBoundedRanges (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t x, y, width, height; dbus_int16_t coordType, xClipType, yClipType; DBusError error; @@ -678,8 +662,8 @@ impl_getBoundedRanges (DBusConnection * bus, DBusMessage * message, DBusMessage *reply; DBusMessageIter iter, array, struc, variant; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &x, DBUS_TYPE_INT32, &y, @@ -743,7 +727,7 @@ impl_getAttributeRun (DBusConnection * bus, DBusMessage * message, void *user_data) { DBusError error; - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; dbus_int32_t offset; dbus_bool_t includeDefaults; dbus_int32_t startOffset, endOffset; @@ -755,8 +739,8 @@ impl_getAttributeRun (DBusConnection * bus, DBusMessage * message, gint n_attributes = 0, total_attributes = 0, n_default_attributes = 0; gint i, j; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &offset, DBUS_TYPE_BOOLEAN, @@ -821,7 +805,7 @@ static DBusMessage * impl_getDefaultAttributeSet (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkText *text = get_text (message); + AtkText *text = (AtkText *) user_data; DBusMessage *reply; AtkAttributeSet *attributes; AtkAttribute *attr = NULL; @@ -829,8 +813,8 @@ impl_getDefaultAttributeSet (DBusConnection * bus, DBusMessage * message, gint n_attributes = 0; gint i; - if (!text) - return spi_dbus_general_error (message); + g_return_val_if_fail (ATK_IS_TEXT (user_data), + droute_not_yet_handled_error (message)); attributes = atk_text_get_default_attributes (text); if (attributes) @@ -888,9 +872,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_text (DRouteData * data) +spi_initialize_text (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_TEXT, methods, - properties, - (DRouteGetDatumFunction) get_text_from_path, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_TEXT, + methods, + properties); }; diff --git a/atk-adaptor/tree.c b/atk-adaptor/tree.c index 4a256a9..feffb33 100644 --- a/atk-adaptor/tree.c +++ b/atk-adaptor/tree.c @@ -23,16 +23,103 @@ */ #include -#include -#include "accessible.h" +#include +#include + +#include "atk-dbus.h" +#include "spi-common/spi-dbus.h" #include "bridge.h" -extern SpiAppData *app_data; static gboolean update_pending = FALSE; /*---------------------------------------------------------------------------*/ +static void +append_atk_object_interfaces (AtkObject *object, DBusMessageIter *iter) +{ + const gchar *itf; + + itf = SPI_DBUS_INTERFACE_ACCESSIBLE; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + + if (ATK_IS_ACTION (object)) + { + itf = SPI_DBUS_INTERFACE_ACTION; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_COMPONENT (object)) + { + itf = SPI_DBUS_INTERFACE_COMPONENT; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_EDITABLE_TEXT (object)) + { + itf = SPI_DBUS_INTERFACE_EDITABLE_TEXT; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_TEXT (object)) + { + itf = SPI_DBUS_INTERFACE_TEXT; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_HYPERTEXT (object)) + { + itf = SPI_DBUS_INTERFACE_HYPERTEXT; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_IMAGE (object)) + { + itf = SPI_DBUS_INTERFACE_IMAGE; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_SELECTION (object)) + { + itf = SPI_DBUS_INTERFACE_SELECTION; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_TABLE (object)) + { + itf = SPI_DBUS_INTERFACE_TABLE; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_VALUE (object)) + { + itf = SPI_DBUS_INTERFACE_VALUE; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_STREAMABLE_CONTENT (object)) + { + itf = "org.freedesktop.atspi.StreamableContent"; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_DOCUMENT (object)) + { + itf = "org.freedesktop.atspi.Collection"; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + itf = SPI_DBUS_INTERFACE_DOCUMENT; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } + + if (ATK_IS_HYPERLINK_IMPL (object)) + { + itf = SPI_DBUS_INTERFACE_HYPERLINK; + dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &itf); + } +} + +/*---------------------------------------------------------------------------*/ + static const char *dumm = "/APath/1"; /* @@ -49,7 +136,6 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter) AtkObject *obj; DBusMessageIter *iter_array; DBusMessageIter iter_struct, iter_sub_array; - DRouteData *data; dbus_int32_t states [2]; int count; @@ -60,7 +146,6 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter) obj = ATK_OBJECT(obj_data); iter_array = (DBusMessageIter *) iter; - data = &(app_data->droute); dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct); { @@ -87,34 +172,18 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter) { AtkObject *child; gchar *child_path; - + child = atk_object_ref_accessible_child (obj, i); - child_path = atk_dbus_get_path (child); - g_object_unref(G_OBJECT(child)); - dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_OBJECT_PATH, &child_path); - g_free (child_path); - } + child_path = atk_dbus_get_path (child); + g_object_unref(G_OBJECT(child)); + dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_OBJECT_PATH, &child_path); + g_free (child_path); + } } dbus_message_iter_close_container (&iter_struct, &iter_sub_array); dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "s", &iter_sub_array); - { - for (l = data->interfaces; l; l = g_slist_next (l)) - { - DRouteInterface *iface_def = (DRouteInterface *) l->data; - void *datum = NULL; - - if (iface_def->get_datum) - { - datum = (*iface_def->get_datum) (path, data->user_data); - if (!datum) - continue; - } - dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_STRING, &iface_def->name); - if (iface_def->free_datum) - (*iface_def->free_datum) (datum); - } - } + append_atk_object_interfaces (obj, &iter_sub_array); dbus_message_iter_close_container (&iter_struct, &iter_sub_array); name = atk_object_get_name (obj); @@ -131,7 +200,7 @@ append_accessible(gpointer ref, gpointer obj_data, gpointer iter) 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++) @@ -163,14 +232,12 @@ append_accessible_path(gpointer ref_data, gpointer null, gpointer data) /*---------------------------------------------------------------------------*/ static gboolean -send_cache_update(gpointer d) +send_cache_update(gpointer data) { DBusMessage *message; DBusMessageIter iter; DBusMessageIter iter_array; - DRouteData *data; - - data = &(app_data->droute); + DBusConnection *bus = (DBusConnection *) data; message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", SPI_DBUS_INTERFACE_TREE, "updateTree"); @@ -184,7 +251,7 @@ send_cache_update(gpointer d) atk_dbus_foreach_remove_list(append_accessible_path, &iter_array); dbus_message_iter_close_container(&iter, &iter_array); - dbus_connection_send(data->bus, message, NULL); + dbus_connection_send(bus, message, NULL); update_pending = FALSE; return FALSE; @@ -193,11 +260,11 @@ send_cache_update(gpointer d) /*---------------------------------------------------------------------------*/ void -atk_tree_cache_needs_update(void) +atk_tree_cache_needs_update(DBusConnection *bus) { if (!update_pending) { - g_idle_add(send_cache_update, NULL); + g_idle_add(send_cache_update, bus); update_pending = TRUE; } } @@ -242,96 +309,19 @@ impl_getTree (DBusConnection *bus, DBusMessage *message, void *user_data) /*---------------------------------------------------------------------------*/ -static DBusMessage * -impl_introspect (DBusConnection *bus, DBusMessage *message, void *user_data) -{ - const char *path; - GString *output; - char *final; - - DBusMessage *reply; - - path = dbus_message_get_path(message); - - output = g_string_new(spi_introspection_header); - - g_string_append_printf(output, spi_introspection_node_element, path); - - spi_append_interface(output, SPI_DBUS_INTERFACE_TREE); - - g_string_append(output, spi_introspection_footer); - final = g_string_free(output, FALSE); - - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - dbus_message_append_args(reply, DBUS_TYPE_STRING, &final, - DBUS_TYPE_INVALID); - - g_free(final); - return reply; -} - -/*---------------------------------------------------------------------------*/ - -static DBusHandlerResult -message_handler (DBusConnection *bus, DBusMessage *message, void *user_data) -{ - const char *iface = dbus_message_get_interface (message); - const char *member = dbus_message_get_member (message); - - DBusMessage *reply = NULL; - - g_return_val_if_fail(iface != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED); - - if (!strcmp(iface, SPI_DBUS_INTERFACE_TREE)) - { - if (!strcmp(member, "getRoot")) - { - reply = impl_getRoot(bus, message, user_data); - } - - if (!strcmp(member, "getTree")) - { - reply = impl_getTree(bus, message, user_data); - } - } - - if (!strcmp(iface, "org.freedesktop.DBus.Introspectable")) - { - if (!strcmp(member, "Introspect")) - { - reply = impl_introspect(bus, message, user_data); - } - } - - if (reply) - { - dbus_connection_send (bus, reply, NULL); - dbus_message_unref (reply); - } - - return DBUS_HANDLER_RESULT_HANDLED; -} - -/*---------------------------------------------------------------------------*/ - -static DBusObjectPathVTable tree_vtable = -{ - NULL, - &message_handler, - NULL, NULL, NULL, NULL +static DRouteMethod methods[] = { + {impl_getRoot, "getRoot"}, + {impl_getTree, "getTree"}, + {NULL, NULL} }; -/*---------------------------------------------------------------------------*/ - void -spi_register_tree_object(DBusConnection *bus, - DRouteData *data, - const char *path) +spi_initialize_tree (DRoutePath *path) { - dbus_bool_t mem = FALSE; - mem = dbus_connection_register_object_path(bus, path, &tree_vtable, data); - g_assert(mem == TRUE); -} + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_TREE, + methods, + NULL); +}; /*END------------------------------------------------------------------------*/ diff --git a/atk-adaptor/tree.h b/atk-adaptor/tree.h new file mode 100644 index 0000000..0670a45 --- /dev/null +++ b/atk-adaptor/tree.h @@ -0,0 +1,36 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) + * + * Copyright 2001, 2002 Sun Microsystems Inc., + * Copyright 2001, 2002 Ximian, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef SPI_TREE_H_ +#define SPI_TREE_H_ + +#include +#include + +G_BEGIN_DECLS + +void atk_tree_cache_needs_update(void); + +G_END_DECLS + +#endif /* SPI_ACCESSIBLE_H_ */ diff --git a/atk-adaptor/value.c b/atk-adaptor/value.c index 33b67c7..5618e61 100644 --- a/atk-adaptor/value.c +++ b/atk-adaptor/value.c @@ -22,17 +22,12 @@ * Boston, MA 02111-1307, USA. */ -#include "accessible.h" #include -static AtkValue * -get_value_from_path (const char *path, void *user_data) -{ - AtkObject *obj = atk_dbus_get_object (path); - if (!obj || !ATK_IS_VALUE(obj)) - return NULL; - return ATK_VALUE (obj); -} +#include +#include + +#include "spi-common/spi-dbus.h" static double get_double_from_gvalue (GValue * gvalue) @@ -181,63 +176,58 @@ gvalue_set_from_double (GValue * gvalue, double value) } static dbus_bool_t -impl_get_minimumValue (const char *path, DBusMessageIter * iter, +impl_get_minimumValue (DBusMessageIter * iter, void *user_data) { - AtkValue *value = get_value_from_path (path, user_data); + AtkValue *value = (AtkValue *) user_data; GValue gvalue = { 0, }; - if (!value) - return FALSE; + g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE); atk_value_get_minimum_value (value, &gvalue); return droute_return_v_double (iter, get_double_from_gvalue (&gvalue)); } static dbus_bool_t -impl_get_maximumValue (const char *path, DBusMessageIter * iter, +impl_get_maximumValue (DBusMessageIter * iter, void *user_data) { - AtkValue *value = get_value_from_path (path, user_data); + AtkValue *value = (AtkValue *) user_data; GValue gvalue = { 0, }; - if (!value) - return FALSE; + g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE); atk_value_get_maximum_value (value, &gvalue); return droute_return_v_double (iter, get_double_from_gvalue (&gvalue)); } static dbus_bool_t -impl_get_minimumIncrement (const char *path, DBusMessageIter * iter, +impl_get_minimumIncrement (DBusMessageIter * iter, void *user_data) { - AtkValue *value = get_value_from_path (path, user_data); + AtkValue *value = (AtkValue *) user_data; GValue gvalue = { 0, }; - if (!value) - return FALSE; + g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE); atk_value_get_minimum_value (value, &gvalue); return droute_return_v_double (iter, get_double_from_gvalue (&gvalue)); } static dbus_bool_t -impl_get_currentValue (const char *path, DBusMessageIter * iter, +impl_get_currentValue (DBusMessageIter * iter, void *user_data) { - AtkValue *value = get_value_from_path (path, user_data); + AtkValue *value = (AtkValue *) user_data; GValue gvalue = { 0, }; - if (!value) - return FALSE; + g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE); atk_value_get_current_value (value, &gvalue); return droute_return_v_double (iter, get_double_from_gvalue (&gvalue)); } static dbus_bool_t -impl_set_currentValue (const char *path, DBusMessageIter * iter, +impl_set_currentValue (DBusMessageIter * iter, void *user_data) { - AtkValue *value = get_value_from_path (path, user_data); + AtkValue *value = (AtkValue *) user_data; GValue gvalue = { 0, }; double dbl; - if (!value) - return FALSE; + g_return_val_if_fail (ATK_IS_VALUE (user_data), FALSE); if (!get_double_from_variant (iter, &dbl)) return FALSE; atk_value_get_current_value (value, &gvalue); @@ -254,9 +244,10 @@ static DRouteProperty properties[] = { }; void -spi_initialize_value (DRouteData * data) +spi_initialize_value (DRoutePath *path) { - droute_add_interface (data, SPI_DBUS_INTERFACE_VALUE, NULL, - properties, - (DRouteGetDatumFunction) get_value_from_path, NULL); + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_VALUE, + NULL, + properties); }; diff --git a/dbind/dbind.c b/dbind/dbind.c index f34bcc4..2cdf5f7 100644 --- a/dbind/dbind.c +++ b/dbind/dbind.c @@ -87,6 +87,7 @@ dbind_method_call_reentrant (DBusConnection *cnx, if (!msg) goto out; + p = arg_types; dbus_message_iter_init (msg, &iter); dbind_any_marshal_va (&iter, &p, args); diff --git a/droute/Makefile.am b/droute/Makefile.am index 46207e4..9ce04f1 100644 --- a/droute/Makefile.am +++ b/droute/Makefile.am @@ -17,3 +17,18 @@ libdroute_la_SOURCES =\ droute-variant.h\ droute-pairhash.c\ droute-pairhash.h + +TESTS = droute-test + +droute_test_CFLAGS = $(DBUS_GLIB_CFLAGS) \ + -I$(top_builddir) + +check_PROGRAMS = droute-test +droute_test_SOURCES = droute-test.c +droute_test_CPPFLAGS = $(DBUS_GLIB_CFLAGS) \ + -I$(top_builddir)\ + -DTEST_INTROSPECTION_DIRECTORY=\"$(top_srcdir)/droute\" + +droute_test_LDFLAGS = $(top_builddir)/dbind/libdbind.la\ + libdroute.la\ + $(DBUS_GLIB_LIBS) diff --git a/droute/droute-pairhash.c b/droute/droute-pairhash.c index 20ff491..0c4ace5 100644 --- a/droute/droute-pairhash.c +++ b/droute/droute-pairhash.c @@ -43,6 +43,7 @@ str_pair_new (const gchar *one, const gchar *two) pair = g_new (StrPair, 1); pair->one = one; pair->two = two; + return pair; } gint @@ -51,6 +52,11 @@ str_pair_hash (gconstpointer key) StrPair *pair = (StrPair *) key; guint hash = 0; + /*g_return_val_if_fail (pair != NULL, 0); + g_return_val_if_fail (pair->one != NULL, 0); + g_return_val_if_fail (pair->two != NULL, 0); + */ + if (*(pair->two) != '\0') { hash = *(pair->two); diff --git a/droute/droute-test.c b/droute/droute-test.c new file mode 100644 index 0000000..1895fb6 --- /dev/null +++ b/droute/droute-test.c @@ -0,0 +1,246 @@ +#include +#include +#include +#include + +#include "dbus/dbus-glib-lowlevel.h" + +#define TEST_OBJECT_PATH "/test/object" +#define TEST_INTERFACE_ONE "test.interface.One" +#define TEST_INTERFACE_TWO "test.interface.Two" + +#define OBJECT_ONE "ObjectOne"; +#define OBJECT_TWO "ObjectTwo"; + +#if !defined TEST_INTROSPECTION_DIRECTORY + #error "No introspection XML directory defined" +#endif + +#define STRING_ONE "StringOne" +#define STRING_TWO "StringTwo" + +#define INT_ONE 0 +#define INT_TWO 456 + +#define NONE_REPLY_STRING "NoneMethod" + +typedef struct _AnObject +{ + gchar *astring; + guint *anint; +} AnObject; + +static DBusConnection *bus; +static GMainLoop *main_loop; +static gboolean success = TRUE; + +static DBusMessage * +impl_null (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + + reply = dbus_message_new_method_return (message); + return reply; +} + +static DBusMessage * +impl_getInt (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + reply = dbus_message_new_method_return (message); + dbus_message_append_args (reply, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID); + return reply; +} + +static DBusMessage * +impl_setInt (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + dbus_message_get_args (message, &error, DBUS_TYPE_INT32, &(object->anint), DBUS_TYPE_INVALID); + + reply = dbus_message_new_method_return (message); + return reply; +} + +static DBusMessage * +impl_getString (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + reply = dbus_message_new_method_return (message); + dbus_message_append_args (reply, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID); + return reply; +} + +static DBusMessage * +impl_setString (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + + dbus_error_init (&error); + + g_free (object->astring); + dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &(object->astring), DBUS_TYPE_INVALID); + + reply = dbus_message_new_method_return (message); + return reply; +} + +static DBusMessage * +impl_getInterfaceOne (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + gchar *itf = TEST_INTERFACE_ONE; + + dbus_error_init (&error); + + reply = dbus_message_new_method_return (message); + dbus_message_append_args (reply, DBUS_TYPE_STRING, &itf, DBUS_TYPE_INVALID); + return reply; +} + +static DBusMessage * +impl_getInterfaceTwo (DBusConnection *bus, DBusMessage *message, void *user_data) +{ + AnObject *object = (AnObject *) user_data; + DBusMessage *reply; + DBusError error; + gchar *itf = TEST_INTERFACE_TWO; + + dbus_error_init (&error); + + reply = dbus_message_new_method_return (message); + dbus_message_append_args (reply, DBUS_TYPE_STRING, &itf, DBUS_TYPE_INVALID); + return reply; +} + +static DRouteMethod test_methods_one[] = { + {impl_null, "null"}, + {impl_getInt, "getInt"}, + {impl_setInt, "setInt"}, + {impl_getString, "getString"}, + {impl_setString, "setString"}, + {impl_getInterfaceOne, "getInterfaceOne"}, + {NULL, NULL} +}; + +static DRouteMethod test_methods_two[] = { + {impl_null, "null"}, + {impl_getInt, "getInt"}, + {impl_setInt, "setInt"}, + {impl_getString, "getString"}, + {impl_setString, "setString"}, + {impl_getInterfaceTwo, "getInterfaceTwo"}, + {NULL, NULL} +}; + +static DRouteProperty test_properties[] = { + {NULL, NULL, NULL} +}; + +gboolean +do_tests_func (gpointer data) +{ + DBusError error; + gchar *bus_name; + + gchar *expected_string; + gchar *result_string; + + dbus_error_init (&error); + bus_name = dbus_bus_get_unique_name (bus); + + /* --------------------------------------------------------*/ + + dbind_method_call_reentrant (bus, + bus_name, + TEST_OBJECT_PATH, + TEST_INTERFACE_ONE, + "null", + NULL, + ""); + + /* --------------------------------------------------------*/ + + expected_string = TEST_INTERFACE_ONE; + result_string = NULL; + dbind_method_call_reentrant (bus, + bus_name, + TEST_OBJECT_PATH, + TEST_INTERFACE_ONE, + "getInterfaceOne", + NULL, + "=>s", + &result_string); + if (g_strcmp0(expected_string, result_string)) + { + g_print ("Failed: reply to getInterfaceOne not as expected\n"); + goto out; + } + + /* --------------------------------------------------------*/ + +out: + g_main_loop_quit (main_loop); + return FALSE; +} + + +int main (int argc, char **argv) +{ + DRouteContext *cnx; + DRoutePath *path; + AnObject *object; + DBusError error; + + /* Setup some server object */ + + object = g_new0(AnObject, 1); + object->astring = g_strdup (STRING_ONE); + object->anint = INT_ONE; + + dbus_error_init (&error); + main_loop = g_main_loop_new(NULL, FALSE); + bus = dbus_bus_get (DBUS_BUS_SESSION, &error); + dbus_connection_setup_with_g_main(bus, g_main_context_default()); + + cnx = droute_new (bus, TEST_INTROSPECTION_DIRECTORY); + path = droute_add_one (cnx, TEST_OBJECT_PATH, object); + + droute_path_add_interface (path, + TEST_INTERFACE_ONE, + test_methods_one, + test_properties); + + droute_path_add_interface (path, + TEST_INTERFACE_TWO, + test_methods_two, + test_properties); + + g_idle_add (do_tests_func, NULL); + g_main_run(main_loop); + if (success) + return 0; + else + return 1; +} diff --git a/droute/droute.c b/droute/droute.c index 5b1d9de..06ec2bd 100644 --- a/droute/droute.c +++ b/droute/droute.c @@ -31,6 +31,12 @@ #define oom() g_error ("D-Bus out of memory, this message will fail anyway") +#if defined DROUTE_DEBUG + #define _DROUTE_DEBUG(format, args...) g_print (format , ## args) +#else + #define _DROUTE_DEBUG +#endif + struct _DRouteContext { DBusConnection *bus; @@ -73,7 +79,7 @@ path_new (DRouteContext *cnx, { DRoutePath *new_path; - new_path = g_new0 (DRoutePath, 0); + new_path = g_new0 (DRoutePath, 1); new_path->cnx = cnx; new_path->chunks = g_string_chunk_new (CHUNKS_DEFAULT); new_path->interfaces = g_ptr_array_new (); @@ -128,13 +134,21 @@ droute_new (DBusConnection *bus, const char *introspect_dir) void droute_free (DRouteContext *cnx) { - g_pointer_array_foreach ((GFunc) path_free, cnx->registered_paths, NULL); + g_ptr_array_foreach (cnx->registered_paths, (GFunc) path_free, NULL); g_free (cnx->introspect_dir); g_free (cnx); } /*---------------------------------------------------------------------------*/ +DBusConnection * +droute_get_bus (DRouteContext *cnx) +{ + return cnx->bus; +} + +/*---------------------------------------------------------------------------*/ + static DBusObjectPathVTable droute_vtable = { NULL, @@ -185,12 +199,12 @@ droute_path_add_interface(DRoutePath *path, { gchar *itf; - g_return_if_fail (name == NULL); + g_return_if_fail (name != NULL); itf = g_string_chunk_insert (path->chunks, name); g_ptr_array_add (path->interfaces, itf); - for (; methods->name != NULL; methods++) + for (; methods != NULL && methods->name != NULL; methods++) { gchar *meth; @@ -198,7 +212,7 @@ droute_path_add_interface(DRoutePath *path, g_hash_table_insert (path->methods, str_pair_new (itf, meth), methods->func); } - for (; properties->name != NULL; properties++) + for (; properties != NULL && properties->name != NULL; properties++) { gchar *prop; PropertyPair *pair; @@ -233,7 +247,6 @@ impl_prop_GetAll (DBusMessage *message, void *datum = path_get_datum (path, pathstr); dbus_error_init (&error); - if (!dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &iface, DBUS_TYPE_INVALID)) return dbus_message_new_error (message, DBUS_ERROR_FAILED, error.message); @@ -250,7 +263,7 @@ impl_prop_GetAll (DBusMessage *message, g_hash_table_iter_init (&prop_iter, path->properties); while (g_hash_table_iter_next (&prop_iter, (gpointer*)&key, (gpointer*)&value)) { - if (!g_strcmp (key->one, iface)) + if (!g_strcmp0 (key->one, iface)) { if (!value->get) continue; @@ -280,8 +293,10 @@ impl_prop_GetSet (DBusMessage *message, DBusError error; StrPair pair; - PropertyPair *prop_funcs; + PropertyPair *prop_funcs = NULL; + + dbus_error_init (&error); if (!dbus_message_get_args (message, &error, DBUS_TYPE_STRING, @@ -300,6 +315,8 @@ impl_prop_GetSet (DBusMessage *message, void *datum = path_get_datum (path, pathstr); DBusMessageIter iter; + _DROUTE_DEBUG ("DRoute (handle prop Get): %s|%s on %s\n", pair.one, pair.two, pathstr); + reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); (prop_funcs->get) (&iter, datum); @@ -309,12 +326,21 @@ impl_prop_GetSet (DBusMessage *message, void *datum = path_get_datum (path, pathstr); DBusMessageIter iter; + _DROUTE_DEBUG ("DRoute (handle prop Get): %s|%s on %s\n", pair.one, pair.two, pathstr); + dbus_message_iter_init_append (message, &iter); /* Skip the interface and property name */ dbus_message_iter_next(&iter); dbus_message_iter_next(&iter); - (prop_funcs->get) (&iter, datum); + (prop_funcs->set) (&iter, datum); + + reply = dbus_message_new_method_return (message); + } + else + { + reply = dbus_message_new_error (message, DBUS_ERROR_FAILED, "Getter or setter unavailable"); } + return reply; } @@ -338,6 +364,12 @@ handle_properties (DBusConnection *bus, else result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + if (reply) + { + dbus_connection_send (bus, reply, NULL); + dbus_message_unref (reply); + } + return result; } @@ -357,32 +389,32 @@ append_interface (GString *str, const gchar *interface, const gchar *directory) { - gchar *filename; - gchar *contents; - gsize len; - - GError *err = NULL; - - filename = g_build_filename (directory, interface, NULL); - - if (g_file_get_contents (filename, &contents, &len, &err)) - { - g_string_append_len (str, contents, len); - } - else - { - g_warning ("AT-SPI: Cannot find introspection XML file %s - %s", - filename, err->message); - g_error_free (err); - } - - g_string_append (str, "\n"); - g_free (filename); - g_free (contents); + gchar *filename; + gchar *contents; + gsize len; + + GError *err = NULL; + + filename = g_build_filename (directory, interface, NULL); + + if (g_file_get_contents (filename, &contents, &len, &err)) + { + g_string_append_len (str, contents, len); + } + else + { + g_warning ("AT-SPI: Cannot find introspection XML file %s - %s", + filename, err->message); + g_error_free (err); + } + + g_string_append (str, "\n"); + g_free (filename); + g_free (contents); } static DBusHandlerResult -handle_intropsection (DBusConnection *bus, +handle_introspection (DBusConnection *bus, DBusMessage *message, DRoutePath *path, const gchar *iface, @@ -395,7 +427,9 @@ handle_intropsection (DBusConnection *bus, DBusMessage *reply; - if (g_strcmp (member, "Introspect")) + _DROUTE_DEBUG ("DRoute (handle introspection): %s\n", pathstr); + + if (g_strcmp0 (member, "Introspect")) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; output = g_string_new(introspection_header); @@ -442,6 +476,8 @@ handle_other (DBusConnection *bus, pair.one = iface; pair.two = member; + _DROUTE_DEBUG ("DRoute (handle other): %s|%s on %s\n", member, iface, pathstr); + func = (DRouteFunction) g_hash_table_lookup (path->methods, &pair); if (func != NULL) { @@ -485,4 +521,24 @@ handle_message (DBusConnection *bus, DBusMessage *message, void *user_data) return handle_other (bus, message, path, iface, member, pathstr); } +/*---------------------------------------------------------------------------*/ + +DBusMessage * +droute_not_yet_handled_error (DBusMessage *message) +{ + DBusMessage *reply; + gchar *errmsg; + + errmsg= g_strdup_printf ( + "Method \"%s\" with signature \"%s\" on interface \"%s\" doesn't exist\n", + dbus_message_get_member (message), + dbus_message_get_signature (message), + dbus_message_get_interface (message)); + reply = dbus_message_new_error (message, + DBUS_ERROR_UNKNOWN_METHOD, + errmsg); + g_free (errmsg); + return reply; +} + /*END------------------------------------------------------------------------*/ diff --git a/droute/droute.h b/droute/droute.h index 93de4f7..3943178 100644 --- a/droute/droute.h +++ b/droute/droute.h @@ -28,6 +28,7 @@ #include + typedef DBusMessage *(*DRouteFunction) (DBusConnection *, DBusMessage *, void *); typedef dbus_bool_t (*DRoutePropertyFunction) (DBusMessageIter *, void *); @@ -79,4 +80,10 @@ droute_path_add_interface (DRoutePath *path, const DRouteMethod *methods, const DRouteProperty *properties); +DBusMessage * +droute_not_yet_handled_error (DBusMessage *message); + +DBusConnection * +droute_get_bus (DRouteContext *cnx); + #endif /* _DROUTE_H */ diff --git a/droute/test.interface.One b/droute/test.interface.One new file mode 100644 index 0000000..a8e2206 --- /dev/null +++ b/droute/test.interface.One @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/droute/test.interface.Two b/droute/test.interface.Two new file mode 100644 index 0000000..ca661ec --- /dev/null +++ b/droute/test.interface.Two @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/pyatspi/action.py b/pyatspi/action.py index 9ed4f19..796e6a2 100644 --- a/pyatspi/action.py +++ b/pyatspi/action.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Action(BaseProxy): +class Action(Accessible): """ An interface through which a user-actionable user interface component can be manipulated. Components which react to mouse or keyboard @@ -42,7 +42,7 @@ class Action(BaseProxy): Causes the object to perform the specified action. @return : a boolean indicating success or failure. """ - func = self.get_dbus_method("doAction") + func = self.get_dbus_method("doAction", dbus_interface=ATSPI_ACTION) return func(index) def getDescription(self, index): @@ -56,7 +56,7 @@ class Action(BaseProxy): @return : a string containing the description of the specified action. """ - func = self.get_dbus_method("getDescription") + func = self.get_dbus_method("getDescription", dbus_interface=ATSPI_ACTION) return func(index) def getKeyBinding(self, index): @@ -68,7 +68,7 @@ class Action(BaseProxy): @return : a string containing the key binding for the specified action, or an empty string ("") if none exists. """ - func = self.get_dbus_method("getKeyBinding") + func = self.get_dbus_method("getKeyBinding", dbus_interface=ATSPI_ACTION) return func(index) def getName(self, index): @@ -81,7 +81,7 @@ class Action(BaseProxy): the result of invoking the action. @return : a string containing the name of the specified action. """ - func = self.get_dbus_method("getName") + func = self.get_dbus_method("getName", dbus_interface=ATSPI_ACTION) return func(index) def get_nActions(self): @@ -96,6 +96,6 @@ class Action(BaseProxy): nActions = property(fget=get_nActions, fset=set_nActions, doc=_nActionsDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_ACTION, Action) +accessible_factory.register_accessible_class(ATSPI_ACTION, Action) #END---------------------------------------------------------------------------- diff --git a/pyatspi/application.py b/pyatspi/application.py index d545143..a72693b 100644 --- a/pyatspi/application.py +++ b/pyatspi/application.py @@ -12,14 +12,13 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * from factory import accessible_factory from accessible import Accessible __all__ = [ - "Application", - ] + "Application", + ] #------------------------------------------------------------------------------ @@ -40,7 +39,7 @@ class Application(Accessible): @return a string compliant with the POSIX standard for locale description. """ - func = self.get_dbus_method("getLocale") + func = self.get_dbus_method("getLocale", dbus_interface=ATSPI_APPLICATION) return func(*args, **kwargs) def pause(self, *args, **kwargs): @@ -50,7 +49,7 @@ class Application(Accessible): loop. @return : true if the request succeeded, false otherwise. """ - func = self.get_dbus_method("pause") + func = self.get_dbus_method("pause", dbus_interface=ATSPI_APPLICATION) return func(*args, **kwargs) def registerObjectEventListener(self, *args, **kwargs): @@ -63,7 +62,7 @@ class Application(Accessible): being requested. Register with this application toolkit for "Accessibility::Accessible" event notifications. """ - func = self.get_dbus_method("registerObjectEventListener") + func = self.get_dbus_method("registerObjectEventListener", dbus_interface=ATSPI_APPLICATION) return func(*args, **kwargs) def registerToolkitEventListener(self, *args, **kwargs): @@ -78,7 +77,7 @@ class Application(Accessible): Register with this application's toolkit for "toolkit-specific" event notifications. """ - func = self.get_dbus_method("registerToolkitEventListener") + func = self.get_dbus_method("registerToolkitEventListener", dbus_interface=ATSPI_APPLICATION) return func(*args, **kwargs) def resume(self, *args, **kwargs): @@ -86,7 +85,7 @@ class Application(Accessible): Request that the application resume sending events. @return : True if the request succeeded, False otherwise. """ - func = self.get_dbus_method("resume") + func = self.get_dbus_method("resume", dbus_interface=ATSPI_APPLICATION) return func(*args, **kwargs) def get_id(self): @@ -122,6 +121,6 @@ class Application(Accessible): version = property(fget=get_version, fset=set_version, doc=_versionDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_APPLICATION, Application) +accessible_factory.register_accessible_class(ATSPI_APPLICATION, Application) #END---------------------------------------------------------------------------- diff --git a/pyatspi/collection.py b/pyatspi/collection.py index e9aed2b..a5be820 100644 --- a/pyatspi/collection.py +++ b/pyatspi/collection.py @@ -12,8 +12,9 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy, Enum +from interfaces import * +from base import Enum +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,34 +23,34 @@ __all__ = [ #------------------------------------------------------------------------------ -class Collection(BaseProxy): +class Collection(Accessible): def createMatchRule(self, *args, **kwargs): - func = self.get_dbus_method("createMatchRule") + func = self.get_dbus_method("createMatchRule", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def freeMatchRule(self, *args, **kwargs): - func = self.get_dbus_method("freeMatchRule") + func = self.get_dbus_method("freeMatchRule", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def getActiveDescendant(self, *args, **kwargs): - func = self.get_dbus_method("getActiveDescendant") + func = self.get_dbus_method("getActiveDescendant", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def getMatches(self, *args, **kwargs): - func = self.get_dbus_method("getMatches") + func = self.get_dbus_method("getMatches", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def getMatchesFrom(self, *args, **kwargs): - func = self.get_dbus_method("getMatchesFrom") + func = self.get_dbus_method("getMatchesFrom", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def getMatchesTo(self, *args, **kwargs): - func = self.get_dbus_method("getMatchesTo") + func = self.get_dbus_method("getMatchesTo", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) def isAncestorOf(self, *args, **kwargs): - func = self.get_dbus_method("isAncestorOf") + func = self.get_dbus_method("isAncestorOf", dbus_interface=ATSPI_COLLECTION) return func(*args, **kwargs) class MatchType(Enum): @@ -104,6 +105,6 @@ class Collection(BaseProxy): TREE_RESTRICT_SIBLING = TreeTraversalType(1) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_COLLECTION, Collection) +accessible_factory.register_accessible_class(ATSPI_COLLECTION, Collection) #END---------------------------------------------------------------------------- diff --git a/pyatspi/component.py b/pyatspi/component.py index 1b740c2..cd606db 100644 --- a/pyatspi/component.py +++ b/pyatspi/component.py @@ -12,10 +12,10 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy, Enum +from interfaces import * +from base import Enum from factory import accessible_factory -from accessible import BoundingBox +from accessible import BoundingBox, Accessible from dbus.types import Int16 @@ -74,7 +74,7 @@ LAYER_WINDOW = ComponentLayer(7) #------------------------------------------------------------------------------ -class Component(BaseProxy): +class Component(Accessible): """ The Component interface is implemented by objects which occupy on-screen space, e.g. objects which have onscreen visual representations. @@ -92,7 +92,7 @@ class Component(BaseProxy): @return True if the specified point lies within the Component's bounding box, False otherwise. """ - func = self.get_dbus_method("contains") + func = self.get_dbus_method("contains", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def deregisterFocusHandler(self, *args, **kwargs): @@ -100,7 +100,7 @@ class Component(BaseProxy): Request that an EventListener registered via registerFocusHandler no longer be notified when this object receives keyboard focus. """ - func = self.get_dbus_method("deregisterFocusHandler") + func = self.get_dbus_method("deregisterFocusHandler", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def getAccessibleAtPoint(self, *args, **kwargs): @@ -109,7 +109,7 @@ class Component(BaseProxy): specified point. """ #TODO this needs a real implementation - func = self.get_dbus_method("getAccessibleAtPoint") + func = self.get_dbus_method("getAccessibleAtPoint", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def getAlpha(self, *args, **kwargs): @@ -119,7 +119,7 @@ class Component(BaseProxy): alpha value of 0.0 indicates that the object is fully transparent. Negative alpha values have no defined meaning at this time. """ - func = self.get_dbus_method("getAlpha") + func = self.get_dbus_method("getAlpha", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def getExtents(self, coord_type): @@ -130,7 +130,7 @@ class Component(BaseProxy): @return a BoundingBox which entirely contains the object's onscreen visual representation. """ - func = self.get_dbus_method("getExtents") + func = self.get_dbus_method("getExtents", dbus_interface=ATSPI_COMPONENT) extents = func(Int16(coord_type)) return BoundingBox(*extents) @@ -138,7 +138,7 @@ class Component(BaseProxy): """ @return the ComponentLayer in which this object resides. """ - func = self.get_dbus_method("getLayer") + func = self.get_dbus_method("getLayer", dbus_interface=ATSPI_COMPONENT) return ComponentLayer(func(*args, **kwargs)) def getMDIZOrder(self): @@ -150,7 +150,7 @@ class Component(BaseProxy): @return an integer indicating the object's place in the stacking order. """ - func = self.get_dbus_method("getMDIZOrder") + func = self.get_dbus_method("getMDIZOrder", dbus_interface=ATSPI_COMPONENT) return func() def getPosition(self, coord_type): @@ -165,7 +165,7 @@ class Component(BaseProxy): an out parameter which will be back-filled with the returned y coordinate. """ - func = self.get_dbus_method("getPosition") + func = self.get_dbus_method("getPosition", dbus_interface=ATSPI_COMPONENT) return func(Int16(coord_type)) def getSize(self, *args, **kwargs): @@ -178,7 +178,7 @@ class Component(BaseProxy): @param : height the object's vertical extents in the specified coordinate system. """ - func = self.get_dbus_method("getSize") + func = self.get_dbus_method("getSize", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def grabFocus(self, *args, **kwargs): @@ -187,7 +187,7 @@ class Component(BaseProxy): @return True if keyboard focus was successfully transferred to the Component. """ - func = self.get_dbus_method("grabFocus") + func = self.get_dbus_method("grabFocus", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) def registerFocusHandler(self, *args, **kwargs): @@ -195,10 +195,10 @@ class Component(BaseProxy): Register an EventListener for notification when this object receives keyboard focus. """ - func = self.get_dbus_method("registerFocusHandler") + func = self.get_dbus_method("registerFocusHandler", dbus_interface=ATSPI_COMPONENT) return func(*args, **kwargs) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_COMPONENT, Component) +accessible_factory.register_accessible_class(ATSPI_COMPONENT, Component) #END---------------------------------------------------------------------------- diff --git a/pyatspi/desktop.py b/pyatspi/desktop.py index 0a2e0e2..1ab2019 100644 --- a/pyatspi/desktop.py +++ b/pyatspi/desktop.py @@ -12,7 +12,7 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces +from interfaces import * from base import BaseProxyMeta from accessible import BoundingBox from state import StateSet @@ -345,7 +345,7 @@ class Desktop(object): @property def interfaces(self): - return [interfaces.ATSPI_ACCESSIBLE, interfaces.ATSPI_COMPONENT] + return [ATSPI_ACCESSIBLE, ATSPI_COMPONENT] def queryInterface(self, interface): """ @@ -353,9 +353,9 @@ class Desktop(object): or raises a NotImplemented error if the given interface is not supported. """ - if interface == interfaces.ATSPI_ACCESSIBLE: + if interface == ATSPI_ACCESSIBLE: return self - elif interface == interfaces.ATSPI_COMPONENT: + elif interface == ATSPI_COMPONENT: return DesktopComponent() else: raise NotImplementedError( diff --git a/pyatspi/document.py b/pyatspi/document.py index 12e2671..be256b6 100644 --- a/pyatspi/document.py +++ b/pyatspi/document.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Document(BaseProxy): +class Document(Accessible): """ Primarily a 'tagging' interface which indicates the start of document content in the Accessibility hierarchy. Accessible objects @@ -44,7 +44,7 @@ class Document(BaseProxy): attribute, or an empty string if the attribute is unspecified for the object. """ - func = self.get_dbus_method("getAttributeValue") + func = self.get_dbus_method("getAttributeValue", dbus_interface=ATSPI_DOCUMENT) return func(*args, **kwargs) def getAttributes(self, *args, **kwargs): @@ -55,7 +55,7 @@ class Document(BaseProxy): @return an AttributeSet containing the attributes of the document, as name-value pairs. """ - func = self.get_dbus_method("getAttributes") + func = self.get_dbus_method("getAttributes", dbus_interface=ATSPI_DOCUMENT) return func(*args, **kwargs) def getLocale(self, *args, **kwargs): @@ -65,10 +65,10 @@ class Document(BaseProxy): @return a string compliant with the POSIX standard for locale description. """ - func = self.get_dbus_method("getLocale") + func = self.get_dbus_method("getLocale", dbus_interface=ATSPI_DOCUMENT) return func(*args, **kwargs) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_DOCUMENT, Document) +accessible_factory.register_accessible_class(ATSPI_DOCUMENT, Document) #END---------------------------------------------------------------------------- diff --git a/pyatspi/editabletext.py b/pyatspi/editabletext.py index 084840f..8c9d6a9 100644 --- a/pyatspi/editabletext.py +++ b/pyatspi/editabletext.py @@ -12,8 +12,7 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * from factory import accessible_factory from text import * @@ -41,7 +40,7 @@ class EditableText(Text): the offset of the first character past the end of the range of text being copied. """ - func = self.get_dbus_method("copyText") + func = self.get_dbus_method("copyText", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def cutText(self, *args, **kwargs): @@ -56,7 +55,7 @@ class EditableText(Text): text being cut. @return True if the text was successfully cut, False otherwise. """ - func = self.get_dbus_method("cutText") + func = self.get_dbus_method("cutText", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def deleteText(self, *args, **kwargs): @@ -71,7 +70,7 @@ class EditableText(Text): text being deleted. @return True if the text was successfully deleted, False otherwise. """ - func = self.get_dbus_method("deleteText") + func = self.get_dbus_method("deleteText", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def insertText(self, *args, **kwargs): @@ -91,7 +90,7 @@ class EditableText(Text): @return True if the text content was successfully inserted, False otherwise. """ - func = self.get_dbus_method("insertText") + func = self.get_dbus_method("insertText", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def pasteText(self, *args, **kwargs): @@ -103,7 +102,7 @@ class EditableText(Text): @return True if the text was successfully pasted into the Text object, False otherwise. """ - func = self.get_dbus_method("pasteText") + func = self.get_dbus_method("pasteText", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def setAttributes(self, *args, **kwargs): @@ -112,7 +111,7 @@ class EditableText(Text): @return True if the text attributes were successfully modified, False otherwise. """ - func = self.get_dbus_method("setAttributes") + func = self.get_dbus_method("setAttributes", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) def setTextContents(self, *args, **kwargs): @@ -125,10 +124,10 @@ class EditableText(Text): @return True if the text content was successfully changed, False otherwise. """ - func = self.get_dbus_method("setTextContents") + func = self.get_dbus_method("setTextContents", dbus_interface=ATSPI_EDITABLE_TEXT) return func(*args, **kwargs) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_EDITABLE_TEXT, EditableText) +accessible_factory.register_accessible_class(ATSPI_EDITABLE_TEXT, EditableText) #END---------------------------------------------------------------------------- diff --git a/pyatspi/hyperlink.py b/pyatspi/hyperlink.py index 143984b..a57f646 100644 --- a/pyatspi/hyperlink.py +++ b/pyatspi/hyperlink.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Hyperlink(BaseProxy): +class Hyperlink(Accessible): """ Instances of Hyperlink are returned by Hypertext objects, and are the means by which end users and clients interact with linked, @@ -48,7 +48,7 @@ class Hyperlink(BaseProxy): ith anchor, or through which the content associated with the ith anchor can be accessed. """ - func = self.get_dbus_method("getObject") + func = self.get_dbus_method("getObject", dbus_interface=ATSPI_HYPERLINK) return func(*args, **kwargs) def getURI(self, *args, **kwargs): @@ -58,7 +58,7 @@ class Hyperlink(BaseProxy): @return a string corresponding to the URI of the Hyperlink's 'ith' anchor, if one exists, or a NIL string otherwise. """ - func = self.get_dbus_method("getURI") + func = self.get_dbus_method("getURI", dbus_interface=ATSPI_HYPERLINK) return func(*args, **kwargs) def isValid(self, *args, **kwargs): @@ -69,7 +69,7 @@ class Hyperlink(BaseProxy): the hyperlink's URI is invalid, or a connection to the resource can not be established. """ - func = self.get_dbus_method("isValid") + func = self.get_dbus_method("isValid", dbus_interface=ATSPI_HYPERLINK) return func(*args, **kwargs) def get_endIndex(self): @@ -107,6 +107,6 @@ class Hyperlink(BaseProxy): startIndex = property(fget=get_startIndex, fset=set_startIndex, doc=_startIndexDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_HYPERLINK, Hyperlink) +accessible_factory.register_accessible_class(ATSPI_HYPERLINK, Hyperlink) #END---------------------------------------------------------------------------- diff --git a/pyatspi/hypertext.py b/pyatspi/hypertext.py index f8e428e..27aebff 100644 --- a/pyatspi/hypertext.py +++ b/pyatspi/hypertext.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Hypertext(BaseProxy): +class Hypertext(Accessible): """ An interface used for objects which implement linking between multiple resource or content locations, or multiple 'markers' @@ -39,7 +39,7 @@ class Hypertext(BaseProxy): an integer from 0 to getNLinks() - 1. @return the Hyperlink in this Hypertext object. """ - func = self.get_dbus_method("getLink") + func = self.get_dbus_method("getLink", dbus_interface=ATSPI_HYPERTEXT) return func(*args, **kwargs) def getLinkIndex(self, *args, **kwargs): @@ -52,7 +52,7 @@ class Hypertext(BaseProxy): offset characterIndex, or -1 if no Hyperlink is associated with that character offset. """ - func = self.get_dbus_method("getLinkIndex") + func = self.get_dbus_method("getLinkIndex", dbus_interface=ATSPI_HYPERTEXT) return func(*args, **kwargs) def getNLinks(self, *args, **kwargs): @@ -61,10 +61,10 @@ class Hypertext(BaseProxy): @return the number of Hyperlinks associated with this Hypertext object, as a long integer. """ - func = self.get_dbus_method("getNLinks") + func = self.get_dbus_method("getNLinks", dbus_interface=ATSPI_HYPERTEXT) return func(*args, **kwargs) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_HYPERTEXT, Hypertext) +accessible_factory.register_accessible_class(ATSPI_HYPERTEXT, Hypertext) #END---------------------------------------------------------------------------- diff --git a/pyatspi/image.py b/pyatspi/image.py index 6911692..49c4095 100644 --- a/pyatspi/image.py +++ b/pyatspi/image.py @@ -13,8 +13,8 @@ #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import dbus -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory from accessible import BoundingBox @@ -24,7 +24,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Image(BaseProxy): +class Image(Accessible): """ An interface implemented by objects which render image data or pictorial information to the screen. When onscreen components @@ -48,7 +48,7 @@ class Image(BaseProxy): to the containing window. @return a BoundingBox enclosing the image's onscreen representation. """ - func = self.get_dbus_method("getImageExtents") + func = self.get_dbus_method("getImageExtents", dbus_interface=ATSPI_IMAGE) return BoundingBox(*func(dbus.Int16(coordType))) def getImagePosition(self, *args, **kwargs): @@ -65,7 +65,7 @@ class Image(BaseProxy): to the screen; if 1, they are returned relative to the containing window. """ - func = self.get_dbus_method("getImagePosition") + func = self.get_dbus_method("getImagePosition", dbus_interface=ATSPI_IMAGE) return func(*args, **kwargs) def getImageSize(self, *args, **kwargs): @@ -81,7 +81,7 @@ class Image(BaseProxy): Back-filled with the y extents of the onscreen image (i.e. the image height in pixels) """ - func = self.get_dbus_method("getImageSize") + func = self.get_dbus_method("getImageSize", dbus_interface=ATSPI_IMAGE) return func(*args, **kwargs) def get_imageDescription(self): @@ -107,6 +107,6 @@ class Image(BaseProxy): imageLocale = property(fget=get_imageLocale, fset=set_imageLocale, doc=_imageLocaleDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_IMAGE, Image) +accessible_factory.register_accessible_class(ATSPI_IMAGE, Image) #END---------------------------------------------------------------------------- diff --git a/pyatspi/loginhelper.py b/pyatspi/loginhelper.py index 13e17bb..a8b5183 100644 --- a/pyatspi/loginhelper.py +++ b/pyatspi/loginhelper.py @@ -12,8 +12,9 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy, Enum +from interfaces import * +from base import Enum +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +23,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class LoginHelper(BaseProxy): +class LoginHelper(Accessible): """ An interface for use by assistive technologies by which they can access system information and services on a 'need to know' @@ -67,7 +68,7 @@ class LoginHelper(BaseProxy): device I/O required in order to facilitate end-user access to the system. """ - func = self.get_dbus_method("getDeviceReqs") + func = self.get_dbus_method("getDeviceReqs", dbus_interface=ATSPI_LOGIN_HELPER) return func(*args, **kwargs) def getRaiseWindows(self, *args, **kwargs): @@ -79,7 +80,7 @@ class LoginHelper(BaseProxy): order for the LoginHelper to facilitate end-user access to the system. """ - func = self.get_dbus_method("getRaiseWindows") + func = self.get_dbus_method("getRaiseWindows", dbus_interface=ATSPI_LOGIN_HELPER) return func(*args, **kwargs) def setSafe(self, *args, **kwargs): @@ -98,7 +99,7 @@ class LoginHelper(BaseProxy): when in "safe" mode. @return : whether the LoginHelper is now "safe" or not. """ - func = self.get_dbus_method("setSafe") + func = self.get_dbus_method("setSafe", dbus_interface=ATSPI_LOGIN_HELPER) return func(*args, **kwargs) class DeviceReq(Enum): @@ -141,6 +142,6 @@ class LoginHelper(BaseProxy): winID = property(fget=_get_winID, fset=_set_winID) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_LOGIN_HELPER, LoginHelper) +accessible_factory.register_accessible_class(ATSPI_LOGIN_HELPER, LoginHelper) #END---------------------------------------------------------------------------- diff --git a/pyatspi/selection.py b/pyatspi/selection.py index 6a201a8..de665db 100644 --- a/pyatspi/selection.py +++ b/pyatspi/selection.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Selection(BaseProxy): +class Selection(Accessible): """ An interface which indicates that an object exposes a 'selection' model, allowing the selection of one or more of its children. @@ -41,7 +41,7 @@ class Selection(BaseProxy): @return True if the selections were successfully cleared, False otherwise. """ - func = self.get_dbus_method("clearSelection") + func = self.get_dbus_method("clearSelection", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def deselectChild(self, *args, **kwargs): @@ -54,7 +54,7 @@ class Selection(BaseProxy): to be selected. @return True if the child was successfully selected, False otherwise. """ - func = self.get_dbus_method("deselectChild") + func = self.get_dbus_method("deselectChild", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def deselectSelectedChild(self, *args, **kwargs): @@ -68,7 +68,7 @@ class Selection(BaseProxy): @return True if the child was successfully deselected, False otherwise. """ - func = self.get_dbus_method("deselectSelectedChild") + func = self.get_dbus_method("deselectSelectedChild", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def getSelectedChild(self, *args, **kwargs): @@ -80,7 +80,7 @@ class Selection(BaseProxy): @return a pointer to a selected Accessible child object, specified by selectedChildIndex. """ - func = self.get_dbus_method("getSelectedChild") + func = self.get_dbus_method("getSelectedChild", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def isChildSelected(self, *args, **kwargs): @@ -93,7 +93,7 @@ class Selection(BaseProxy): @return True if the specified child is currently selected, False otherwise. """ - func = self.get_dbus_method("isChildSelected") + func = self.get_dbus_method("isChildSelected", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def selectAll(self, *args, **kwargs): @@ -104,7 +104,7 @@ class Selection(BaseProxy): support this operation). @return True if successful, False otherwise. """ - func = self.get_dbus_method("selectAll") + func = self.get_dbus_method("selectAll", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def selectChild(self, *args, **kwargs): @@ -115,7 +115,7 @@ class Selection(BaseProxy): be selected. @return True if the child was successfully selected, False otherwise. """ - func = self.get_dbus_method("selectChild") + func = self.get_dbus_method("selectChild", dbus_interface=ATSPI_SELECTION) return func(*args, **kwargs) def get_nSelectedChildren(self): @@ -130,6 +130,6 @@ class Selection(BaseProxy): nSelectedChildren = property(fget=get_nSelectedChildren, fset=set_nSelectedChildren, doc=_nSelectedChildrenDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_SELECTION, Selection) +accessible_factory.register_accessible_class(ATSPI_SELECTION, Selection) #END---------------------------------------------------------------------------- diff --git a/pyatspi/selector.py b/pyatspi/selector.py index ceed7ff..a4916c0 100644 --- a/pyatspi/selector.py +++ b/pyatspi/selector.py @@ -12,8 +12,9 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces +from interfaces import * from base import BaseProxy, Enum +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -58,12 +59,12 @@ class CommandListener(BaseProxy): The newly-available list of Command objects which may be invoked by the listener. """ - func = self.get_dbus_method("notifyCommands") + func = self.get_dbus_method("notifyCommands", dbus_interface=ATSPI_COMMAND_LISTENER) return func(*args, **kwargs) #------------------------------------------------------------------------------ -class Selector(BaseProxy): +class Selector(Accessible): """ This interface is intended for use by assistive technologies and related user-agents. Via this interface, an assistive technology @@ -85,7 +86,7 @@ class Selector(BaseProxy): and the reason for failure if the Command could not be activated or invoked. """ - func = self.get_dbus_method("activateCommand") + func = self.get_dbus_method("activateCommand", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def deregisterChangeListener(self, *args, **kwargs): @@ -95,7 +96,7 @@ class Selector(BaseProxy): @param : listener the CommandListener to remove from the notification list. """ - func = self.get_dbus_method("deregisterChangeListener") + func = self.get_dbus_method("deregisterChangeListener", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def getCommands(self, *args, **kwargs): @@ -103,7 +104,7 @@ class Selector(BaseProxy): Query the Selector for the current CommandList. @return the currently available CommandList """ - func = self.get_dbus_method("getCommands") + func = self.get_dbus_method("getCommands", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def refreshCommands(self, *args, **kwargs): @@ -111,7 +112,7 @@ class Selector(BaseProxy): Ask the Selector to re-calculate its CommandList. @return TRUE if the CommandList changed. """ - func = self.get_dbus_method("refreshCommands") + func = self.get_dbus_method("refreshCommands", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def registerChangeListener(self, *args, **kwargs): @@ -121,7 +122,7 @@ class Selector(BaseProxy): @param : listener the CommandListener to be notified of changes. """ - func = self.get_dbus_method("registerChangeListener") + func = self.get_dbus_method("registerChangeListener", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def replaceCommands(self, *args, **kwargs): @@ -129,7 +130,7 @@ class Selector(BaseProxy): @return TRUE if the replacement request was successful, FALSE if the request could not be honored. """ - func = self.get_dbus_method("replaceCommands") + func = self.get_dbus_method("replaceCommands", dbus_interface=ATSPI_SELECTOR) return func(*args, **kwargs) def get_supportsReplace(self): @@ -163,6 +164,6 @@ class Selector(BaseProxy): COMMAND_RESULT_SUCCESS = CommandResult(1) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_SELECTOR, Selector) +accessible_factory.register_accessible_class(ATSPI_SELECTOR, Selector) #END---------------------------------------------------------------------------- diff --git a/pyatspi/streamablecontent.py b/pyatspi/streamablecontent.py index 70c5004..1a52bc4 100644 --- a/pyatspi/streamablecontent.py +++ b/pyatspi/streamablecontent.py @@ -12,8 +12,9 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces +from interfaces import * from base import BaseProxy, Enum +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -35,7 +36,7 @@ class ContentStream(BaseProxy): not perform further operations on a StreamableContent::Stream object after closing it. """ - func = self.get_dbus_method("close") + func = self.get_dbus_method("close", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) def read(self, *args, **kwargs): @@ -43,7 +44,7 @@ class ContentStream(BaseProxy): Request/read a specified amount of data from a Stream. @return the number of bytes actually read into the client buffer. """ - func = self.get_dbus_method("read") + func = self.get_dbus_method("read", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) def seek(self, *args, **kwargs): @@ -59,7 +60,7 @@ class ContentStream(BaseProxy): exception will be raised. @return the actual resulting offset, if no exception was raised. """ - func = self.get_dbus_method("seek") + func = self.get_dbus_method("seek", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) class IOError(Exception): @@ -90,7 +91,7 @@ class ContentStream(BaseProxy): #------------------------------------------------------------------------------ -class StreamableContent(BaseProxy): +class StreamableContent(Accessible): """ An interface whereby an object allows its backing content to be streamed to clients. Negotiation of content type is allowed. @@ -103,7 +104,7 @@ class StreamableContent(BaseProxy): """ DEPRECATED, use getStream instead. """ - func = self.get_dbus_method("getContent") + func = self.get_dbus_method("getContent", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) def getContentTypes(self, *args, **kwargs): @@ -111,7 +112,7 @@ class StreamableContent(BaseProxy): getContentTypes: @return the list of available mimetypes for this object's content. """ - func = self.get_dbus_method("getContentTypes") + func = self.get_dbus_method("getContentTypes", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) def getStream(self, *args, **kwargs): @@ -123,7 +124,7 @@ class StreamableContent(BaseProxy): @return a Stream whose mimetype matches contentType, if available, or NIL. """ - func = self.get_dbus_method("getStream") + func = self.get_dbus_method("getStream", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) def getURI(self, *args, **kwargs): @@ -138,10 +139,10 @@ class StreamableContent(BaseProxy): @return a string which constitutes a URI for a stream of the specified content type, or NULL if no such URI can be obtained. """ - func = self.get_dbus_method("getURI") + func = self.get_dbus_method("getURI", dbus_interface=ATSPI_STREAMABLE_CONTENT) return func(*args, **kwargs) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_STREAMABLE_CONTENT, StreamableContent) +accessible_factory.register_accessible_class(ATSPI_STREAMABLE_CONTENT, StreamableContent) #END---------------------------------------------------------------------------- diff --git a/pyatspi/table.py b/pyatspi/table.py index 549b54e..7034e4d 100644 --- a/pyatspi/table.py +++ b/pyatspi/table.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Table(BaseProxy): +class Table(Accessible): """ An interface used by containers whose contained data is arranged in a "tabular" (i.e. row-column) fashion. Tables may resemble @@ -46,7 +46,7 @@ class Table(BaseProxy): @return True if the specified column was successfully selected, False if not. """ - func = self.get_dbus_method("addColumnSelection") + func = self.get_dbus_method("addColumnSelection", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def addRowSelection(self, *args, **kwargs): @@ -57,7 +57,7 @@ class Table(BaseProxy): @return True if the specified row was successfully selected, False if not. """ - func = self.get_dbus_method("addRowSelection") + func = self.get_dbus_method("addRowSelection", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getAccessibleAt(self, *args, **kwargs): @@ -70,7 +70,7 @@ class Table(BaseProxy): @return an Accessible object representing the specified table cell. """ - func = self.get_dbus_method("getAccessibleAt") + func = self.get_dbus_method("getAccessibleAt", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getColumnAtIndex(self, *args, **kwargs): @@ -82,7 +82,7 @@ class Table(BaseProxy): @return a long integer indicating the first column spanned by the child of a table, at the specified 1-D (zero-offset) index. """ - func = self.get_dbus_method("getColumnAtIndex") + func = self.get_dbus_method("getColumnAtIndex", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getColumnDescription(self, *args, **kwargs): @@ -94,7 +94,7 @@ class Table(BaseProxy): @return a UTF-8 string describing the specified table column, if available. """ - func = self.get_dbus_method("getColumnDescription") + func = self.get_dbus_method("getColumnDescription", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getColumnExtentAt(self, *args, **kwargs): @@ -109,7 +109,7 @@ class Table(BaseProxy): @return a long integer indicating the number of columns spanned by the specified cell. """ - func = self.get_dbus_method("getColumnExtentAt") + func = self.get_dbus_method("getColumnExtentAt", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getColumnHeader(self, *args, **kwargs): @@ -122,7 +122,7 @@ class Table(BaseProxy): @return an Accessible representatin of the specified table column, if available. """ - func = self.get_dbus_method("getColumnHeader") + func = self.get_dbus_method("getColumnHeader", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getIndexAt(self, *args, **kwargs): @@ -136,7 +136,7 @@ class Table(BaseProxy): @return a long integer which serves as the index of a specified cell in the table, in a form usable by Accessible::getChildAtIndex. """ - func = self.get_dbus_method("getIndexAt") + func = self.get_dbus_method("getIndexAt", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getRowAtIndex(self, *args, **kwargs): @@ -148,7 +148,7 @@ class Table(BaseProxy): @return a long integer indicating the first row spanned by the child of a table, at the specified 1-D (zero-offset) index. """ - func = self.get_dbus_method("getRowAtIndex") + func = self.get_dbus_method("getRowAtIndex", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getRowColumnExtentsAtIndex(self, *args, **kwargs): @@ -187,7 +187,7 @@ class Table(BaseProxy): False if the index does not correspond to a cell. If False is returned, the values of the out parameters are undefined. """ - func = self.get_dbus_method("getRowColumnExtentsAtIndex") + func = self.get_dbus_method("getRowColumnExtentsAtIndex", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getRowDescription(self, *args, **kwargs): @@ -199,7 +199,7 @@ class Table(BaseProxy): @return a UTF-8 string describing the specified table row, if available. """ - func = self.get_dbus_method("getRowDescription") + func = self.get_dbus_method("getRowDescription", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getRowExtentAt(self, *args, **kwargs): @@ -214,7 +214,7 @@ class Table(BaseProxy): @return a long integer indicating the number of rows spanned by the specified cell. """ - func = self.get_dbus_method("getRowExtentAt") + func = self.get_dbus_method("getRowExtentAt", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getRowHeader(self, *args, **kwargs): @@ -226,7 +226,7 @@ class Table(BaseProxy): @return an Accessible representatin of the specified table row, if available. """ - func = self.get_dbus_method("getRowHeader") + func = self.get_dbus_method("getRowHeader", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getSelectedColumns(self, *args, **kwargs): @@ -235,7 +235,7 @@ class Table(BaseProxy): @return a sequence of integers comprising the indices of columns currently selected. """ - func = self.get_dbus_method("getSelectedColumns") + func = self.get_dbus_method("getSelectedColumns", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def getSelectedRows(self, *args, **kwargs): @@ -244,7 +244,7 @@ class Table(BaseProxy): @return a sequence of integers comprising the indices of rows currently selected. """ - func = self.get_dbus_method("getSelectedRows") + func = self.get_dbus_method("getSelectedRows", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def isColumnSelected(self, *args, **kwargs): @@ -255,7 +255,7 @@ class Table(BaseProxy): @return True if the specified column is currently selected, False if not. """ - func = self.get_dbus_method("isColumnSelected") + func = self.get_dbus_method("isColumnSelected", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def isRowSelected(self, *args, **kwargs): @@ -266,7 +266,7 @@ class Table(BaseProxy): @return True if the specified row is currently selected, False if not. """ - func = self.get_dbus_method("isRowSelected") + func = self.get_dbus_method("isRowSelected", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def isSelected(self, *args, **kwargs): @@ -279,7 +279,7 @@ class Table(BaseProxy): @return True if the specified cell is currently selected, False if not. """ - func = self.get_dbus_method("isSelected") + func = self.get_dbus_method("isSelected", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def removeColumnSelection(self, *args, **kwargs): @@ -290,7 +290,7 @@ class Table(BaseProxy): @return True if the specified column was successfully de-selected, False if not. """ - func = self.get_dbus_method("removeColumnSelection") + func = self.get_dbus_method("removeColumnSelection", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def removeRowSelection(self, *args, **kwargs): @@ -301,7 +301,7 @@ class Table(BaseProxy): @return True if the specified row was successfully de-selected, False if not. """ - func = self.get_dbus_method("removeRowSelection") + func = self.get_dbus_method("removeRowSelection", dbus_interface=ATSPI_TABLE) return func(*args, **kwargs) def get_caption(self): @@ -374,6 +374,6 @@ class Table(BaseProxy): summary = property(fget=get_summary, fset=set_summary, doc=_summaryDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_TABLE, Table) +accessible_factory.register_accessible_class(ATSPI_TABLE, Table) #END---------------------------------------------------------------------------- diff --git a/pyatspi/text.py b/pyatspi/text.py index ed6c5f5..ef22f88 100644 --- a/pyatspi/text.py +++ b/pyatspi/text.py @@ -14,8 +14,9 @@ import dbus -import interfaces -from base import BaseProxy, Enum +from interfaces import * +from accessible import Accessible +from base import Enum from factory import accessible_factory __all__ = [ @@ -73,7 +74,7 @@ TEXT_CLIP_NONE = TEXT_CLIP_TYPE(0) #------------------------------------------------------------------------------ -class Text(BaseProxy): +class Text(Accessible): """ The text interface should be implemented by objects which place textual information onscreen as character strings or glyphs. @@ -112,7 +113,7 @@ class Text(BaseProxy): other reasons (for instance if the user does not have permission to copy the text into the relevant selection buffer). """ - func = self.get_dbus_method("addSelection") + func = self.get_dbus_method("addSelection", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getAttributeRun(self, *args, **kwargs): @@ -164,7 +165,7 @@ class Text(BaseProxy): @return the AttributeSet defined at offset, optionally including the 'default' attributes. """ - func = self.get_dbus_method("getAttributeRun") + func = self.get_dbus_method("getAttributeRun", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getAttributeValue(self, *args, **kwargs): @@ -189,7 +190,7 @@ class Text(BaseProxy): @return the value of attribute (name-value pair) corresponding to "name", if defined. """ - func = self.get_dbus_method("getAttributeValue") + func = self.get_dbus_method("getAttributeValue", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getAttributes(self, offset): @@ -198,7 +199,7 @@ class Text(BaseProxy): @return the attributes at offset, as a semicolon-delimited set of colon-delimited name-value pairs. """ - func = self.get_dbus_method("getAttributes") + func = self.get_dbus_method("getAttributes", dbus_interface=ATSPI_TEXT) return func(dbus.Int32(offset)) def getBoundedRanges(self, *args, **kwargs): @@ -229,7 +230,7 @@ class Text(BaseProxy): determines whether text which intersects the bounding box in the y direction is included. """ - func = self.get_dbus_method("getBoundedRanges") + func = self.get_dbus_method("getBoundedRanges", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getCharacterAtOffset(self, *args, **kwargs): @@ -238,7 +239,7 @@ class Text(BaseProxy): UCS-4 representation of the character at the specified text offset, or 0 if offset is out of range. """ - func = self.get_dbus_method("getCharacterAtOffset") + func = self.get_dbus_method("getCharacterAtOffset", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getCharacterExtents(self, *args, **kwargs): @@ -272,7 +273,7 @@ class Text(BaseProxy): window, with the x axis pointing right and the y axis pointing down. """ - func = self.get_dbus_method("getCharacterExtents") + func = self.get_dbus_method("getCharacterExtents", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getDefaultAttributeSet(self, *args, **kwargs): @@ -286,7 +287,7 @@ class Text(BaseProxy): whereas an object whose text weight is inspecified may report the default or implied text weight in the default AttributeSet. """ - func = self.get_dbus_method("getDefaultAttributeSet") + func = self.get_dbus_method("getDefaultAttributeSet", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getDefaultAttributes(self, *args, **kwargs): @@ -295,7 +296,7 @@ class Text(BaseProxy): @return the attributes which apply to the entire text content, but which were not explicitly specified by the content creator. """ - func = self.get_dbus_method("getDefaultAttributes") + func = self.get_dbus_method("getDefaultAttributes", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getNSelections(self, *args, **kwargs): @@ -310,7 +311,7 @@ class Text(BaseProxy): @return the number of contiguous selections in the current Text object. """ - func = self.get_dbus_method("getNSelections") + func = self.get_dbus_method("getNSelections", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getOffsetAtPoint(self, *args, **kwargs): @@ -328,7 +329,7 @@ class Text(BaseProxy): of the glyph whose onscreen bounds contain the point x,y, or -1 if the point is outside the bounds of any glyph. """ - func = self.get_dbus_method("getOffsetAtPoint") + func = self.get_dbus_method("getOffsetAtPoint", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getRangeExtents(self, *args, **kwargs): @@ -359,7 +360,7 @@ class Text(BaseProxy): corner of the screen; if 1, the coordinates are reported relative to the corner of the containing toplevel window. """ - func = self.get_dbus_method("getRangeExtents") + func = self.get_dbus_method("getRangeExtents", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getSelection(self, *args, **kwargs): @@ -368,7 +369,7 @@ class Text(BaseProxy): (i.e. for a selection which does not exist) is not strictly defined, but should set endOffset equal to startOffset. """ - func = self.get_dbus_method("getSelection") + func = self.get_dbus_method("getSelection", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getText(self, startOffset, endOffset): @@ -380,7 +381,7 @@ class Text(BaseProxy): startOffset (inclusive) up to but not including the character at endOffset. """ - func = self.get_dbus_method("getText") + func = self.get_dbus_method("getText", dbus_interface=ATSPI_TEXT) if not endOffset: endOffset = -1 return func(dbus.Int32(startOffset), dbus.Int32(endOffset)) @@ -410,7 +411,7 @@ class Text(BaseProxy): @return a string which is a substring of the text content of the object, delimited by the specified boundary condition. """ - func = self.get_dbus_method("getTextAfterOffset") + func = self.get_dbus_method("getTextAfterOffset", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getTextAtOffset(self, *args, **kwargs): @@ -437,7 +438,7 @@ class Text(BaseProxy): @return a string which is a substring of the text content of the object, delimited by the specified boundary condition. """ - func = self.get_dbus_method("getTextAtOffset") + func = self.get_dbus_method("getTextAtOffset", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def getTextBeforeOffset(self, *args, **kwargs): @@ -464,7 +465,7 @@ class Text(BaseProxy): @return a string which is a substring of the text content of the object, delimited by the specified boundary condition. """ - func = self.get_dbus_method("getTextBeforeOffset") + func = self.get_dbus_method("getTextBeforeOffset", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def removeSelection(self, *args, **kwargs): @@ -475,7 +476,7 @@ class Text(BaseProxy): @return True if the selection was successfully removed, False otherwise. """ - func = self.get_dbus_method("removeSelection") + func = self.get_dbus_method("removeSelection", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def setCaretOffset(self, *args, **kwargs): @@ -489,7 +490,7 @@ class Text(BaseProxy): @return TRUE if the request was carried out, or FALSE if the caret could not be moved to the requested position. """ - func = self.get_dbus_method("setCaretOffset") + func = self.get_dbus_method("setCaretOffset", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def setSelection(self, *args, **kwargs): @@ -508,7 +509,7 @@ class Text(BaseProxy): @return True if the selection corresponding to selectionNum is successfully modified, False otherwise. """ - func = self.get_dbus_method("setSelection") + func = self.get_dbus_method("setSelection", dbus_interface=ATSPI_TEXT) return func(*args, **kwargs) def get_caretOffset(self): @@ -565,6 +566,6 @@ class Text(BaseProxy): data = property(fget=_get_data, fset=_set_data) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_TEXT, Text) +accessible_factory.register_accessible_class(ATSPI_TEXT, Text) #END---------------------------------------------------------------------------- diff --git a/pyatspi/value.py b/pyatspi/value.py index 73dcd39..32c51fe 100644 --- a/pyatspi/value.py +++ b/pyatspi/value.py @@ -12,8 +12,8 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -import interfaces -from base import BaseProxy +from interfaces import * +from accessible import Accessible from factory import accessible_factory __all__ = [ @@ -22,7 +22,7 @@ __all__ = [ #------------------------------------------------------------------------------ -class Value(BaseProxy): +class Value(Accessible): """ An interface supporting controls which allow a one-dimensional, scalar quantity to be modified or which reflect a scalar quantity. @@ -73,6 +73,6 @@ class Value(BaseProxy): minimumValue = property(fget=get_minimumValue, fset=set_minimumValue, doc=_minimumValueDoc) # Register the accessible class with the factory. -accessible_factory.register_accessible_class(interfaces.ATSPI_VALUE, Value) +accessible_factory.register_accessible_class(ATSPI_VALUE, Value) #END---------------------------------------------------------------------------- diff --git a/registryd/Makefile.am b/registryd/Makefile.am index fe657e0..19b745b 100644 --- a/registryd/Makefile.am +++ b/registryd/Makefile.am @@ -4,7 +4,8 @@ at_spi_registryd_CFLAGS = $(DBUS_GLIB_CFLAGS) \ $(GOBJ_CFLAGS) \ $(ATK_CFLAGS) \ $(GDK_CFLAGS) \ - -I$(top_srcdir) + -I$(top_srcdir) \ + -DATSPI_INTROSPECTION_PATH=\"$(pkgdatadir)/$(DEFAULT_ATSPI_INTROSPECTION_PATH)\" at_spi_registryd_LDADD = $(DBUS_GLIB_LIBS) \ $(GOBJ_CFLAGS) \ diff --git a/registryd/deviceeventcontroller.c b/registryd/deviceeventcontroller.c index bfc8258..3f87a4e 100644 --- a/registryd/deviceeventcontroller.c +++ b/registryd/deviceeventcontroller.c @@ -53,13 +53,12 @@ #include #include -#include #include -#include -#include #include #include +#include + #include "deviceeventcontroller.h" #include "reentrant-list.h" @@ -348,7 +347,7 @@ static void emit(SpiDEController *controller, const char *name, int first_type, va_list arg; va_start(arg, first_type); - spi_dbus_emit_valist(controller->droute->bus, SPI_DBUS_PATH_DEC, SPI_DBUS_INTERFACE_DEC, name, first_type, arg); + spi_dbus_emit_valist(controller->bus, SPI_DBUS_PATH_DEC, SPI_DBUS_INTERFACE_DEC, name, first_type, arg); va_end(arg); } @@ -913,7 +912,7 @@ spi_controller_register_device_listener (SpiDEController *controller, controller->key_listeners = g_list_prepend (controller->key_listeners, key_listener); - spi_dbus_add_disconnect_match (controller->droute->bus, key_listener->listener.bus_name); + spi_dbus_add_disconnect_match (controller->bus, key_listener->listener.bus_name); if (key_listener->mode->global) { return spi_controller_register_global_keygrabs (controller, key_listener); @@ -923,7 +922,7 @@ spi_controller_register_device_listener (SpiDEController *controller, break; case SPI_DEVICE_TYPE_MOUSE: controller->mouse_listeners = g_list_prepend (controller->mouse_listeners, listener); - spi_dbus_add_disconnect_match (controller->droute->bus, listener->bus_name); + spi_dbus_add_disconnect_match (controller->bus, listener->bus_name); break; default: break; @@ -946,7 +945,7 @@ Accessibility_DeviceEventListener_notifyEvent(SpiDEController *controller, { // TODO: Evaluate performance: perhaps rework this whole architecture // to avoid blocking calls - DBusMessage *reply = dbus_connection_send_with_reply_and_block(controller->droute->bus, message, 1000, &error); + DBusMessage *reply = dbus_connection_send_with_reply_and_block(controller->bus, message, 1000, &error); if (reply) { DBusError error; @@ -1915,7 +1914,7 @@ spi_controller_deregister_device_listener (SpiDEController *controlle { RemoveListenerClosure ctx; - ctx.bus = controller->droute->bus; + ctx.bus = controller->bus; ctx.listener = listener; spi_re_entrant_list_foreach (&controller->mouse_listeners, @@ -1928,7 +1927,7 @@ spi_deregister_controller_key_listener (SpiDEController *controller, { RemoveListenerClosure ctx; - ctx.bus = controller->droute->bus; + ctx.bus = controller->bus; ctx.listener = (DEControllerListener *) key_listener; /* special case, copy keyset from existing controller list entry */ @@ -2687,36 +2686,6 @@ static void wait_for_release_event (XEvent *event, check_release_handler = g_timeout_add (CHECK_RELEASE_DELAY, check_release, &pressed_event); } -static DBusMessage * -impl_introspect (DBusConnection *bus, DBusMessage *message, - void *user_data) -{ - const char *path; - GString *output; - char *final; - - DBusMessage *reply; - - path = dbus_message_get_path(message); - - output = g_string_new(spi_introspection_header); - - g_string_append_printf(output, spi_introspection_node_element, path); - - spi_append_interface(output, SPI_DBUS_INTERFACE_DEC); - - g_string_append(output, spi_introspection_footer); - final = g_string_free(output, FALSE); - - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - dbus_message_append_args(reply, DBUS_TYPE_STRING, &final, - DBUS_TYPE_INVALID); - - g_free(final); - return reply; -} - static DRouteMethod dev_methods[] = { { impl_register_keystroke_listener, "registerKeystrokeListener" }, @@ -2730,27 +2699,23 @@ static DRouteMethod dev_methods[] = { NULL, NULL } }; -static DRouteMethod intro_methods[] = { - {impl_introspect, "Introspect"}, - {NULL, NULL} -}; - SpiDEController * -spi_registry_dec_new (SpiRegistry *reg, DRouteData *droute) +spi_registry_dec_new (SpiRegistry *reg, DBusConnection *bus, DRouteContext *droute) { SpiDEController *dec = g_object_new (SPI_DEVICE_EVENT_CONTROLLER_TYPE, NULL); + DRoutePath *path; dec->registry = g_object_ref (reg); - dec->droute = droute; - - droute_add_interface (droute, - SPI_DBUS_INTERFACE_DEC, - dev_methods, - NULL, NULL, NULL); - droute_add_interface (droute, - "org.freedesktop.DBus.Introspectable", - intro_methods, - NULL, NULL, NULL); + dec->bus = bus; + + path = droute_add_one (droute, + "/org/freedesktop/atspi/registry/deviceeventcontroller", + dec); + + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_DEC, + dev_methods, + NULL); spi_dec_init_mouse_listener (dec); /* TODO: kill mouse listener on finalize */ diff --git a/registryd/deviceeventcontroller.h b/registryd/deviceeventcontroller.h index c42fe24..fb00a37 100644 --- a/registryd/deviceeventcontroller.h +++ b/registryd/deviceeventcontroller.h @@ -43,13 +43,12 @@ G_BEGIN_DECLS struct _SpiDEController { GObject parent; - - SpiRegistry *registry; - DRouteData *droute; - GList *key_listeners; - GList *mouse_listeners; - GList *keygrabs_list; - Display *xevie_display; + DBusConnection *bus; + SpiRegistry *registry; + GList *key_listeners; + GList *mouse_listeners; + GList *keygrabs_list; + Display *xevie_display; }; typedef struct { @@ -57,7 +56,9 @@ typedef struct { } SpiDEControllerClass; GType spi_device_event_controller_get_type (void); -SpiDEController *spi_device_event_controller_new (SpiRegistry *registry); +SpiDEController *spi_device_event_controller_new (SpiRegistry *registry, + DBusConnection *bus, + DRouteContext *droute); void spi_remove_device_listeners (SpiDEController *controller, const char *bus_name); diff --git a/registryd/registry-main.c b/registryd/registry-main.c index 4559fd7..3b738af 100644 --- a/registryd/registry-main.c +++ b/registryd/registry-main.c @@ -32,6 +32,10 @@ #include "registry.h" #include "deviceeventcontroller.h" +#if !defined ATSPI_INTROSPECTION_PATH + #error "No introspection XML directory defined" +#endif + static gchar *dbus_name = NULL; static GOptionEntry optentries[] = @@ -40,19 +44,13 @@ static GOptionEntry optentries[] = {NULL} }; -static DBusObjectPathVTable droute_vtable = -{ - NULL, - &droute_message, - NULL, NULL, NULL, NULL -}; - int main (int argc, char **argv) { SpiRegistry *registry; SpiDEController *dec; - DRouteData droute; + DRouteContext *droute; + gchar *introspection_directory; GMainLoop *mainloop; DBusConnection *bus; @@ -80,7 +78,6 @@ main (int argc, char **argv) dbus_error_init (&error); bus = dbus_bus_get(DBUS_BUS_SESSION, &error); - droute.bus = bus; if (!bus) { g_warning("Couldn't connect to dbus: %s\n", error.message); @@ -99,20 +96,16 @@ main (int argc, char **argv) g_print ("SpiRegistry daemon is running with well-known name - %s\n", dbus_name); } + /* Get D-Bus introspection directory */ + introspection_directory = (char *) g_getenv("ATSPI_INTROSPECTION_PATH"); + if (introspection_directory == NULL) + introspection_directory = ATSPI_INTROSPECTION_PATH; + /* Set up D-Route for use by the dec */ - droute.interfaces = NULL; - if (!dbus_connection_register_object_path (droute.bus, - "/org/freedesktop/atspi/registry/deviceeventcontroller", - &droute_vtable, - &droute)) - { - g_error("AT-SPI Registry daemon: Couldn't register droute.\n"); - return 0; - } + droute = droute_new (bus, introspection_directory); - registry = spi_registry_new (bus); - dec = spi_registry_dec_new (registry, &droute); - droute.user_data = dec; + registry = spi_registry_new (bus, droute); + dec = spi_registry_dec_new (registry, bus, droute); g_main_loop_run (mainloop); return 0; diff --git a/registryd/registry.c b/registryd/registry.c index 60b77a0..51aaa4d 100644 --- a/registryd/registry.c +++ b/registryd/registry.c @@ -230,39 +230,6 @@ handle_disconnection (DBusConnection *bus, DBusMessage *message, void *user_data /*---------------------------------------------------------------------------*/ static DBusHandlerResult -message_handler (DBusConnection *bus, DBusMessage *message, void *user_data) -{ - DBusMessage *reply = NULL; - guint res = DBUS_HANDLER_RESULT_HANDLED; - - int mtype; - const char *itf; - const char *name; - - mtype = dbus_message_get_type (message); - itf = dbus_message_get_interface (message); - name = dbus_message_get_member (message); - - if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "getApplications")) - reply = impl_getApplications (bus, message, user_data); - else if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "registerApplication")) - impl_registerApplication (bus, message, user_data); - else if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "deregisterApplication")) - impl_deregisterApplication (bus, message, user_data); - else - res = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - if (reply) - { - dbus_connection_send (bus, reply, NULL); - dbus_message_unref (reply); - } - return res; -} - -/*---------------------------------------------------------------------------*/ - -static DBusHandlerResult signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data) { SpiRegistry *registry = SPI_REGISTRY (user_data); @@ -283,25 +250,34 @@ signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data) static gchar *app_sig_match_name_owner = "type='signal', interface='org.freedesktop.DBus', member='NameOwnerChanged'"; -static DBusObjectPathVTable reg_vtable = +static DRouteMethod dev_methods[] = { - NULL, - &message_handler, - NULL, NULL, NULL, NULL + { impl_getApplications, "getApplications" }, + { impl_registerApplication, "registerApplication" }, + { impl_deregisterApplication, "deregisterApplication" }, + { NULL, NULL } }; SpiRegistry * -spi_registry_new (DBusConnection *bus) +spi_registry_new (DBusConnection *bus, DRouteContext *droute) { SpiRegistry *reg = g_object_new (SPI_REGISTRY_TYPE, NULL); + DRoutePath *path; reg->bus = bus; - dbus_connection_register_object_path(bus, SPI_DBUS_PATH_REGISTRY, ®_vtable, reg); - dbus_bus_add_match (bus, app_sig_match_name_owner, NULL); dbus_connection_add_filter (bus, signal_filter, reg, NULL); + path = droute_add_one (droute, + SPI_DBUS_PATH_REGISTRY, + reg); + + droute_path_add_interface (path, + SPI_DBUS_INTERFACE_DEC, + dev_methods, + NULL); + return reg; } diff --git a/registryd/registry.h b/registryd/registry.h index 87f6bed..68ec403 100644 --- a/registryd/registry.h +++ b/registryd/registry.h @@ -27,6 +27,8 @@ #include #include +#include + typedef struct _SpiRegistry SpiRegistry; typedef struct _SpiRegistryClass SpiRegistryClass; @@ -50,7 +52,8 @@ struct _SpiRegistryClass { }; GType spi_registry_get_type (void); -SpiRegistry *spi_registry_new (DBusConnection *bus); +SpiRegistry *spi_registry_new (DBusConnection *bus, + DRouteContext *droute); G_END_DECLS -- 2.7.4