X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cspi%2Fspi_accessible.c;h=958c20cad1a4cbfe9342277f7772353cf02d63d3;hb=0724cea984b691fdc60a020b237828e9ef018cd7;hp=c2acdfe9d7fcb3f005c6c3af2ebbd8f3263af0a7;hpb=b221ba1183f4089e27b93cc6e43c7c1d94024a29;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/cspi/spi_accessible.c b/cspi/spi_accessible.c index c2acdfe..958c20c 100644 --- a/cspi/spi_accessible.c +++ b/cspi/spi_accessible.c @@ -22,7 +22,7 @@ */ #include /* for malloc */ -#include +#include "spi-stateset.h" #include static const char *role_names [] = @@ -243,17 +243,19 @@ cspi_role_from_spi_role (Accessibility_Role role) } AccessibleAttributeSet * -_cspi_attribute_set_from_sequence (const Accessibility_AttributeSet *seq) +_cspi_attribute_set_from_sequence (const GArray *seq) { AccessibleAttributeSet *set = g_new0 (AccessibleAttributeSet, 1); int i; - set->len = seq->_length; + set->len = seq->len; set->attributes = g_new0 (char *, set->len); for (i = 0; i < set->len; ++i) { - set->attributes[i] = g_strdup (seq->_buffer [i]); + set->attributes[i] = g_array_index (seq, char *, i); } + + g_array_free (seq, TRUE); return set; } @@ -271,11 +273,11 @@ AccessibleRole_getName (AccessibleRole role) { if (role < MAX_ROLES && role_names [(int) role]) { - return CORBA_string_dup (role_names [(int) role]); + return g_strdup (role_names [(int) role]); } else { - return CORBA_string_dup (""); + return g_strdup (""); } } @@ -315,15 +317,8 @@ Accessible_unref (Accessible *obj) char * Accessible_getName (Accessible *obj) { - char *retval; - cspi_return_val_if_fail (obj != NULL, NULL); - - retval = Accessibility_Accessible__get_name (CSPI_OBJREF (obj), cspi_ev ()); - - cspi_return_val_if_ev ("getName", NULL); - - return retval; + return g_strdup (obj->name); } /** @@ -338,16 +333,9 @@ Accessible_getName (Accessible *obj) char * Accessible_getDescription (Accessible *obj) { - char *retval; - cspi_return_val_if_fail (obj != NULL, NULL); - retval = Accessibility_Accessible__get_description (CSPI_OBJREF (obj), - cspi_ev ()); - - cspi_return_val_if_ev ("getDescription", NULL); - - return retval; + return g_strdup (obj->description); } /** @@ -363,17 +351,9 @@ Accessible_getDescription (Accessible *obj) Accessible * Accessible_getParent (Accessible *obj) { - Accessible *retval; - cspi_return_val_if_fail (obj != NULL, NULL); - retval = cspi_object_add ( - Accessibility_Accessible__get_parent (CSPI_OBJREF (obj), - cspi_ev ())); - - cspi_return_val_if_ev ("getParent", NULL); - - return retval; + return cspi_object_add (obj->parent); } /** @@ -389,16 +369,9 @@ Accessible_getParent (Accessible *obj) long Accessible_getChildCount (Accessible *obj) { - long retval; - cspi_return_val_if_fail (obj != NULL, -1); - retval = Accessibility_Accessible__get_childCount (CSPI_OBJREF (obj), - cspi_ev ()); - - cspi_return_val_if_ev ("getChildCount", -1); - - return retval; + return g_list_length (obj->children); } /** @@ -415,16 +388,12 @@ Accessible * Accessible_getChildAtIndex (Accessible *obj, long int childIndex) { - Accessible *retval; + Accessible *child; cspi_return_val_if_fail (obj != NULL, NULL); - retval = cspi_object_add ( - Accessibility_Accessible_getChildAtIndex (CSPI_OBJREF (obj), - childIndex, cspi_ev ())); - - cspi_return_val_if_ev ("getChildAtIndex", NULL); - return retval; + child = g_list_nth_data (obj->children, childIndex); + return cspi_object_add(child); } /** @@ -440,16 +409,27 @@ Accessible_getChildAtIndex (Accessible *obj, long Accessible_getIndexInParent (Accessible *obj) { - long retval; + GList *l; + gint i; cspi_return_val_if_fail (obj != NULL, -1); - - retval = Accessibility_Accessible_getIndexInParent (CSPI_OBJREF (obj), cspi_ev ()); - - cspi_return_val_if_ev ("getIndexInparent", -1); - return retval; + if (!obj->parent) return -1; + l = obj->parent->children; + while (l) + { + if (l->data == obj) return i; + l = g_list_next (l); + i++; + } + return -1; } +typedef struct +{ + dbus_uint32_t type; + GArray *targets; +} Accessibility_Relation; + /** * Accessible_getRelationSet: * @obj: a pointer to the #Accessible object on which to operate. @@ -465,28 +445,33 @@ Accessible_getRelationSet (Accessible *obj) int i; int n_relations; AccessibleRelation **relations; - Accessibility_RelationSet *relation_set; + GArray *relation_set; + DBusError error; cspi_return_val_if_fail (obj != NULL, NULL); g_assert (!cspi_exception ()); - relation_set = - Accessibility_Accessible_getRelationSet (CSPI_OBJREF (obj), cspi_ev ()); + dbus_error_init (&error); + cspi_dbus_call (obj, spi_interface_accessible, "getAttributes", &error, "=>a(uao)", &relation_set); cspi_return_val_if_ev ("getRelationSet", NULL); - n_relations = relation_set->_length; + n_relations = relation_set->len; relations = malloc (sizeof (AccessibleRelation *) * (n_relations + 1)); for (i = 0; i < n_relations; ++i) { - relations[i] = cspi_object_add (CORBA_Object_duplicate ( - relation_set->_buffer[i], cspi_ev ())); + Accessibility_Relation *r = g_array_index (relation_set, Accessibility_Relation *, i); + relations[i] = g_new (AccessibleRelation, 1); + if (!relations[i]) continue; + relations[i]->ref_count = 1; + relations[i]->type = r->type; + relations[i]->targets = r->targets; } relations[i] = NULL; - CORBA_free (relation_set); + g_array_free (relation_set, TRUE); return relations; } @@ -504,16 +489,9 @@ Accessible_getRelationSet (Accessible *obj) AccessibleRole Accessible_getRole (Accessible *obj) { - Accessibility_Role retval; - cspi_return_val_if_fail (obj != NULL, SPI_ROLE_INVALID); - retval = - Accessibility_Accessible_getRole (CSPI_OBJREF (obj), cspi_ev ()); - - cspi_return_val_if_ev ("getRole", SPI_ROLE_INVALID); - - return cspi_role_from_spi_role (retval); + return obj->role; } /** @@ -532,12 +510,11 @@ Accessible_getRoleName (Accessible *obj) { char *retval; - cspi_return_val_if_fail (obj != NULL, CORBA_string_dup ("invalid")); + cspi_return_val_if_fail (obj != NULL, g_strdup ("invalid")); - retval = - Accessibility_Accessible_getRoleName (CSPI_OBJREF (obj), cspi_ev ()); + cspi_dbus_call (obj, spi_interface_accessible, "getRoleName", NULL, "=>s", &retval); - cspi_return_val_if_ev ("getRoleName", CORBA_string_dup ("invalid")); + cspi_return_val_if_ev ("getRoleName", g_strdup ("invalid")); return retval; } @@ -560,12 +537,11 @@ Accessible_getLocalizedRoleName (Accessible *obj) { char *retval; - cspi_return_val_if_fail (obj != NULL, CORBA_string_dup ("invalid")); + cspi_return_val_if_fail (obj != NULL, g_strdup ("invalid")); - retval = - Accessibility_Accessible_getLocalizedRoleName (CSPI_OBJREF (obj), cspi_ev ()); + cspi_dbus_call (obj, spi_interface_accessible, "getLocalizedRoleName", NULL, "=>s", &retval); - cspi_return_val_if_ev ("getLocalizedRoleName", CORBA_string_dup ("invalid")); + cspi_return_val_if_ev ("getLocalizedRoleName", g_strdup ("invalid")); return retval; } @@ -581,25 +557,17 @@ Accessible_getLocalizedRoleName (Accessible *obj) AccessibleStateSet * Accessible_getStateSet (Accessible *obj) { + GArray *state_bitflags; AccessibleStateSet *retval; - Accessibility_StateSet corba_stateset; - Accessibility_StateSeq *corba_seq; cspi_return_val_if_fail (obj != NULL, NULL); - corba_stateset = Accessibility_Accessible_getState ( - CSPI_OBJREF (obj), cspi_ev ()); - cspi_return_val_if_ev ("getState", NULL); - - cspi_return_val_if_fail (corba_stateset != CORBA_OBJECT_NIL, NULL); - cspi_return_val_if_fail (cspi_ping (corba_stateset), NULL); - corba_seq = Accessibility_StateSet_getStates (corba_stateset, cspi_ev ()); + cspi_dbus_call (obj, spi_interface_accessible, "getStateSet", NULL, "=>au", &state_bitflags); cspi_return_val_if_ev ("getState", NULL); - retval = spi_state_set_cache_new (corba_seq); + retval = spi_state_set_cache_new (state_bitflags); - CORBA_free (corba_seq); - cspi_release_unref (corba_stateset); + g_array_free (state_bitflags, TRUE); return retval; } @@ -619,16 +587,15 @@ AccessibleAttributeSet * Accessible_getAttributes (Accessible *obj) { AccessibleAttributeSet *retval; - Accessibility_AttributeSet *corba_seq; + GArray *dbus_seq; cspi_return_val_if_fail (obj != NULL, NULL); - corba_seq = Accessibility_Accessible_getAttributes ( - CSPI_OBJREF (obj), cspi_ev ()); + cspi_dbus_call (obj, spi_interface_accessible, "getAttributes", NULL, "=>as", &dbus_seq); + cspi_return_val_if_ev ("getAttributes", NULL); - retval = _cspi_attribute_set_from_sequence (corba_seq); - CORBA_free (corba_seq); + retval = _cspi_attribute_set_from_sequence (dbus_seq); return retval; } @@ -644,16 +611,8 @@ Accessible_getAttributes (Accessible *obj) AccessibleApplication * Accessible_getHostApplication (Accessible *obj) { - AccessibleApplication *retval; - - cspi_return_val_if_fail (obj != NULL, NULL); - - retval = Accessible_getApplication (cspi_object_add ( - Accessibility_Accessible_getApplication (CSPI_OBJREF (obj), - cspi_ev ()))); - cspi_return_val_if_ev ("getApplication", NULL); - - return retval; + while (obj->parent) obj = obj->parent; + return obj; } /* Interface query methods */ @@ -671,7 +630,7 @@ SPIBoolean Accessible_isAction (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Action:1.0"); + spi_interface_action); } /** @@ -687,7 +646,7 @@ SPIBoolean Accessible_isApplication (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Application:1.0"); + spi_interface_application); } /** @@ -701,8 +660,13 @@ Accessible_isApplication (Accessible *obj) SPIBoolean Accessible_isCollection (Accessible *obj) { +#if 0 + g_warning ("Collections not implemented"); return cspi_accessible_is_a (obj, - "IDL:Accessibility/Collection:1.0"); + spi_interface_collection); +#else + return FALSE; +#endif } /** @@ -718,7 +682,7 @@ SPIBoolean Accessible_isComponent (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Component:1.0"); + spi_interface_component); } /** @@ -734,7 +698,7 @@ SPIBoolean Accessible_isDocument (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Document:1.0"); + spi_interface_document); } /** @@ -750,7 +714,7 @@ SPIBoolean Accessible_isEditableText (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/EditableText:1.0"); + spi_interface_editable_text); } /** @@ -765,8 +729,13 @@ Accessible_isEditableText (Accessible *obj) SPIBoolean Accessible_isMatchRule (Accessible *obj) { +#if 0 return cspi_accessible_is_a (obj, - "IDL:Accessibility/MatchRule:1.0"); + spi_interface_match_rule); +#else + g_warning ("Match rules not implemented"); + return FALSE; +#endif } /** @@ -782,7 +751,7 @@ SPIBoolean Accessible_isHypertext (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Hypertext:1.0"); + spi_interface_hypertext); } /** @@ -798,7 +767,7 @@ SPIBoolean Accessible_isImage (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Image:1.0"); + spi_interface_image); } /** @@ -814,7 +783,7 @@ SPIBoolean Accessible_isSelection (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Selection:1.0"); + spi_interface_selection); } /** @@ -830,7 +799,7 @@ SPIBoolean Accessible_isTable (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Table:1.0"); + spi_interface_table); } /** @@ -846,8 +815,13 @@ Accessible_isTable (Accessible *obj) SPIBoolean Accessible_isStreamableContent (Accessible *obj) { +#if 0 return cspi_accessible_is_a (obj, - "IDL:Accessibility/StreamableContent:1.0"); + spi_interface_streamable_content); +#else + g_warning ("Streamable content not implemented"); + return FALSE; +#endif } /** @@ -863,7 +837,7 @@ SPIBoolean Accessible_isText (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Text:1.0"); + spi_interface_text); } /** @@ -879,7 +853,7 @@ SPIBoolean Accessible_isValue (Accessible *obj) { return cspi_accessible_is_a (obj, - "IDL:Accessibility/Value:1.0"); + spi_interface_value); } /** @@ -895,7 +869,7 @@ AccessibleApplication * Accessible_getApplication (Accessible *obj) { return (AccessibleApplication *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Application:1.0"); + obj, spi_interface_application); } /** @@ -911,7 +885,7 @@ AccessibleAction * Accessible_getAction (Accessible *obj) { return (AccessibleAction *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Action:1.0"); + obj, spi_interface_action); } @@ -927,8 +901,12 @@ Accessible_getAction (Accessible *obj) AccessibleCollection * Accessible_getCollection (Accessible *obj) { +#if 0 return (AccessibleCollection *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Collection:1.0"); + obj, spi_interface_collection); +#else + g_warning ("Collections not implemented"); +#endif } /** @@ -944,8 +922,9 @@ AccessibleComponent * Accessible_getComponent (Accessible *obj) { return (AccessibleComponent *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Component:1.0"); + obj, spi_interface_component); } + /** * Accessible_getDocument: * @obj: a pointer to the #Accessible instance to query. @@ -959,7 +938,7 @@ AccessibleDocument * Accessible_getDocument (Accessible *obj) { return (AccessibleDocument *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Document:1.0"); + obj, spi_interface_document); } /** @@ -975,11 +954,10 @@ AccessibleEditableText * Accessible_getEditableText (Accessible *obj) { return (AccessibleEditableText *) Accessible_queryInterface ( - obj, "IDL:Accessibility/EditableText:1.0"); + obj, spi_interface_editable_text); } - /** * Accessible_getHypertext: * @obj: a pointer to the #Accessible instance to query. @@ -993,7 +971,7 @@ AccessibleHypertext * Accessible_getHypertext (Accessible *obj) { return (AccessibleHypertext *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Hypertext:1.0"); + obj, spi_interface_hypertext); } @@ -1011,7 +989,7 @@ AccessibleImage * Accessible_getImage (Accessible *obj) { return (AccessibleImage *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Image:1.0"); + obj, spi_interface_image); } /** @@ -1026,8 +1004,12 @@ Accessible_getImage (Accessible *obj) AccessibleMatchRule * Accessible_getMatchRule (Accessible *obj) { +#if 0 return (AccessibleMatchRule *) Accessible_queryInterface ( - obj, "IDL:Accessibility/MatchRule:1.0"); + obj, spi_interface_match_rule); +#else + g_warning ("Match rules not supported"); +#endif } /** @@ -1043,7 +1025,7 @@ AccessibleSelection * Accessible_getSelection (Accessible *obj) { return (AccessibleSelection *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Selection:1.0"); + obj, spi_interface_selection); } @@ -1060,8 +1042,12 @@ Accessible_getSelection (Accessible *obj) AccessibleStreamableContent * Accessible_getStreamableContent (Accessible *obj) { +#if 0 return (AccessibleStreamableContent *) Accessible_queryInterface ( - obj, "IDL:Accessibility/StreamableContent:1.0"); + obj, spi_interface_streamable_content); +#else + g_warning ("Streamable content not supported"); +#endif } /** @@ -1077,7 +1063,7 @@ AccessibleTable * Accessible_getTable (Accessible *obj) { return (AccessibleTable *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Table:1.0"); + obj, spi_interface_table); } /** @@ -1093,7 +1079,7 @@ AccessibleText * Accessible_getText (Accessible *obj) { return (AccessibleText *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Text:1.0"); + obj, spi_interface_text); } @@ -1111,7 +1097,7 @@ AccessibleValue * Accessible_getValue (Accessible *obj) { return (AccessibleValue *) Accessible_queryInterface ( - obj, "IDL:Accessibility/Value:1.0"); + obj, spi_interface_value); } @@ -1131,30 +1117,14 @@ AccessibleUnknown * Accessible_queryInterface (Accessible *obj, const char *interface_name) { - Bonobo_Unknown iface; - - if (!obj) - { - return NULL; - } - - iface = Accessibility_Accessible_queryInterface (CSPI_OBJREF (obj), - interface_name, - cspi_ev ()); - - - cspi_return_val_if_ev ("queryInterface", NULL); - - /* - * FIXME: we need to be fairly sure that references are going - * to mach up if we are going to expose QueryInterface, ie. we - * can't allow people to do: - * b = a.qi ("b"); b.unref, b.unref to release a's reference. - * this should be no real problem though for this level of API - * user. - */ - - return cspi_object_add (iface); + if (cspi_accessible_is_a (obj, interface_name)) + { + /* The original code called cspi_object_add(obj) instead, but gok and + * simple-at don't treat interfaces as references, so I'm confused + * and not going to replicate this bit of code */ + return obj; + } + return NULL; } @@ -1168,7 +1138,7 @@ Accessible_queryInterface (Accessible *obj, void AccessibleRelation_ref (AccessibleRelation *obj) { - cspi_object_ref (obj); + obj->ref_count++; } /** @@ -1181,7 +1151,12 @@ AccessibleRelation_ref (AccessibleRelation *obj) void AccessibleRelation_unref (AccessibleRelation *obj) { - cspi_object_unref (obj); + obj->ref_count--; + if (obj->ref_count <= 0) + { + g_array_free (obj->targets, TRUE); + g_free (obj); + } } static SPIBoolean @@ -1247,13 +1222,8 @@ cspi_relation_type_from_spi_relation_type (Accessibility_RelationType type) AccessibleRelationType AccessibleRelation_getRelationType (AccessibleRelation *obj) { - Accessibility_RelationType retval; - cspi_return_val_if_fail (obj, SPI_RELATION_NULL); - retval = - Accessibility_Relation_getRelationType (CSPI_OBJREF (obj), cspi_ev()); - cspi_return_val_if_ev ("getRelationType", SPI_RELATION_NULL); - return cspi_relation_type_from_spi_relation_type (retval); + return cspi_relation_type_from_spi_relation_type (obj->type); } /** @@ -1271,12 +1241,8 @@ AccessibleRelation_getRelationType (AccessibleRelation *obj) int AccessibleRelation_getNTargets (AccessibleRelation *obj) { - int retval; - cspi_return_val_if_fail (obj, -1); - retval = Accessibility_Relation_getNTargets (CSPI_OBJREF (obj), cspi_ev()); - cspi_return_val_if_ev ("getNTargets", -1); - return retval; + return obj->targets->len; } /** @@ -1294,15 +1260,11 @@ AccessibleRelation_getNTargets (AccessibleRelation *obj) Accessible * AccessibleRelation_getTarget (AccessibleRelation *obj, int i) { - Accessible *retval; - cspi_return_val_if_fail (obj, NULL); - retval = cspi_object_add ( - Accessibility_Relation_getTarget (CSPI_OBJREF(obj), - i, cspi_ev())); - cspi_return_val_if_ev ("getTarget", NULL); - return retval; + if (i < 0 || i >= obj->targets->len) return NULL; + return cspi_object_add ( + g_array_index (obj->targets, Accessible *, i)); } /** @@ -1332,7 +1294,7 @@ AccessibleStateSet_unref (AccessibleStateSet *obj) } static Accessibility_StateType -spi_state_to_corba (AccessibleState state) +spi_state_to_dbus (AccessibleState state) { #define MAP_STATE(a) \ case SPI_STATE_##a: \ @@ -1401,7 +1363,7 @@ SPIBoolean AccessibleStateSet_contains (AccessibleStateSet *obj, AccessibleState state) { - return spi_state_set_cache_contains (obj, spi_state_to_corba (state)); + return spi_state_set_cache_contains (obj, spi_state_to_dbus (state)); } /** @@ -1417,7 +1379,7 @@ void AccessibleStateSet_add (AccessibleStateSet *obj, AccessibleState state) { - spi_state_set_cache_add (obj, spi_state_to_corba (state)); + spi_state_set_cache_add (obj, spi_state_to_dbus (state)); } /** @@ -1433,7 +1395,7 @@ void AccessibleStateSet_remove (AccessibleStateSet *obj, AccessibleState state) { - spi_state_set_cache_remove (obj, spi_state_to_corba (state)); + spi_state_set_cache_remove (obj, spi_state_to_dbus (state)); } /** @@ -1507,4 +1469,3 @@ AccessibleStateSet_isEmpty (AccessibleStateSet *obj) return spi_state_set_cache_is_empty (obj); } -