X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-adaptor%2Fadaptors%2Fcollection-adaptor.c;h=918addf2676d8ad7f0ef615dfa944b48514eec13;hb=01c226b1c44a797a5ac77549c34ee0523d0b532b;hp=30373fd643830d7d28e9e31d3de51eaefe4556d3;hpb=41506b34b47d6401430286eeef9ee29b6e394fb2;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-adaptor/adaptors/collection-adaptor.c b/atk-adaptor/adaptors/collection-adaptor.c index 30373fd..918addf 100644 --- a/atk-adaptor/adaptors/collection-adaptor.c +++ b/atk-adaptor/adaptors/collection-adaptor.c @@ -27,9 +27,9 @@ #include #include -#include "common/bitarray.h" -#include "common/spi-dbus.h" -#include "common/spi-stateset.h" +#include "bitarray.h" +#include "spi-dbus.h" +#include "accessible-stateset.h" #include "accessible-register.h" #include "object.h" @@ -39,13 +39,13 @@ typedef struct _MatchRulePrivate MatchRulePrivate; struct _MatchRulePrivate { gint *states; - Accessibility_Collection_MatchType statematchtype; + AtspiCollectionMatchType statematchtype; AtkAttributeSet *attributes; - Accessibility_Collection_MatchType attributematchtype; + AtspiCollectionMatchType attributematchtype; gint *roles; - Accessibility_Collection_MatchType rolematchtype; + AtspiCollectionMatchType rolematchtype; gchar **ifaces; - Accessibility_Collection_MatchType interfacematchtype; + AtspiCollectionMatchType interfacematchtype; gboolean invert; }; @@ -86,7 +86,7 @@ match_states_all_p (AtkObject * child, gint * set) gint i; gboolean ret = TRUE; - if (set == NULL) + if (set == NULL || set[0] == BITARRAY_SEQ_TERM) return TRUE; chs = atk_object_ref_state_set (child); @@ -112,14 +112,14 @@ match_states_any_p (AtkObject * child, gint * set) gint i; gboolean ret = FALSE; - if (set == NULL) + if (set == NULL || set[0] == BITARRAY_SEQ_TERM) return TRUE; chs = atk_object_ref_state_set (child); for (i = 0; set[i] != BITARRAY_SEQ_TERM; i++) { - if (!atk_state_set_contains_state (chs, set[i])) + if (atk_state_set_contains_state (chs, set[i])) { ret = TRUE; break; @@ -137,7 +137,7 @@ match_states_none_p (AtkObject * child, gint * set) gint i; gboolean ret = TRUE; - if (set == NULL) + if (set == NULL || set[0] == BITARRAY_SEQ_TERM) return TRUE; chs = atk_object_ref_state_set (child); @@ -161,17 +161,17 @@ match_states_lookup (AtkObject * child, MatchRulePrivate * mrp) { switch (mrp->statematchtype) { - case Accessibility_Collection_MATCH_ALL: + case ATSPI_Collection_MATCH_ALL: if (match_states_all_p (child, mrp->states)) return TRUE; break; - case Accessibility_Collection_MATCH_ANY: + case ATSPI_Collection_MATCH_ANY: if (match_states_any_p (child, mrp->states)) return TRUE; break; - case Accessibility_Collection_MATCH_NONE: + case ATSPI_Collection_MATCH_NONE: if (match_states_none_p (child, mrp->states)) return TRUE; break; @@ -202,7 +202,7 @@ match_roles_all_p (AtkObject * child, gint * roles) static gboolean match_roles_any_p (AtkObject * child, gint * roles) { - Accessibility_Role role; + AtspiRole role; int i; if (roles == NULL || roles[0] == BITARRAY_SEQ_TERM) @@ -240,17 +240,17 @@ match_roles_lookup (AtkObject * child, MatchRulePrivate * mrp) { switch (mrp->rolematchtype) { - case Accessibility_Collection_MATCH_ALL: + case ATSPI_Collection_MATCH_ALL: if (match_roles_all_p (child, mrp->roles)) return TRUE; break; - case Accessibility_Collection_MATCH_ANY: + case ATSPI_Collection_MATCH_ANY: if (match_roles_any_p (child, mrp->roles)) return TRUE; break; - case Accessibility_Collection_MATCH_NONE: + case ATSPI_Collection_MATCH_NONE: if (match_roles_none_p (child, mrp->roles)) return TRUE; break; @@ -313,17 +313,17 @@ match_interfaces_lookup (AtkObject * child, MatchRulePrivate * mrp) switch (mrp->interfacematchtype) { - case Accessibility_Collection_MATCH_ALL: + case ATSPI_Collection_MATCH_ALL: if (match_interfaces_all_p (child, mrp->ifaces)) return TRUE; break; - case Accessibility_Collection_MATCH_ANY: + case ATSPI_Collection_MATCH_ANY: if (match_interfaces_any_p (child, mrp->ifaces)) return TRUE; break; - case Accessibility_Collection_MATCH_NONE: + case ATSPI_Collection_MATCH_NONE: if (match_interfaces_none_p (child, mrp->ifaces)) return TRUE; break; @@ -397,7 +397,7 @@ match_attributes_any_p (AtkObject * child, AtkAttributeSet * attributes) AtkAttribute *attr = g_slist_nth_data (attributes, i); for (k = 0; k < oa_length; k++) { - AtkAttribute *oa_attr = g_slist_nth_data (attributes, i); + AtkAttribute *oa_attr = g_slist_nth_data (oa, k); if (!g_ascii_strcasecmp (oa_attr->name, attr->name) && !g_ascii_strcasecmp (oa_attr->value, attr->value)) { @@ -449,17 +449,17 @@ match_attributes_lookup (AtkObject * child, MatchRulePrivate * mrp) switch (mrp->attributematchtype) { - case Accessibility_Collection_MATCH_ALL: + case ATSPI_Collection_MATCH_ALL: if (match_attributes_all_p (child, mrp->attributes)) return TRUE; break; - case Accessibility_Collection_MATCH_ANY: + case ATSPI_Collection_MATCH_ANY: if (match_attributes_any_p (child, mrp->attributes)) return TRUE; break; - case Accessibility_Collection_MATCH_NONE: + case ATSPI_Collection_MATCH_NONE: if (match_attributes_none_p (child, mrp->attributes)) return TRUE; break; @@ -538,7 +538,8 @@ sort_order_rev_canonical (MatchRulePrivate * mrp, GList * ls, /* Add to the list if it matches */ if (flag && match_interfaces_lookup (obj, mrp) && match_states_lookup (obj, mrp) - && match_roles_lookup (obj, mrp) && match_attributes_lookup (obj, mrp)) + && match_roles_lookup (obj, mrp) && match_attributes_lookup (obj, mrp) + && (max == 0 || kount < max)) { ls = g_list_append (ls, obj); kount++; @@ -551,7 +552,7 @@ sort_order_rev_canonical (MatchRulePrivate * mrp, GList * ls, indexinparent = atk_object_get_index_in_parent (obj); parent = atk_object_get_parent (obj); - if (indexinparent > 0) + if (indexinparent > 0 && (max == 0 || kount < max)) { /* there are still some siblings to visit so get the previous sibling and get it's last descendant. @@ -571,7 +572,7 @@ sort_order_rev_canonical (MatchRulePrivate * mrp, GList * ls, kount = sort_order_rev_canonical (mrp, ls, kount, max, nextobj, TRUE, pobj); } - else + else if (max == 0 || kount < max) { /* no more siblings so next node must be the parent */ kount = sort_order_rev_canonical (mrp, ls, kount, max, @@ -582,7 +583,7 @@ sort_order_rev_canonical (MatchRulePrivate * mrp, GList * ls, } static int -query_exec (MatchRulePrivate * mrp, Accessibility_Collection_SortOrder sortby, +query_exec (MatchRulePrivate * mrp, AtspiCollectionSortOrder sortby, GList * ls, gint kount, gint max, AtkObject * obj, glong index, gboolean flag, @@ -590,11 +591,11 @@ query_exec (MatchRulePrivate * mrp, Accessibility_Collection_SortOrder sortby, { switch (sortby) { - case Accessibility_Collection_SORT_ORDER_CANONICAL: + case ATSPI_Collection_SORT_ORDER_CANONICAL: kount = sort_order_canonical (mrp, ls, 0, max, obj, index, flag, pobj, recurse, traverse); break; - case Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL: + case ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL: kount = sort_order_canonical (mrp, ls, 0, max, obj, index, flag, pobj, recurse, traverse); break; @@ -608,7 +609,7 @@ query_exec (MatchRulePrivate * mrp, Accessibility_Collection_SortOrder sortby, } static gboolean -bitarray_to_seq (int *array, int array_count, int **ret) +bitarray_to_seq (dbus_uint32_t *array, int array_count, int **ret) { int out_size = 4; int out_count = 0; @@ -643,106 +644,76 @@ bitarray_to_seq (int *array, int array_count, int **ret) static dbus_bool_t read_mr (DBusMessageIter * iter, MatchRulePrivate * mrp) { - DBusMessageIter mrc, arrayc; + DBusMessageIter iter_struct, iter_array, iter_dict, iter_dict_entry; dbus_uint32_t *array; dbus_int32_t matchType; int array_count; AtkAttribute *attr; int i; - const char *str; - char *interfaces = NULL; - dbus_message_iter_recurse (iter, &mrc); - dbus_message_iter_recurse (&mrc, &arrayc); - dbus_message_iter_get_fixed_array (&arrayc, &array, &array_count); + dbus_message_iter_recurse (iter, &iter_struct); + + /* states */ + dbus_message_iter_recurse (&iter_struct, &iter_array); + dbus_message_iter_get_fixed_array (&iter_array, &array, &array_count); bitarray_to_seq (array, array_count, &mrp->states); for (i = 0; mrp->states[i] != BITARRAY_SEQ_TERM; i++) { mrp->states[i] = spi_atk_state_from_spi_state (mrp->states[i]); } - dbus_message_iter_next (&mrc); - dbus_message_iter_get_basic (&mrc, &matchType); - dbus_message_iter_next (&mrc); + dbus_message_iter_next (&iter_struct); + dbus_message_iter_get_basic (&iter_struct, &matchType); + dbus_message_iter_next (&iter_struct); mrp->statematchtype = matchType;; + /* attributes */ mrp->attributes = NULL; - if (dbus_message_iter_get_arg_type (&mrc) == DBUS_TYPE_STRING) + dbus_message_iter_recurse (&iter_struct, &iter_dict); + while (dbus_message_iter_get_arg_type (&iter_dict) != DBUS_TYPE_INVALID) { - char *str; - gchar **attributes; - gchar **pp; - dbus_message_iter_get_basic (&mrc, &str); - attributes = g_strsplit (str, "\n", -1); - for (pp = attributes; *pp; pp++) - { - str = *pp; - attr = g_new (AtkAttribute, 1); - if (attr) - { - int len = strcspn (str, ":"); - attr->name = g_strndup (str, len); - if (str[len] == ':') - { - len++; - if (str[len] == ' ') - len++; - attr->value = g_strdup (str + len); - } - else - attr->value = NULL; - mrp->attributes = g_slist_prepend (mrp->attributes, attr); - } - } - g_strfreev (attributes); + const char *key, *val; + dbus_message_iter_recurse (&iter_dict, &iter_dict_entry); + dbus_message_iter_get_basic (&iter_dict_entry, &key); + dbus_message_iter_next (&iter_dict_entry); + dbus_message_iter_get_basic (&iter_dict_entry, &val); + attr = g_new (AtkAttribute, 1); + attr->name = g_strdup (key); + attr->value = g_strdup (val); + mrp->attributes = g_slist_prepend (mrp->attributes, attr); + dbus_message_iter_next (&iter_dict); } - else - { - dbus_message_iter_recurse (&mrc, &arrayc); - while (dbus_message_iter_get_arg_type (&arrayc) != DBUS_TYPE_INVALID) - { - dbus_message_iter_get_basic (&arrayc, &str); - // TODO: remove this print - g_print ("Got attribute: %s\n", str); - attr = g_new (AtkAttribute, 1); - if (attr) - { - int len = strcspn (str, ":"); - attr->name = g_strndup (str, len); - if (str[len] == ':') - { - len++; - if (str[len] == ' ') - len++; - attr->value = g_strdup (str + len); - } - else - attr->value = NULL; - mrp->attributes = g_slist_prepend (mrp->attributes, attr); - } - dbus_message_iter_next (&arrayc); - } - } - dbus_message_iter_next (&mrc); - dbus_message_iter_get_basic (&mrc, &matchType); + dbus_message_iter_next (&iter_struct); + dbus_message_iter_get_basic (&iter_struct, &matchType); mrp->attributematchtype = matchType;; - dbus_message_iter_next (&mrc); + dbus_message_iter_next (&iter_struct); + /* Get roles and role match */ - dbus_message_iter_recurse (&mrc, &arrayc); - dbus_message_iter_get_fixed_array (&arrayc, &array, &array_count); + dbus_message_iter_recurse (&iter_struct, &iter_array); + dbus_message_iter_get_fixed_array (&iter_array, &array, &array_count); bitarray_to_seq (array, array_count, &mrp->roles); - dbus_message_iter_next (&mrc); - dbus_message_iter_get_basic (&mrc, &matchType); + dbus_message_iter_next (&iter_struct); + dbus_message_iter_get_basic (&iter_struct, &matchType); mrp->rolematchtype = matchType;; - dbus_message_iter_next (&mrc); + dbus_message_iter_next (&iter_struct); + /* Get interfaces and interface match */ - dbus_message_iter_get_basic (&mrc, &interfaces); - dbus_message_iter_next (&mrc); - mrp->ifaces = g_strsplit (interfaces, ";", 0); - dbus_message_iter_get_basic (&mrc, &matchType); + dbus_message_iter_recurse (&iter_struct, &iter_array); + mrp->ifaces = g_new0 (gchar *, 16); + i = 0; + while (i < 15 && dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID) + { + char *iface; + dbus_message_iter_get_basic (&iter_array, &iface); + mrp->ifaces [i] = g_strdup (iface); + i++; + dbus_message_iter_next (&iter_array); + } + dbus_message_iter_next (&iter_struct); + dbus_message_iter_get_basic (&iter_struct, &matchType); mrp->interfacematchtype = matchType;; - dbus_message_iter_next (&mrc); + dbus_message_iter_next (&iter_struct); /* get invert */ - dbus_message_iter_get_basic (&mrc, &mrp->invert); + dbus_message_iter_get_basic (&iter_struct, &mrp->invert); dbus_message_iter_next (iter); return TRUE; } @@ -788,30 +759,29 @@ static DBusMessage * GetMatchesFrom (DBusMessage * message, AtkObject * current_object, MatchRulePrivate * mrp, - const Accessibility_Collection_SortOrder sortby, + const AtspiCollectionSortOrder sortby, const dbus_bool_t isrestrict, dbus_int32_t count, const dbus_bool_t traverse) { GList *ls = NULL; AtkObject *parent; glong index = atk_object_get_index_in_parent (current_object); - gint kount = 0; ls = g_list_append (ls, current_object); if (!isrestrict) { parent = atk_object_get_parent (current_object); - kount = query_exec (mrp, sortby, ls, 0, count, parent, index, - FALSE, NULL, TRUE, traverse); + query_exec (mrp, sortby, ls, 0, count, parent, index, + FALSE, NULL, TRUE, traverse); } else - kount = query_exec (mrp, sortby, ls, 0, count, - current_object, 0, FALSE, NULL, TRUE, traverse); + query_exec (mrp, sortby, ls, 0, count, + current_object, 0, FALSE, NULL, TRUE, traverse); ls = g_list_remove (ls, ls->data); - if (sortby == Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL) + if (sortby == ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL) ls = g_list_reverse (ls); free_mrp_data (mrp); @@ -844,7 +814,7 @@ inorder (AtkObject * collection, MatchRulePrivate * mrp, obj = parent; } - if (kount < max) + if (max == 0 || kount < max) { kount = sort_order_canonical (mrp, ls, kount, max, obj, i + 1, TRUE, FALSE, TRUE, TRUE); @@ -861,24 +831,23 @@ static DBusMessage * GetMatchesInOrder (DBusMessage * message, AtkObject * current_object, MatchRulePrivate * mrp, - const Accessibility_Collection_SortOrder sortby, + const AtspiCollectionSortOrder sortby, const dbus_bool_t recurse, dbus_int32_t count, const dbus_bool_t traverse) { GList *ls = NULL; AtkObject *obj; - gint kount = 0; ls = g_list_append (ls, current_object); obj = ATK_OBJECT(spi_register_path_to_object (spi_global_register, dbus_message_get_path (message))); - kount = inorder (obj, mrp, ls, 0, count, - current_object, TRUE, NULL, traverse); + inorder (obj, mrp, ls, 0, count, + current_object, TRUE, NULL, traverse); ls = g_list_remove (ls, ls->data); - if (sortby == Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL) + if (sortby == ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL) ls = g_list_reverse (ls); free_mrp_data (mrp); @@ -894,23 +863,22 @@ static DBusMessage * GetMatchesInBackOrder (DBusMessage * message, AtkObject * current_object, MatchRulePrivate * mrp, - const Accessibility_Collection_SortOrder sortby, + const AtspiCollectionSortOrder sortby, dbus_int32_t count) { GList *ls = NULL; AtkObject *collection; - gint kount = 0; ls = g_list_append (ls, current_object); collection = ATK_OBJECT(spi_register_path_to_object (spi_global_register, dbus_message_get_path (message))); - kount = sort_order_rev_canonical (mrp, ls, 0, count, current_object, - FALSE, collection); + sort_order_rev_canonical (mrp, ls, 0, count, current_object, + FALSE, collection); ls = g_list_remove (ls, ls->data); - if (sortby == Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL) + if (sortby == ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL) ls = g_list_reverse (ls); free_mrp_data (mrp); @@ -921,33 +889,32 @@ static DBusMessage * GetMatchesTo (DBusMessage * message, AtkObject * current_object, MatchRulePrivate * mrp, - const Accessibility_Collection_SortOrder sortby, + const AtspiCollectionSortOrder sortby, const dbus_bool_t recurse, const dbus_bool_t isrestrict, dbus_int32_t count, const dbus_bool_t traverse) { GList *ls = NULL; AtkObject *obj; - gint kount = 0; ls = g_list_append (ls, current_object); if (recurse) { obj = ATK_OBJECT (atk_object_get_parent (current_object)); - kount = query_exec (mrp, sortby, ls, 0, count, - obj, 0, TRUE, current_object, TRUE, traverse); + query_exec (mrp, sortby, ls, 0, count, + obj, 0, TRUE, current_object, TRUE, traverse); } else { obj = ATK_OBJECT (spi_register_path_to_object (spi_global_register, dbus_message_get_path (message))); - kount = query_exec (mrp, sortby, ls, 0, count, - obj, 0, TRUE, current_object, TRUE, traverse); + query_exec (mrp, sortby, ls, 0, count, + obj, 0, TRUE, current_object, TRUE, traverse); } ls = g_list_remove (ls, ls->data); - if (sortby != Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL) + if (sortby != ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL) ls = g_list_reverse (ls); free_mrp_data (mrp); @@ -966,12 +933,10 @@ impl_GetMatchesFrom (DBusConnection * bus, DBusMessage * message, dbus_uint32_t tree; dbus_int32_t count; dbus_bool_t traverse; - GList *ls = NULL; const char *signature; signature = dbus_message_get_signature (message); - if (strcmp (signature, "o(aiisiaiisib)uuib") != 0 && - strcmp (signature, "o(aii(as)iaiisib)uuib") != 0) + if (strcmp (signature, "o(aiia{ss}iaiiasib)uuib") != 0) { return droute_invalid_arguments_error (message); } @@ -1000,15 +965,15 @@ impl_GetMatchesFrom (DBusConnection * bus, DBusMessage * message, switch (tree) { - case Accessibility_Collection_TREE_RESTRICT_CHILDREN: + case ATSPI_Collection_TREE_RESTRICT_CHILDREN: return GetMatchesFrom (message, current_object, &rule, sortby, TRUE, count, traverse); break; - case Accessibility_Collection_TREE_RESTRICT_SIBLING: + case ATSPI_Collection_TREE_RESTRICT_SIBLING: return GetMatchesFrom (message, current_object, &rule, sortby, FALSE, count, traverse); break; - case Accessibility_Collection_TREE_INORDER: + case ATSPI_Collection_TREE_INORDER: return GetMatchesInOrder (message, current_object, &rule, sortby, TRUE, count, traverse); break; @@ -1030,12 +995,10 @@ impl_GetMatchesTo (DBusConnection * bus, DBusMessage * message, dbus_bool_t recurse; dbus_int32_t count; dbus_bool_t traverse; - GList *ls = NULL; const char *signature; signature = dbus_message_get_signature (message); - if (strcmp (signature, "o(aiisiaiisib)uubib") != 0 && - strcmp (signature, "o(aii(as)iaiisib)uubib") != 0) + if (strcmp (signature, "o(aiia{ss}iaiiasib)uubib") != 0) { return droute_invalid_arguments_error (message); } @@ -1066,15 +1029,15 @@ impl_GetMatchesTo (DBusConnection * bus, DBusMessage * message, switch (tree) { - case Accessibility_Collection_TREE_RESTRICT_CHILDREN: + case ATSPI_Collection_TREE_RESTRICT_CHILDREN: return GetMatchesTo (message, current_object, &rule, sortby, recurse, TRUE, count, traverse); break; - case Accessibility_Collection_TREE_RESTRICT_SIBLING: + case ATSPI_Collection_TREE_RESTRICT_SIBLING: return GetMatchesTo (message, current_object, &rule, sortby, recurse, FALSE, count, traverse); break; - case Accessibility_Collection_TREE_INORDER: + case ATSPI_Collection_TREE_INORDER: return GetMatchesInBackOrder (message, current_object, &rule, sortby, count); break; @@ -1096,8 +1059,7 @@ impl_GetMatches (DBusConnection * bus, DBusMessage * message, void *user_data) const char *signature; signature = dbus_message_get_signature (message); - if (strcmp (signature, "(aiisiaiisib)uib") != 0 && - strcmp (signature, "(aii(as)iaiisib)uib") != 0) + if (strcmp (signature, "(aiia{ss}iaiiasib)uib") != 0) { return droute_invalid_arguments_error (message); } @@ -1118,7 +1080,7 @@ impl_GetMatches (DBusConnection * bus, DBusMessage * message, void *user_data) obj, 0, TRUE, NULL, TRUE, traverse); ls = g_list_remove (ls, ls->data); - if (sortby == Accessibility_Collection_SORT_ORDER_REVERSE_CANONICAL) + if (sortby == ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL) ls = g_list_reverse (ls); free_mrp_data (&rule); return return_and_free_list (message, ls); @@ -1135,5 +1097,5 @@ void spi_initialize_collection (DRoutePath * path) { droute_path_add_interface (path, - SPI_DBUS_INTERFACE_COLLECTION, spi_org_freedesktop_atspi_Collection, methods, NULL); + ATSPI_DBUS_INTERFACE_COLLECTION, spi_org_a11y_atspi_Collection, methods, NULL); };