X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cspi%2Fspi_accessible.c;h=6817c302ec00a762dc5aa795b49481e080038f24;hb=ebd9b297363b8b3bd6708e6f0c6c7673e5cc32d6;hp=2f753daabeeaa7f7b43f0497c2485ca58ae3905a;hpb=1409a6f93828f2d02d35d23072a9b3cf10533b50;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/cspi/spi_accessible.c b/cspi/spi_accessible.c index 2f753da..6817c30 100644 --- a/cspi/spi_accessible.c +++ b/cspi/spi_accessible.c @@ -4,23 +4,32 @@ static const char *role_names [] = { "", + "accelerator label", "alert", + "animation", + "arrow", + "calendar", "canvas", "check box", + "check menu item", "color chooser", "column header", "combo box", + "date editor", "desktop icon", "desktop frame", + "dial", "dialog", "directory pane", + "drawing area", "file chooser", "filler", - "focus traversable", + "font chooser", "frame", "glass pane", "HTML container", "icon", + "image", "internal frame", "label", "layered pane", @@ -38,68 +47,221 @@ static const char *role_names [] = "progress bar", "pushbutton", "radiobutton", + "radio menu item", "root pane", "row header", "scrollbar", "scrollpane", "separator", "slider", + "spin button", "split pane", + "status bar", "table", "table cell", "table column header", "table row header", + "tearoff menu item", + "terminal", "text", "toggle button", "toolbar", "tooltip", "tree", + "tree table", "", "viewport", "window", - /* These have no equivalent AccessibleRole enum values */ - "accelerator label", - "animation", - "arrow", - "calendar", - "menu item", - "date editor", - "dial", - "drawing area", - "font chooser", - "image", - "radio menu item", - "tearoff menu item", - "spin button", - "status bar", }; #define MAX_ROLES (sizeof (role_names) / sizeof (char *)) +static SPIBoolean +cspi_init_role_table (AccessibleRole *role_table) +{ + int i; + for (i = 0; i < Accessibility_ROLE_LAST_DEFINED; ++i) + { + role_table [i] = SPI_ROLE_UNKNOWN; + } + role_table [Accessibility_ROLE_INVALID] = SPI_ROLE_INVALID; + role_table [Accessibility_ROLE_ACCELERATOR_LABEL] = SPI_ROLE_ACCEL_LABEL; + role_table [Accessibility_ROLE_ALERT] = SPI_ROLE_ALERT; + role_table [Accessibility_ROLE_ANIMATION] = SPI_ROLE_ANIMATION; + role_table [Accessibility_ROLE_ARROW] = SPI_ROLE_ARROW; + role_table [Accessibility_ROLE_CALENDAR] = SPI_ROLE_CALENDAR; + role_table [Accessibility_ROLE_CANVAS] = SPI_ROLE_CANVAS; + role_table [Accessibility_ROLE_CHECK_BOX] = SPI_ROLE_CHECK_BOX; + role_table [Accessibility_ROLE_CHECK_MENU_ITEM] = SPI_ROLE_CHECK_MENU_ITEM; + role_table [Accessibility_ROLE_COLOR_CHOOSER] = SPI_ROLE_COLOR_CHOOSER; + role_table [Accessibility_ROLE_COLUMN_HEADER] = SPI_ROLE_COLUMN_HEADER; + role_table [Accessibility_ROLE_COMBO_BOX] = SPI_ROLE_COMBO_BOX; + role_table [Accessibility_ROLE_DATE_EDITOR] = SPI_ROLE_DATE_EDITOR; + role_table [Accessibility_ROLE_DESKTOP_ICON] = SPI_ROLE_DESKTOP_ICON; + role_table [Accessibility_ROLE_DESKTOP_FRAME] = SPI_ROLE_DESKTOP_FRAME; + role_table [Accessibility_ROLE_DIAL] = SPI_ROLE_DIAL; + role_table [Accessibility_ROLE_DIALOG] = SPI_ROLE_DIALOG; + role_table [Accessibility_ROLE_DIRECTORY_PANE] = SPI_ROLE_DIRECTORY_PANE; + role_table[Accessibility_ROLE_DRAWING_AREA] = SPI_ROLE_DRAWING_AREA; + role_table [Accessibility_ROLE_FILE_CHOOSER] = SPI_ROLE_FILE_CHOOSER; + role_table [Accessibility_ROLE_FILLER] = SPI_ROLE_FILLER; + role_table [Accessibility_ROLE_FONT_CHOOSER] = SPI_ROLE_FONT_CHOOSER; + role_table [Accessibility_ROLE_FRAME] = SPI_ROLE_FRAME; + role_table [Accessibility_ROLE_GLASS_PANE] = SPI_ROLE_GLASS_PANE; + role_table [Accessibility_ROLE_HTML_CONTAINER] = SPI_ROLE_HTML_CONTAINER; + role_table [Accessibility_ROLE_ICON] = SPI_ROLE_ICON; + role_table [Accessibility_ROLE_IMAGE] = SPI_ROLE_IMAGE; + role_table [Accessibility_ROLE_INTERNAL_FRAME] = SPI_ROLE_INTERNAL_FRAME; + role_table [Accessibility_ROLE_LABEL] = SPI_ROLE_LABEL; + role_table [Accessibility_ROLE_LAYERED_PANE] = SPI_ROLE_LAYERED_PANE; + role_table [Accessibility_ROLE_LIST] = SPI_ROLE_LIST; + role_table [Accessibility_ROLE_LIST_ITEM] = SPI_ROLE_LIST_ITEM; + role_table [Accessibility_ROLE_MENU] = SPI_ROLE_MENU; + role_table [Accessibility_ROLE_MENU_BAR] = SPI_ROLE_MENU_BAR; + role_table [Accessibility_ROLE_MENU_ITEM] = SPI_ROLE_MENU_ITEM; + role_table [Accessibility_ROLE_OPTION_PANE] = SPI_ROLE_OPTION_PANE; + role_table [Accessibility_ROLE_PAGE_TAB] = SPI_ROLE_PAGE_TAB; + role_table [Accessibility_ROLE_PAGE_TAB_LIST] = SPI_ROLE_PAGE_TAB_LIST; + role_table [Accessibility_ROLE_PANEL] = SPI_ROLE_PANEL; + role_table [Accessibility_ROLE_PASSWORD_TEXT] = SPI_ROLE_PASSWORD_TEXT; + role_table [Accessibility_ROLE_POPUP_MENU] = SPI_ROLE_POPUP_MENU; + role_table [Accessibility_ROLE_PROGRESS_BAR] = SPI_ROLE_PROGRESS_BAR; + role_table [Accessibility_ROLE_PUSH_BUTTON] = SPI_ROLE_PUSH_BUTTON; + role_table [Accessibility_ROLE_RADIO_BUTTON] = SPI_ROLE_RADIO_BUTTON; + role_table [Accessibility_ROLE_RADIO_MENU_ITEM] = SPI_ROLE_RADIO_MENU_ITEM; + role_table [Accessibility_ROLE_ROOT_PANE] = SPI_ROLE_ROOT_PANE; + role_table [Accessibility_ROLE_ROW_HEADER] = SPI_ROLE_ROW_HEADER; + role_table [Accessibility_ROLE_SCROLL_BAR] = SPI_ROLE_SCROLL_BAR; + role_table [Accessibility_ROLE_SCROLL_PANE] = SPI_ROLE_SCROLL_PANE; + role_table [Accessibility_ROLE_SEPARATOR] = SPI_ROLE_SEPARATOR; + role_table [Accessibility_ROLE_SLIDER] = SPI_ROLE_SLIDER; + role_table [Accessibility_ROLE_SPIN_BUTTON] = SPI_ROLE_SPIN_BUTTON; + role_table [Accessibility_ROLE_SPLIT_PANE] = SPI_ROLE_SPLIT_PANE; + role_table [Accessibility_ROLE_STATUS_BAR] = SPI_ROLE_STATUS_BAR; + role_table [Accessibility_ROLE_TABLE] = SPI_ROLE_TABLE; + role_table [Accessibility_ROLE_TABLE_CELL] = SPI_ROLE_TABLE_CELL; + role_table[Accessibility_ROLE_TABLE_COLUMN_HEADER] = SPI_ROLE_TABLE_COLUMN_HEADER; + role_table[Accessibility_ROLE_TABLE_ROW_HEADER] = SPI_ROLE_TABLE_ROW_HEADER; + role_table [Accessibility_ROLE_TEAROFF_MENU_ITEM] = SPI_ROLE_TEAROFF_MENU_ITEM; + role_table[Accessibility_ROLE_TERMINAL] = SPI_ROLE_TERMINAL; + role_table [Accessibility_ROLE_TEXT] = SPI_ROLE_TEXT; + role_table [Accessibility_ROLE_TOGGLE_BUTTON] = SPI_ROLE_TOGGLE_BUTTON; + role_table [Accessibility_ROLE_TOOL_BAR] = SPI_ROLE_TOOL_BAR; + role_table [Accessibility_ROLE_TOOL_TIP] = SPI_ROLE_TOOL_TIP; + role_table [Accessibility_ROLE_TREE] = SPI_ROLE_TREE; + role_table [Accessibility_ROLE_TREE_TABLE] = SPI_ROLE_TREE_TABLE; + role_table [Accessibility_ROLE_VIEWPORT] = SPI_ROLE_VIEWPORT; + role_table [Accessibility_ROLE_WINDOW] = SPI_ROLE_WINDOW; + role_table [Accessibility_ROLE_EXTENDED] = SPI_ROLE_EXTENDED; + role_table [Accessibility_ROLE_LAST_DEFINED] = SPI_ROLE_EXTENDED; + + return TRUE; +} + +static AccessibleRole +cspi_role_from_spi_role (Accessibility_Role role) +{ + /* array is sized according to IDL roles because IDL roles are the index */ + static AccessibleRole cspi_role_table [Accessibility_ROLE_LAST_DEFINED]; + static SPIBoolean is_initialized = FALSE; + AccessibleRole cspi_role; + if (!is_initialized) + { + is_initialized = cspi_init_role_table (cspi_role_table); + } + if (role >= 0 && role < Accessibility_ROLE_LAST_DEFINED) + { + cspi_role = cspi_role_table [role]; + } + else + { + cspi_role = SPI_ROLE_EXTENDED; + } + return cspi_role; +} + +static SPIBoolean +init_state_table (Accessibility_StateType *state_table) +{ + int i; + + for (i = 0; i < Accessibility_STATE_LAST_DEFINED; i++) + state_table[i] = SPI_STATE_INVALID; + + state_table[SPI_STATE_ACTIVE] = Accessibility_STATE_ACTIVE; + state_table[SPI_STATE_ARMED] = Accessibility_STATE_ARMED; + state_table[SPI_STATE_BUSY] = Accessibility_STATE_BUSY; + state_table[SPI_STATE_CHECKED] = Accessibility_STATE_CHECKED; + state_table[SPI_STATE_DEFUNCT] = Accessibility_STATE_DEFUNCT; + state_table[SPI_STATE_EDITABLE] = Accessibility_STATE_EDITABLE; + state_table[SPI_STATE_ENABLED] = Accessibility_STATE_ENABLED; + state_table[SPI_STATE_EXPANDABLE] = Accessibility_STATE_EXPANDABLE; + state_table[SPI_STATE_EXPANDED] = Accessibility_STATE_EXPANDED; + state_table[SPI_STATE_FOCUSABLE] = Accessibility_STATE_FOCUSABLE; + state_table[SPI_STATE_FOCUSED] = Accessibility_STATE_FOCUSED; + state_table[SPI_STATE_HORIZONTAL] = Accessibility_STATE_HORIZONTAL; + state_table[SPI_STATE_ICONIFIED] = Accessibility_STATE_ICONIFIED; + state_table[SPI_STATE_MODAL] = Accessibility_STATE_MODAL; + state_table[SPI_STATE_MULTI_LINE] = Accessibility_STATE_MULTI_LINE; + state_table[SPI_STATE_MULTISELECTABLE] = Accessibility_STATE_MULTISELECTABLE; + state_table[SPI_STATE_OPAQUE] = Accessibility_STATE_OPAQUE; + state_table[SPI_STATE_PRESSED] = Accessibility_STATE_PRESSED; + state_table[SPI_STATE_RESIZABLE] = Accessibility_STATE_RESIZABLE; + state_table[SPI_STATE_SELECTABLE] = Accessibility_STATE_SELECTABLE; + state_table[SPI_STATE_SELECTED] = Accessibility_STATE_SELECTED; + state_table[SPI_STATE_SENSITIVE] = Accessibility_STATE_SENSITIVE; + state_table[SPI_STATE_SHOWING] = Accessibility_STATE_SHOWING; + state_table[SPI_STATE_SINGLE_LINE] = Accessibility_STATE_SINGLE_LINE; + state_table[SPI_STATE_STALE] = Accessibility_STATE_STALE; + state_table[SPI_STATE_TRANSIENT] = Accessibility_STATE_TRANSIENT; + state_table[SPI_STATE_VERTICAL] = Accessibility_STATE_VERTICAL; + state_table[SPI_STATE_VISIBLE] = Accessibility_STATE_VISIBLE; + + return TRUE; +} + + + +static Accessibility_StateType +spi_state_type_from_accessible_state (AccessibleState type) +{ + static Accessibility_StateType state_table[Accessibility_STATE_LAST_DEFINED]; + static SPIBoolean table_initialized = FALSE; + Accessibility_StateType rv; + + if (!table_initialized) + table_initialized = init_state_table (state_table); + if (type > SPI_STATE_INVALID && type < SPI_STATE_LAST_DEFINED) + rv = state_table[type]; + else + rv = Accessibility_STATE_INVALID; + return rv; +} + + + + /** * AccessibleRole_getName: * @role: an #AccessibleRole object to query. * * Get a localizeable string that indicates the name of an #AccessibleRole. + * DEPRECATED. * * Returns: a localizable string name for an #AccessibleRole enumerated type. **/ -const char * +char * AccessibleRole_getName (AccessibleRole role) { if (role < MAX_ROLES) { - return role_names [(int) role]; + return CORBA_string_dup (role_names [(int) role]); } else { - return ""; + return g_strdup (""); } - /* - * TODO: replace with implementation linked to ATK, which - * now supports Role/Name mapping - */ } /** @@ -107,7 +269,6 @@ AccessibleRole_getName (AccessibleRole role) * @obj: a pointer to the #Accessible object on which to operate. * * Increment the reference count for an #Accessible object. - * **/ void Accessible_ref (Accessible *obj) @@ -120,7 +281,6 @@ Accessible_ref (Accessible *obj) * @obj: a pointer to the #Accessible object on which to operate. * * Decrement the reference count for an #Accessible object. - * **/ void Accessible_unref (Accessible *obj) @@ -302,16 +462,15 @@ Accessible_getRelationSet (Accessible *obj) cspi_return_val_if_ev ("getRelationSet", NULL); - /* this looks hack-ish, but it's based on the CORBA C bindings spec */ n_relations = relation_set->_length; - relations = malloc (sizeof (AccessibleRelation *) * n_relations); + 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 ())); } - relations[i] = CORBA_OBJECT_NIL; + relations[i] = NULL; CORBA_free (relation_set); @@ -323,21 +482,48 @@ Accessible_getRelationSet (Accessible *obj) * @obj: a pointer to the #Accessible object on which to operate. * * Get the UI role of an #Accessible object. + * A UTF-8 string describing this role can be obtained via Accessible_getRoleName (). * - * Returns: a UTF-8 string indicating the UI role of the #Accessible object. + * Returns: the #AccessibleRole of the object. * **/ -const char * +AccessibleRole Accessible_getRole (Accessible *obj) { - const char *retval; + AccessibleRole retval; - cspi_return_val_if_fail (obj != NULL, NULL); + 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); +} + +/** + * Accessible_getRoleName: + * @obj: a pointer to the #Accessible object on which to operate. + * + * Get a UTF-8 string describing the role this object plays in the UI. + * This method will return useful values for roles that fall outside the + * enumeration used in Accessible_getRole (). + * + * Returns: a UTF-8 string specifying the role of this #Accessible object. + * + **/ +char * +Accessible_getRoleName (Accessible *obj) +{ + char *retval; + + cspi_return_val_if_fail (obj != NULL, CORBA_string_dup ("invalid")); - retval = AccessibleRole_getName ( - Accessibility_Accessible_getRole (CSPI_OBJREF (obj), cspi_ev ())); + retval = + Accessibility_Accessible_getRoleName (CSPI_OBJREF (obj), cspi_ev ()); - cspi_return_val_if_ev ("getRole", NULL); + cspi_return_val_if_ev ("getRoleName", CORBA_string_dup ("invalid")); return retval; } @@ -353,7 +539,15 @@ Accessible_getRole (Accessible *obj) AccessibleStateSet * Accessible_getStateSet (Accessible *obj) { - return NULL; + AccessibleStateSet *retval; + + cspi_return_val_if_fail (obj != NULL, NULL); + + retval = cspi_object_add ( + Accessibility_Accessible_getState (CSPI_OBJREF (obj), + cspi_ev ())); + + return retval; } /* Interface query methods */ @@ -487,6 +681,23 @@ Accessible_isTable (Accessible *obj) } /** + * Accessible_isStreamableContent: + * @obj: a pointer to the #Accessible instance to query. + * + * Query whether the specified #Accessible implements + * #AccessibleStreamableContent. + * + * Returns: #TRUE if @obj implements the #AccessibleStreamableContent interface, + * #FALSE otherwise. +**/ +SPIBoolean +Accessible_isStreamableContent (Accessible *obj) +{ + return cspi_accessible_is_a (obj, + "IDL:Accessibility/StreamableContent:1.0"); +} + +/** * Accessible_isText: * @obj: a pointer to the #Accessible instance to query. * @@ -639,6 +850,22 @@ Accessible_getSelection (Accessible *obj) /** + * Accessible_getStreamableContent: + * @obj: a pointer to the #Accessible instance to query. + * + * Get the #AccessibleStreamableContent interface for an #Accessible. + * + * Returns: a pointer to an #AccessibleStreamableContent interface instance, or + * NULL if @obj does not implement #AccessibleStreamableContent. + **/ +AccessibleStreamableContent * +Accessible_getStreamableContent (Accessible *obj) +{ + return (AccessibleStreamableContent *) Accessible_queryInterface ( + obj, "IDL:Accessibility/StreamableContent:1.0"); +} + +/** * Accessible_getTable: * @obj: a pointer to the #Accessible instance to query. * @@ -701,7 +928,7 @@ Accessible_getValue (Accessible *obj) * by @obj, or NULL otherwise. * **/ -GenericInterface * +AccessibleUnknown * Accessible_queryInterface (Accessible *obj, const char *interface_name) { @@ -771,8 +998,13 @@ AccessibleRelation_unref (AccessibleRelation *obj) AccessibleRelationType AccessibleRelation_getRelationType (AccessibleRelation *obj) { - cspi_return_val_if_fail (obj != NULL, -1); - return 0; + AccessibleRelationType 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 retval; } /** @@ -790,8 +1022,13 @@ AccessibleRelation_getRelationType (AccessibleRelation *obj) int AccessibleRelation_getNTargets (AccessibleRelation *obj) { - cspi_return_val_if_fail (obj != NULL, -1); - return 0; + int retval; + + cspi_return_val_if_fail (obj, -1); + retval = (int) + Accessibility_Relation_getNTargets (CSPI_OBJREF (obj), cspi_ev()); + cspi_return_val_if_ev ("getNTargets", -1); + return retval; } /** @@ -809,8 +1046,15 @@ AccessibleRelation_getNTargets (AccessibleRelation *obj) Accessible * AccessibleRelation_getTarget (AccessibleRelation *obj, int i) { - cspi_return_val_if_fail (obj != NULL, NULL); - return NULL; + Accessible *retval; + + cspi_return_val_if_fail (obj, NULL); + + retval = cspi_object_add ( + Accessibility_Relation_getTarget (CSPI_OBJREF(obj), + (CORBA_short) i, cspi_ev())); + cspi_return_val_if_ev ("getTarget", NULL); + return retval; } /** @@ -857,11 +1101,13 @@ AccessibleStateSet_contains (AccessibleStateSet *obj, AccessibleState state) { CORBA_boolean retval; - + Accessibility_StateType spi_state; + cspi_return_val_if_fail (obj != NULL, FALSE); + spi_state = spi_state_type_from_accessible_state (state); retval = Accessibility_StateSet_contains (CSPI_OBJREF (obj), - state, cspi_ev ()); + spi_state, cspi_ev ()); cspi_return_val_if_ev ("contains", FALSE); @@ -881,9 +1127,12 @@ void AccessibleStateSet_add (AccessibleStateSet *obj, AccessibleState state) { + Accessibility_StateType spi_state; + cspi_return_if_fail (obj != NULL); - Accessibility_StateSet_add (CSPI_OBJREF (obj), state, cspi_ev ()); + spi_state = spi_state_type_from_accessible_state (state); + Accessibility_StateSet_add (CSPI_OBJREF (obj), spi_state, cspi_ev ()); cspi_check_ev ("add"); } @@ -900,9 +1149,12 @@ void AccessibleStateSet_remove (AccessibleStateSet *obj, AccessibleState state) { + Accessibility_StateType spi_state; + cspi_return_if_fail (obj != NULL); - Accessibility_StateSet_remove (CSPI_OBJREF (obj), state, cspi_ev ()); + spi_state = spi_state_type_from_accessible_state (state); + Accessibility_StateSet_remove (CSPI_OBJREF (obj), spi_state, cspi_ev ()); cspi_check_ev ("remove"); } @@ -955,8 +1207,11 @@ AccessibleStateSet * AccessibleStateSet_compare (AccessibleStateSet *obj, AccessibleStateSet *obj2) { + Accessibility_StateSet retval; + cspi_return_val_if_fail (obj != NULL, NULL); cspi_return_val_if_fail (obj2 != NULL, NULL); + retval = Accessibility_StateSet_compare (CSPI_OBJREF(obj), CSPI_OBJREF(obj2), cspi_ev ()); return NULL; } @@ -973,9 +1228,11 @@ AccessibleStateSet_compare (AccessibleStateSet *obj, SPIBoolean AccessibleStateSet_isEmpty (AccessibleStateSet *obj) { + CORBA_boolean retval; + cspi_return_val_if_fail (obj != NULL, FALSE); - return TRUE; - /* return Accessibility_StateSet_isEmpty (CSPI_OBJREF (obj), cspi_ev ());*/ + retval = Accessibility_StateSet_isEmpty (CSPI_OBJREF (obj), cspi_ev ()); + return (SPIBoolean) retval; }