X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Ftree-adaptor.c;h=89a065f6eba95e19a1032a13af59168a3aaec9ba;hb=e9d9fedb0c914825a3ccd8b390deb52a93800415;hp=a4411d0fd4ece43b28b0d2409b133f2de3749111;hpb=c5f078cefdda19b9b4a5e450c9e96855d2f12893;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/tree-adaptor.c b/atk-adaptor/tree-adaptor.c index a4411d0..89a065f 100644 --- a/atk-adaptor/tree-adaptor.c +++ b/atk-adaptor/tree-adaptor.c @@ -30,251 +30,92 @@ #include "bridge.h" #include "accessible-register.h" -#include "spi-common/spi-dbus.h" +#include "accessible-marshaller.h" +#include "common/spi-dbus.h" /*---------------------------------------------------------------------------*/ +/* For use as a GHFunc */ static void -append_atk_object_interfaces (AtkObject *object, DBusMessageIter *iter) +append_accessible_hf (gpointer key, gpointer obj_data, gpointer data) { - 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); - } + /* Make sure it isn't a hyperlink */ + if (ATK_IS_OBJECT (obj_data)) + spi_atk_append_accessible (ATK_OBJECT (obj_data), data); } /*---------------------------------------------------------------------------*/ -static const char *dumm = "/APath/1"; - - -/* - * Marshals the given AtkObject into the provided D-Bus iterator. - * - * The object is marshalled including all its client side cache data. - * The format of the structure is (ooaoassusau). - * This is used in the updateTree signal and the getTree method - * of the org.freedesktop.atspi.Tree interface. - */ -static void -append_accessible(gpointer obj_data, gpointer iter) +void +spi_emit_cache_removal (guint ref, DBusConnection * bus) { - AtkObject *obj; - DBusMessageIter *iter_array; - DBusMessageIter iter_struct, iter_sub_array; - dbus_int32_t states [2]; - int count; - - const char *name, *desc; - int i; - dbus_uint32_t role; - GSList *l; - - obj = ATK_OBJECT(obj_data); - iter_array = (DBusMessageIter *) iter; + DBusMessage *message; - dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct); + if ((message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", + SPI_DBUS_INTERFACE_TREE, + "RemoveAccessible"))) { - AtkObject *parent; - gchar *path, *path_parent; - - path = atk_dbus_object_to_path (obj); - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path); - - parent = atk_object_get_parent(obj); - if (parent == NULL) - path_parent = g_strdup("/"); - else - path_parent = atk_dbus_object_to_path (parent); - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &path_parent); - g_free(path_parent); - - dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "o", &iter_sub_array); - { - gint childcount, i; + DBusMessageIter iter; + gchar *path; - childcount = atk_object_get_n_accessible_children (obj); - for (i = 0; i < childcount; i++) - { - AtkObject *child; - gchar *child_path; + dbus_message_iter_init_append (message, &iter); - child = atk_object_ref_accessible_child (obj, i); - child_path = atk_dbus_object_to_path (child); - g_object_unref(G_OBJECT(child)); - if (G_LIKELY (child_path)) - { - dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_OBJECT_PATH, &child_path); - } - else - { - g_critical ("AT-SPI: Child object exists in accessible tree but has not been registered"); - g_free (child_path); - } - } - } - dbus_message_iter_close_container (&iter_struct, &iter_sub_array); + path = atk_dbus_ref_to_path (ref); + dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &path); - dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "s", &iter_sub_array); - append_atk_object_interfaces (obj, &iter_sub_array); - dbus_message_iter_close_container (&iter_struct, &iter_sub_array); + dbus_connection_send (bus, message, NULL); - name = atk_object_get_name (obj); - if (!name) - name = ""; - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name); - - role = spi_accessible_role_from_atk_role (atk_object_get_role (obj)); - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_UINT32, &role); - - desc = atk_object_get_description (obj); - if (!desc) - desc = ""; - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &desc); - - g_free(path); + dbus_message_unref (message); } - 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++) - dbus_message_iter_append_basic (&iter_sub_array, DBUS_TYPE_UINT32, &states[count]); - dbus_message_iter_close_container (&iter_struct, &iter_sub_array); - dbus_message_iter_close_container (iter_array, &iter_struct); -} - -/* For use as a GHFunc */ -static void -append_accessible_hf (gpointer key, gpointer obj_data, gpointer iter) -{ - append_accessible (obj_data, iter); } -/*---------------------------------------------------------------------------*/ - void -spi_emit_cache_removal (guint ref, DBusConnection *bus) +spi_emit_cache_update (AtkObject * accessible, DBusConnection * bus) { DBusMessage *message; - DBusMessageIter iter; - gchar *path; - - message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", SPI_DBUS_INTERFACE_TREE, "removeAccessible"); - - dbus_message_iter_init_append (message, &iter); - - path = atk_dbus_ref_to_path (ref); - dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &path); - dbus_connection_send(bus, message, NULL); -} + if ((message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", + SPI_DBUS_INTERFACE_TREE, + "UpdateAccessible"))) + { + DBusMessageIter iter; -void -spi_emit_cache_update (const GList *accessibles, DBusConnection *bus) -{ - DBusMessage *message; - DBusMessageIter iter; - DBusMessageIter iter_array; - message = dbus_message_new_signal ("/org/freedesktop/atspi/tree", SPI_DBUS_INTERFACE_TREE, "updateAccessible"); + dbus_message_iter_init_append (message, &iter); + spi_atk_append_accessible (accessible, &iter); - dbus_message_iter_init_append (message, &iter); - dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(ooaoassusau)", &iter_array); - g_list_foreach ((GList *)accessibles, append_accessible, &iter_array); - dbus_message_iter_close_container(&iter, &iter_array); + dbus_connection_send (bus, message, NULL); - dbus_connection_send(bus, message, NULL); + dbus_message_unref (message); + } } /*---------------------------------------------------------------------------*/ static DBusMessage * -impl_getRoot (DBusConnection *bus, DBusMessage *message, void *user_data) +impl_GetRoot (DBusConnection * bus, DBusMessage * message, void *user_data) { - AtkObject *root = atk_get_root(); + AtkObject *root = atk_get_root (); char *path; DBusMessage *reply; + gchar *errmsg; if (!root) - return spi_dbus_general_error (message); - path = atk_dbus_object_to_path (root); + { + reply = dbus_message_new_error (message, + DBUS_ERROR_FAILED, + "No root accessible available"); + } + path = atk_dbus_object_to_path (root, FALSE); if (!path) - return spi_dbus_general_error (message); + { + reply = dbus_message_new_error (message, + DBUS_ERROR_FAILED, + "No root accessible available"); + } reply = dbus_message_new_method_return (message); - dbus_message_append_args (reply, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID); + dbus_message_append_args (reply, DBUS_TYPE_OBJECT_PATH, &path, + DBUS_TYPE_INVALID); g_free (path); return reply; } @@ -282,7 +123,7 @@ impl_getRoot (DBusConnection *bus, DBusMessage *message, void *user_data) /*---------------------------------------------------------------------------*/ static DBusMessage * -impl_getTree (DBusConnection *bus, DBusMessage *message, void *user_data) +impl_GetTree (DBusConnection * bus, DBusMessage * message, void *user_data) { DBusMessage *reply; DBusMessageIter iter, iter_array; @@ -290,27 +131,25 @@ impl_getTree (DBusConnection *bus, DBusMessage *message, void *user_data) reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); - dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(ooaoassusau)", &iter_array); - atk_dbus_foreach_registered(append_accessible_hf, &iter_array); - dbus_message_iter_close_container(&iter, &iter_array); + dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, + "(o(so)a(so)assusau)", &iter_array); + atk_dbus_foreach_registered (append_accessible_hf, &iter_array); + dbus_message_iter_close_container (&iter, &iter_array); return reply; } /*---------------------------------------------------------------------------*/ static DRouteMethod methods[] = { - {impl_getRoot, "getRoot"}, - {impl_getTree, "getTree"}, + {impl_GetRoot, "GetRoot"}, + {impl_GetTree, "GetTree"}, {NULL, NULL} }; void -spi_initialize_tree (DRoutePath *path) +spi_initialize_tree (DRoutePath * path) { - droute_path_add_interface (path, - SPI_DBUS_INTERFACE_TREE, - methods, - NULL); + droute_path_add_interface (path, SPI_DBUS_INTERFACE_TREE, methods, NULL); }; /*END------------------------------------------------------------------------*/