diff --git a/accessible/public/nsIAccessible.idl b/accessible/public/nsIAccessible.idl index 0e3e832f0d6c..d82f3cce116b 100644 --- a/accessible/public/nsIAccessible.idl +++ b/accessible/public/nsIAccessible.idl @@ -336,7 +336,6 @@ interface nsIAccessible : nsISupports * RELATION_DEFAULT_BUTTON: Part of a form/dialog with a related default button. * RELATION_DESCRIBED_BY: Described by one or more target objects. * RELATION_DESCRIPTION_FOR: Description for one or more target objects. - * RELATION_LAST_DEFINED: */ const unsigned long RELATION_NUL = 0x00; // ATK_RELATION_NUL @@ -357,297 +356,139 @@ interface nsIAccessible : nsISupports const unsigned long RELATION_DESCRIPTION_FOR = 0x0f; // ATK_RELATION_DESCRIPTION_FOR const unsigned long RELATION_DEFAULT_BUTTON = 0x4000; // MSAA only, no ATK relation -%{C++ -#ifdef MOZ_ACCESSIBILITY_ATK - - enum { RELATION_LAST_DEFINED = 14U }; - -/** - * The following nsIAccessible roles are translated to ATK_ROLE_UNKNOWN - * - * ROLE_TITLEBAR, ROLE_SOUND, ROLE_CURSOR, ROLE_CARET, ROLE_BORDER, - * ROLE_GROUPING, ROLE_EQUATION, ROLE_COLUMN, ROLE_ROW, ROLE_LINK, - * ROLE_WHITESPACE, ROLE_CLOCK, ROLE_IPADDRESS, ROLE_NOTHING - * - * ROLE_GRIP - * The object represents a special mouse pointer, which allows a user to - * manipulate user interface elements such as windows. - * - * ROLE_HELPBALLOON - * The object displays a Help topic in the form of a ToolTip or Help balloon. - * - * ROLE_PROPERTYPAGE - * The object represents a property sheet. - * - * ROLE_INDICATOR - * The object represents an indicator, such as a pointer graphic pointing to - * the current item. - * - * ROLE_HOTKEYFIELD - * The object represents a hot-key field that allow the user to enter a - * sequence of keystroke. - * - * The following ATK roles have no corresponding nsIAccessible roles. Perhaps - * there are not these types of widget/control in Mozilla, so don't need these - * ATK roles? Or need add some of them? - * - * ATK_ROLE_ARROW - * An arrow in one of the four cardinal directions. - * - * ATK_ROLE_INTERNAL_FRAME - * A frame-like object that is clipped by a desktop pane. - * - * ATK_ROLE_ACCEL_LABEL, ATK_ROLE_CANVAS, ATK_ROLE_CHECK_MENU_ITEM, - * ATK_ROLE_COLOR_CHOOSER, ATK_ROLE_DATE_EDITOR, ATK_ROLE_DESKTOP_ICON, - * ATK_ROLE_DESKTOP_FRAME, ATK_ROLE_DIRECTORY_PANE, ATK_ROLE_FILE_CHOOSER, - * ATK_ROLE_FILLER, ATK_ROLE_FONT_CHOOSER, ATK_ROLE_GLASS_PANE, - * ATK_ROLE_HTML_CONTAINER, ATK_ROLE_ICON, ATK_ROLE_LAYERED_PANE, - * ATK_ROLE_POPUP_MENU, ATK_ROLE_OPTION_PANE, ATK_ROLE_PASSWORD_TEXT, - * ATK_ROLE_RADIO_MENU_ITEM, ATK_ROLE_ROOT_PANE, ATK_ROLE_SCROLL_PANE, - * ATK_ROLE_SPLIT_PANE, ATK_ROLE_TEAR_OFF_MENU_ITEM, ATK_ROLE_TERMINAL, - * ATK_ROLE_TOGGLE_BUTTON, ATK_ROLE_TREE_TABLE, ATK_ROLE_VIEWPORT, ATK_ROLE_LABEL - * - * Important: - * Following value should keep synchronization with the definitions in atk.h - */ - enum { ROLE_TITLEBAR = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_MENUBAR = 33U }; // ATK_ROLE_MENU_BAR - enum { ROLE_SCROLLBAR = 47U }; // ATK_ROLE_SCROLL_BAR - enum { ROLE_GRIP = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_SOUND = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_CURSOR = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_CARET = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_ALERT = 2U }; // ATK_ROLE_ALERT - enum { ROLE_WINDOW = 68U }; // ATK_ROLE_WINDOW - // An object used for drawing custom user interface elements - enum { ROLE_CLIENT = 18U }; // ATK_ROLE_DRAWING_AREA - enum { ROLE_MENUPOPUP = 32U }; // ATK_ROLE_MENU - enum { ROLE_MENUITEM = 34U }; // ATK_ROLE_MENU_ITEM - enum { ROLE_TOOLTIP = 63U }; // ATK_ROLE_TOOL_TIP - // The object represents a main window for a application - enum { ROLE_APPLICATION = 73U }; // ATK_ROLE_APPLICATION - // The object represents a document window, only for MDI windows - enum { ROLE_DOCUMENT = 80U }; // ATK_ROLE_DOCUMENT_FRAME - enum { ROLE_PANE = 38U }; // ATK_ROLE_PANEL - enum { ROLE_CHART = 78U }; // ATK_ROLE_CHART - enum { ROLE_DIALOG = 16U }; // ATK_ROLE_DIALOG - enum { ROLE_BORDER = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_GROUPING = 38U }; // ATK_ROLE_PANEL - enum { ROLE_SEPARATOR = 49U }; // ATK_ROLE_SEPARATOR - enum { ROLE_TOOLBAR = 62U }; // ATK_ROLE_TOOL_BAR - enum { ROLE_STATUSBAR = 53U }; // ATK_ROLE_STATUSBAR - enum { ROLE_TABLE = 54U }; // ATK_ROLE_TABLE - // Or ATK_ROLE_TABLE_COLUMN_HEADER? - enum { ROLE_COLUMNHEADER = 10U };// ATK_ROLE_COLUMN_HEADER - // Or ATK_ROLE_TABLE_ROW_HEADER ? - enum { ROLE_ROWHEADER = 46U }; // ATK_ROLE_ROW_HEADER - enum { ROLE_COLUMN = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_ROW = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_CELL = 55U }; // ATK_ROLE_TABLE_CELL - enum { ROLE_HELPBALLOON = 66U }; // ATK_ROLE_UNKNOWN - // The object represents a cartoon-like graphic object - enum { ROLE_CHARACTER = 26U }; // ATK_ROLE_IMAGE - enum { ROLE_LIST = 30U }; // ATK_ROLE_LIST - enum { ROLE_LISTITEM = 31U }; // ATK_ROLE_LIST_ITEM - // The object represents an outline or tree structure - enum { ROLE_OUTLINE = 64U }; // ATK_ROLE_TREE - // The object represents an item in an outline or tree structure - enum { ROLE_OUTLINEITEM = 31U }; // ATK_ROLE_LIST_ITEM - enum { ROLE_PAGETAB = 36U }; // ATK_ROLE_PAGE_TAB - enum { ROLE_PROPERTYPAGE = 66U };// ATK_ROLE_UNKNOWN - enum { ROLE_INDICATOR = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_GRAPHIC = 26U }; // ATK_ROLE_IMAGE - // Read-only text, can't be modified or selected - enum { ROLE_STATICTEXT = 50000U }; // No matching ATK role, we will strip out - enum { ROLE_TEXT_LEAF = 50000U }; // No matching ATK role, we will strip out - enum { ROLE_TEXT_CONTAINER = 60U }; // ATK_ROLE_TEXT - enum { ROLE_PUSHBUTTON = 42U }; // ATK_ROLE_PUSH_BUTTON - enum { ROLE_CHECKBUTTON = 7U }; // ATK_ROLE_CHECK_BOX - enum { ROLE_RADIOBUTTON = 43U }; // ATK_ROLE_RADIO_BUTTON - enum { ROLE_COMBOBOX = 11U }; // ATK_ROLE_COMBO_BOX - // Just represents the calender control - enum { ROLE_DROPLIST = 5U }; // ATK_ROLE_CALENDAR - enum { ROLE_PROGRESSBAR = 41U }; // ATK_ROLE_PROGRESS_BAR - enum { ROLE_DIAL = 15U }; // ATK_ROLE_DIAL - enum { ROLE_HOTKEYFIELD = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_SLIDER = 50U }; // ATK_ROLE_SLIDER - enum { ROLE_SPINBUTTON = 52U }; // ATK_ROLE_SPIN_BUTTON - enum { ROLE_DIAGRAM = 26U }; // ATK_ROLE_IMAGE - enum { ROLE_ANIMATION = 3U }; // ATK_ROLE_ANIMATION - enum { ROLE_EQUATION = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_BUTTONDROPDOWN = 42U }; // ATK_ROLE_PUSH_BUTTON - enum { ROLE_BUTTONMENU = 42U }; // ATK_ROLE_PUSH_BUTTON - // Represents a button that drops down a grid - enum { ROLE_BUTTONDROPDOWNGRID = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_WHITESPACE = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_PAGETABLIST = 37U }; // ATK_ROLE_PAGE_TAB_LIST - enum { ROLE_CLOCK = 66U }; // ATK_ROLE_UNKNOWN - // Represents a button on the toolbar that has a drop-down list icon - // directly adjacent to the button - enum { ROLE_SPLITBUTTON = 42U }; // ATK_ROLE_PUSH_BUTTON - enum { ROLE_IPADDRESS = 66U }; // ATK_ROLE_UNKNOWN - enum { ROLE_NOTHING = 66U }; // ATK_ROLE_UNKNOWN - // Represent top level window - enum { ROLE_FRAME = 22U }; // ATK_ROLE_FRAME - - // Other roles from atk.h - enum { ROLE_ACCEL_LABEL = 1U }; // ATK_ROLE_ACCEL_LABEL - enum { ROLE_ARROW = 4U }; // ATK_ROLE_ARROW - enum { ROLE_CANVAS = 6U }; // ATK_ROLE_CANVAS - enum { ROLE_CHECK_MENU_ITEM = 8U }; // ATK_ROLE_CHECK_MENU_ITEM - enum { ROLE_COLOR_CHOOSER = 9U }; // ATK_ROLE_COLOR_CHOOSER - enum { ROLE_DATE_EDITOR = 12U }; // ATK_ROLE_DATE_EDITOR - enum { ROLE_DESKTOP_ICON = 13U }; // ATK_ROLE_DESKTOP_ICON - enum { ROLE_DESKTOP_FRAME = 14U }; // ATK_ROLE_DESKTOP_FRAME - enum { ROLE_DIRECTORY_PANE = 17U }; // ATK_ROLE_DIRECTORY_PANE - enum { ROLE_FILE_CHOOSER = 19U}; // ATK_ROLE_FILE_CHOOSER - enum { ROLE_FILLER = 20U }; // ATK_ROLE_FILLER - enum { ROLE_FONT_CHOOSER = 21U }; // ATK_ROLE_FONT_CHOOSER - enum { ROLE_GLASS_PANE = 23U }; // ATK_ROLE_GLASS_PANE - enum { ROLE_HTML_CONTAINER = 24U }; // ATK_ROLE_HTML_CONTAINER - enum { ROLE_ICON = 25U }; // ATK_ROLE_ICON - enum { ROLE_INTERNAL_FRAME = 27U }; // ATK_ROLE_INTERNAL_FRAME - enum { ROLE_LABEL = 28U }; // ATK_ROLE_LABEL - enum { ROLE_LAYERED_PANE = 29U }; // ATK_ROLE_LAYERED_PANE - enum { ROLE_OPTION_PANE = 35U }; // ATK_ROLE_OPTION_PANE - enum { ROLE_PASSWORD_TEXT = 39U }; // ATK_ROLE_PASSWORD_TEXT - enum { ROLE_POPUP_MENU = 40U }; // ATK_ROLE_POPUP_MENU - enum { ROLE_RADIO_MENU_ITEM = 44U }; // ATK_ROLE_RADIO_MENU_ITEM - enum { ROLE_ROOT_PANE = 45U }; // ATK_ROLE_ROOT_PANE - enum { ROLE_SCROLL_PANE = 48U }; // ATK_ROLE_SCROLL_PANE - enum { ROLE_SPLIT_PANE = 51U }; // ATK_ROLE_SPLIT_PANE - enum { ROLE_TABLE_COLUMN_HEADER = 56U }; // ATK_ROLE_TABLE_COLUMN_HEADER - enum { ROLE_TABLE_ROW_HEADER = 57U }; // ATK_ROLE_TABLE_ROW_HEADER - enum { ROLE_TEAR_OFF_MENU_ITEM = 58U }; // ATK_ROLE_TEAR_OFF_MENU_ITEM - enum { ROLE_TERMINAL = 59U }; // ATK_ROLE_TERMINAL - enum { ROLE_TOGGLE_BUTTON = 61U }; // ATK_ROLE_TOGGLE_BUTTON - enum { ROLE_TREE_TABLE = 65U }; // ATK_ROLE_TREE_TABLE - enum { ROLE_VIEWPORT = 67U }; // ATK_ROLE_VIEWPORT - enum { ROLE_HEADER = 69U }; // ATK_ROLE_HEADER - enum { ROLE_FOOTER = 70U }; // ATK_ROLE_FOOTER - enum { ROLE_PARAGRAPH = 71U }; // ATK_ROLE_PARAGRAPH - enum { ROLE_RULER = 72U }; // ATK_ROLE_RULER - enum { ROLE_AUTOCOMPLETE = 74U }; // ATK_ROLE_AUTOCOMPLETE - enum { ROLE_EDITBAR = 75U }; // ATK_ROLE_EDITBAR - enum { ROLE_EMBEDDED = 76U }; // ATK_ROLE_EMBEDDED - enum { ROLE_ENTRY = 77U }; // ATK_ROLE_ENTRY - enum { ROLE_CAPTION = 79U }; // ATK_ROLE_CAPTION - enum { ROLE_DOCUMENT_FRAME = 80U }; // ATK_ROLE_DOCUMENT_FRAME - enum { ROLE_HEADING = 81U }; // ATK_ROLE_HEADING - enum { ROLE_PAGE = 82U }; // ATK_ROLE_PAGE - enum { ROLE_SECTION = 83U }; // ATK_ROLE_SECTION - enum { ROLE_REDUNDANT_OBJECT = 84U }; // ATK_ROLE_REDUNDANT_OBJECT - enum { ROLE_FORM = 85U }; // ATK_ROLE_FORM - enum { ROLE_LINK = 86U }; // ATK_ROLE_LINK - enum { ROLE_IME = 87U }; // ATK_ROLE_INPUT_METHOD_WINDOW -#else -// MSAA Roles - only one per nsIAccessible or IAccessible - enum { ROLE_TITLEBAR = 1U }; - enum { ROLE_MENUBAR = 2U }; - enum { ROLE_SCROLLBAR = 3U }; - enum { ROLE_GRIP = 4U }; - enum { ROLE_SOUND = 5U }; - enum { ROLE_CURSOR = 6U }; - enum { ROLE_CARET = 7U }; - enum { ROLE_ALERT = 8U }; - enum { ROLE_WINDOW = 9U }; - enum { ROLE_CLIENT = 10U }; - enum { ROLE_MENUPOPUP = 11U }; - enum { ROLE_MENUITEM = 12U }; - enum { ROLE_RADIO_MENU_ITEM = 12U }; // Same as ROLE_MENUITEM - enum { ROLE_CHECK_MENU_ITEM = 12U }; // Same as ROLE_MENUITEM - enum { ROLE_TOOLTIP = 13U }; - enum { ROLE_APPLICATION = 14U }; - enum { ROLE_DOCUMENT = 15U }; - enum { ROLE_PANE = 16U }; - enum { ROLE_CHART = 17U }; - enum { ROLE_DIALOG = 18U }; - enum { ROLE_BORDER = 19U }; - enum { ROLE_GROUPING = 20U }; - enum { ROLE_SEPARATOR = 21U }; - enum { ROLE_TOOLBAR = 22U }; - enum { ROLE_STATUSBAR = 23U }; - enum { ROLE_TABLE = 24U }; - enum { ROLE_COLUMNHEADER = 25U }; - enum { ROLE_ROWHEADER = 26U }; - enum { ROLE_COLUMN = 27U }; - enum { ROLE_ROW = 28U }; - enum { ROLE_CELL = 29U }; - enum { ROLE_LINK = 30U }; - enum { ROLE_HELPBALLOON = 31U }; - enum { ROLE_CHARACTER = 32U }; - enum { ROLE_LIST = 33U }; - enum { ROLE_LISTITEM = 34U }; - enum { ROLE_OUTLINE = 35U }; - enum { ROLE_TREE_TABLE = 35U }; // Same as ROLE_OUTLINE - enum { ROLE_OUTLINEITEM = 36U }; - enum { ROLE_PAGETAB = 37U }; - enum { ROLE_PROPERTYPAGE = 38U }; - enum { ROLE_INDICATOR = 39U }; - enum { ROLE_GRAPHIC = 40U }; - enum { ROLE_STATICTEXT = 41U }; - enum { ROLE_TEXT_LEAF = 42U }; - enum { ROLE_PUSHBUTTON = 43U }; - enum { ROLE_CHECKBUTTON = 44U }; - enum { ROLE_RADIOBUTTON = 45U }; - enum { ROLE_COMBOBOX = 46U }; - enum { ROLE_DROPLIST = 47U }; - enum { ROLE_PROGRESSBAR = 48U }; - enum { ROLE_DIAL = 49U }; - enum { ROLE_HOTKEYFIELD = 50U }; - enum { ROLE_SLIDER = 51U }; - enum { ROLE_SPINBUTTON = 52U }; - enum { ROLE_DIAGRAM = 53U }; - enum { ROLE_ANIMATION = 54U }; - enum { ROLE_EQUATION = 55U }; - enum { ROLE_BUTTONDROPDOWN = 56U }; - enum { ROLE_BUTTONMENU = 57U }; - enum { ROLE_BUTTONDROPDOWNGRID = 58U }; - enum { ROLE_WHITESPACE = 59U }; - enum { ROLE_PAGETABLIST = 60U }; - enum { ROLE_CLOCK = 61U }; - enum { ROLE_SPLITBUTTON = 62U }; - enum { ROLE_IPADDRESS = 63U }; - enum { ROLE_NOTHING = 4294967295U }; - -// Make up for ATK roles that we don't have in MSAA -// When in doubt map them to ROLE_NOTHING so that the role string is exposed - enum { ROLE_ICON = ROLE_NOTHING }; - enum { ROLE_PASSWORD_TEXT = 1000U }; - enum { ROLE_AUTOCOMPLETE = ROLE_COMBOBOX }; - enum { ROLE_EDITBAR = ROLE_NOTHING }; - enum { ROLE_EMBEDDED = ROLE_NOTHING }; - enum { ROLE_ENTRY = 1001U }; - enum { ROLE_CAPTION = ROLE_NOTHING }; - enum { ROLE_DOCUMENT_FRAME = ROLE_NOTHING }; - enum { ROLE_HEADING = ROLE_NOTHING }; - enum { ROLE_PAGE = ROLE_NOTHING }; - enum { ROLE_SECTION = ROLE_NOTHING }; - enum { ROLE_REDUNDANT_OBJECT = ROLE_NOTHING }; - enum { ROLE_HTML_CONTAINER = ROLE_NOTHING }; - enum { ROLE_FORM = ROLE_NOTHING }; - enum { ROLE_PARAGRAPH = ROLE_NOTHING }; - enum { ROLE_TEXT_CONTAINER = ROLE_NOTHING }; - enum { ROLE_LABEL = ROLE_STATICTEXT }; + // Cross Platform Roles + // When adding a new role, be sure to also add it to nsRoleMap.h for each platform + const unsigned long ROLE_NOTHING = 0; + const unsigned long ROLE_TITLEBAR = 1; + const unsigned long ROLE_MENUBAR = 2; + const unsigned long ROLE_SCROLLBAR = 3; + const unsigned long ROLE_GRIP = 4; + const unsigned long ROLE_SOUND = 5; + const unsigned long ROLE_CURSOR = 6; + const unsigned long ROLE_CARET = 7; + const unsigned long ROLE_ALERT = 8; + const unsigned long ROLE_WINDOW = 9; + const unsigned long ROLE_CLIENT = 10; + const unsigned long ROLE_MENUPOPUP = 11; + const unsigned long ROLE_MENUITEM = 12; + const unsigned long ROLE_TOOLTIP = 13; + const unsigned long ROLE_APPLICATION = 14; + const unsigned long ROLE_DOCUMENT = 15; + const unsigned long ROLE_PANE = 16; + const unsigned long ROLE_CHART = 17; + const unsigned long ROLE_DIALOG = 18; + const unsigned long ROLE_BORDER = 19; + const unsigned long ROLE_GROUPING = 20; + const unsigned long ROLE_SEPARATOR = 21; + const unsigned long ROLE_TOOLBAR = 22; + const unsigned long ROLE_STATUSBAR = 23; + const unsigned long ROLE_TABLE = 24; + const unsigned long ROLE_COLUMNHEADER = 25; + const unsigned long ROLE_ROWHEADER = 26; + const unsigned long ROLE_COLUMN = 27; + const unsigned long ROLE_ROW = 28; + const unsigned long ROLE_CELL = 29; + const unsigned long ROLE_LINK = 30; + const unsigned long ROLE_HELPBALLOON = 31; + const unsigned long ROLE_CHARACTER = 32; + const unsigned long ROLE_LIST = 33; + const unsigned long ROLE_LISTITEM = 34; + const unsigned long ROLE_OUTLINE = 35; + const unsigned long ROLE_OUTLINEITEM = 36; + const unsigned long ROLE_PAGETAB = 37; + const unsigned long ROLE_PROPERTYPAGE = 38; + const unsigned long ROLE_INDICATOR = 39; + const unsigned long ROLE_GRAPHIC = 40; + const unsigned long ROLE_STATICTEXT = 41; + const unsigned long ROLE_TEXT_LEAF = 42; + const unsigned long ROLE_PUSHBUTTON = 43; + const unsigned long ROLE_CHECKBUTTON = 44; + const unsigned long ROLE_RADIOBUTTON = 45; + const unsigned long ROLE_COMBOBOX = 46; + const unsigned long ROLE_DROPLIST = 47; + const unsigned long ROLE_PROGRESSBAR = 48; + const unsigned long ROLE_DIAL = 49; + const unsigned long ROLE_HOTKEYFIELD = 50; + const unsigned long ROLE_SLIDER = 51; + const unsigned long ROLE_SPINBUTTON = 52; + const unsigned long ROLE_DIAGRAM = 53; + const unsigned long ROLE_ANIMATION = 54; + const unsigned long ROLE_EQUATION = 55; + const unsigned long ROLE_BUTTONDROPDOWN = 56; + const unsigned long ROLE_BUTTONMENU = 57; + const unsigned long ROLE_BUTTONDROPDOWNGRID = 58; + const unsigned long ROLE_WHITESPACE = 59; + const unsigned long ROLE_PAGETABLIST = 60; + const unsigned long ROLE_CLOCK = 61; + const unsigned long ROLE_SPLITBUTTON = 62; + const unsigned long ROLE_IPADDRESS = 63; + const unsigned long ROLE_ACCEL_LABEL = 64; + const unsigned long ROLE_ARROW = 65; + const unsigned long ROLE_CANVAS = 66; + const unsigned long ROLE_CHECK_MENU_ITEM = 67; + const unsigned long ROLE_COLOR_CHOOSER = 68; + const unsigned long ROLE_DATE_EDITOR = 69; + const unsigned long ROLE_DESKTOP_ICON = 70; + const unsigned long ROLE_DESKTOP_FRAME = 71; + const unsigned long ROLE_DIRECTORY_PANE = 72; + const unsigned long ROLE_FILE_CHOOSER = 73; + const unsigned long ROLE_FILLER = 74; + const unsigned long ROLE_FONT_CHOOSER = 75; + const unsigned long ROLE_FRAME = 76; + const unsigned long ROLE_GLASS_PANE = 77; + const unsigned long ROLE_HTML_CONTAINER = 78; + const unsigned long ROLE_ICON = 79; + const unsigned long ROLE_INTERNAL_FRAME = 80; + const unsigned long ROLE_LABEL = 81; + const unsigned long ROLE_LAYERED_PANE = 82; + const unsigned long ROLE_OPTION_PANE = 83; + const unsigned long ROLE_PASSWORD_TEXT = 84; + const unsigned long ROLE_POPUP_MENU = 85; + const unsigned long ROLE_RADIO_MENU_ITEM = 86; + const unsigned long ROLE_ROOT_PANE = 87; + const unsigned long ROLE_SCROLL_PANE = 88; + const unsigned long ROLE_SPLIT_PANE = 89; + const unsigned long ROLE_TABLE_COLUMN_HEADER = 90; + const unsigned long ROLE_TABLE_ROW_HEADER = 91; + const unsigned long ROLE_TEAR_OFF_MENU_ITEM = 92; + const unsigned long ROLE_TERMINAL =93; + const unsigned long ROLE_TEXT_CONTAINER = 94; + const unsigned long ROLE_TOGGLE_BUTTON = 95; + const unsigned long ROLE_TREE_TABLE = 96; + const unsigned long ROLE_VIEWPORT = 97; + const unsigned long ROLE_HEADER = 98; + const unsigned long ROLE_FOOTER = 99; + const unsigned long ROLE_PARAGRAPH = 100; + const unsigned long ROLE_RULER = 101; + const unsigned long ROLE_AUTOCOMPLETE = 102; + const unsigned long ROLE_EDITBAR = 103; + const unsigned long ROLE_EMBEDDED = 104; + const unsigned long ROLE_ENTRY = 105; + const unsigned long ROLE_CAPTION = 106; + const unsigned long ROLE_DOCUMENT_FRAME = 107; + const unsigned long ROLE_HEADING = 108; + const unsigned long ROLE_PAGE = 109; + const unsigned long ROLE_SECTION = 110; + const unsigned long ROLE_REDUNDANT_OBJECT = 111; + const unsigned long ROLE_FORM = 112; + const unsigned long ROLE_IME = 113; + const unsigned long ROLE_LAST_ENTRY = 114; // Important -- helps ensure nsRoleMap's are synchronized // MSAA relationship extensions to accNavigate - enum { NAVRELATION_CONTROLLED_BY = 0x1000 }; - enum { NAVRELATION_CONTROLLER_FOR = 0x1001 }; - enum { NAVRELATION_LABEL_FOR = 0x1002 }; - enum { NAVRELATION_LABELLED_BY = 0x1003 }; - enum { NAVRELATION_MEMBER_OF = 0x1004 }; - enum { NAVRELATION_NODE_CHILD_OF = 0x1005 }; - enum { NAVRELATION_FLOWS_TO = 0x1006 }; - enum { NAVRELATION_FLOWS_FROM = 0x1007 }; - enum { NAVRELATION_SUBWINDOW_OF = 0x1008 }; - enum { NAVRELATION_EMBEDS = 0x1009 }; - enum { NAVRELATION_EMBEDDED_BY = 0x100a }; - enum { NAVRELATION_POPUP_FOR = 0x100b }; - enum { NAVRELATION_PARENT_WINDOW_OF = 0x100c }; - enum { NAVRELATION_DEFAULT_BUTTON = 0x100d }; - enum { NAVRELATION_DESCRIBED_BY = 0x100e }; - enum { NAVRELATION_DESCRIPTION_FOR = 0x100f }; - -#endif -%} + const unsigned long NAVRELATION_CONTROLLED_BY = 0x1000; + const unsigned long NAVRELATION_CONTROLLER_FOR = 0x1001; + const unsigned long NAVRELATION_LABEL_FOR = 0x1002; + const unsigned long NAVRELATION_LABELLED_BY = 0x1003; + const unsigned long NAVRELATION_MEMBER_OF = 0x1004; + const unsigned long NAVRELATION_NODE_CHILD_OF = 0x1005; + const unsigned long NAVRELATION_FLOWS_TO = 0x1006; + const unsigned long NAVRELATION_FLOWS_FROM = 0x1007; + const unsigned long NAVRELATION_SUBWINDOW_OF = 0x1008; + const unsigned long NAVRELATION_EMBEDS = 0x1009; + const unsigned long NAVRELATION_EMBEDDED_BY = 0x100a; + const unsigned long NAVRELATION_POPUP_FOR = 0x100b; + const unsigned long NAVRELATION_PARENT_WINDOW_OF = 0x100c; + const unsigned long NAVRELATION_DEFAULT_BUTTON = 0x100d; + const unsigned long NAVRELATION_DESCRIBED_BY = 0x100e; + const unsigned long NAVRELATION_DESCRIPTION_FOR = 0x100f; }; diff --git a/accessible/src/atk/nsAccessibleWrap.cpp b/accessible/src/atk/nsAccessibleWrap.cpp index e1ef6145247c..32c114e2f59f 100644 --- a/accessible/src/atk/nsAccessibleWrap.cpp +++ b/accessible/src/atk/nsAccessibleWrap.cpp @@ -44,6 +44,7 @@ #include "nsAppRootAccessible.h" #include "nsString.h" #include "prprf.h" +#include "nsRoleMap.h" #include "nsMaiInterfaceComponent.h" #include "nsMaiInterfaceAction.h" @@ -793,68 +794,24 @@ getRoleCB(AtkObject *aAtkObj) nsAccessibleWrap *accWrap = NS_REINTERPRET_CAST(MaiAtkObject*, aAtkObj)->accWrap; - PRUint32 accRole; + PRUint32 accRole = 0, atkRole = 0; nsresult rv = accWrap->GetFinalRole(&accRole); NS_ENSURE_SUCCESS(rv, ATK_ROLE_INVALID); //the cross-platform Accessible object returns the same value for //both "ROLE_MENUITEM" and "ROLE_MENUPOPUP" + // XXX move this logic into nsXULMenuitem::GetRole() if (accRole == nsIAccessible::ROLE_MENUITEM) { PRInt32 childCount = 0; accWrap->GetChildCount(&childCount); - if (childCount > 0) + if (childCount > 0) { accRole = nsIAccessible::ROLE_MENUPOPUP; - } -#ifndef USE_ATK_ROLE_LINK - else if (accRole == nsIAccessible::ROLE_LINK) { - //ATK doesn't have role-link now - //register it on runtime - static AtkRole linkRole = (AtkRole)0; - if (linkRole == 0) { - linkRole = atk_role_register("hyper link"); } - accRole = linkRole; } -#endif - else if (accRole == nsIAccessible::ROLE_TEXT_CONTAINER) { - accRole = ATK_ROLE_TEXT; - } -#ifndef USE_ATK_ROLE_AUTOCOMPLETE - else if (accRole == nsIAccessible::ROLE_AUTOCOMPLETE) { - accRole = ATK_ROLE_COMBO_BOX; - } -#endif -#ifndef USE_ATK_ROLE_ENTRY - else if (accRole == nsIAccessible::ROLE_ENTRY) { - accRole = ATK_ROLE_TEXT; - } -#endif -#ifndef USE_ATK_ROLE_FORM - else if (accRole == nsIAccessible::ROLE_FORM) { - accRole = ATK_ROLE_PANEL; - } -#endif -#ifndef USE_ATK_ROLE_HEADING - else if (accRole == nsIAccessible::ROLE_HEADING) { - accRole = ATK_ROLE_TEXT; - } -#endif -#ifndef USE_ATK_ROLE_SECTION - else if (accRole == nsIAccessible::ROLE_SECTION) { - accRole = ATK_ROLE_TEXT; - } -#endif -#ifndef USE_ATK_ROLE_PARAGRAPH - else if (accRole == nsIAccessible::ROLE_PARAGRAPH) { - accRole = ATK_ROLE_TEXT; - } -#endif -#ifndef USE_ATK_ROLE_DOCUMENT_FRAME - else if (accRole == nsIAccessible::ROLE_DOCUMENT) { - accRole = ATK_ROLE_HTML_CONTAINER; - } -#endif - aAtkObj->role = NS_STATIC_CAST(AtkRole, accRole); + atkRole = atkRoleMap[accRole]; // map to the actual value + NS_ASSERTION(atkRoleMap[nsIAccessible::ROLE_LAST_ENTRY] == + ROLE_ATK_LAST_ENTRY, "ATK role map skewed"); + aAtkObj->role = NS_STATIC_CAST(AtkRole, atkRole); } return aAtkObj->role; } diff --git a/accessible/src/atk/nsRoleMap.h b/accessible/src/atk/nsRoleMap.h new file mode 100644 index 000000000000..624ce1e2ecbb --- /dev/null +++ b/accessible/src/atk/nsRoleMap.h @@ -0,0 +1,213 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vim:expandtab:shiftwidth=4:tabstop=4: + */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is IBM Corporation + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Gao, Ming (gaoming@cn.ibm.com) + * Aaron Leventhal (aleventh@us.ibm.com) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include <atk/atk.h> +#include "nsAccessibleWrap.h" + +#define ROLE_ATK_LAST_ENTRY -1 + +// Map array from cross platform roles to ATK roles +PRUint32 atkRoleMap[] = { + // Cross Platform Roles # + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_NOTHING 0 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_TITLEBAR 1 + ATK_ROLE_MENU_BAR, // nsIAccessible::ROLE_MENUBAR 2 + ATK_ROLE_SCROLL_BAR, // nsIAccessible::ROLE_SCROLLBAR 3 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_GRIP 4 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_SOUND 5 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_CURSOR 6 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_CARET 7 + ATK_ROLE_ALERT, // nsIAccessible::ROLE_ALERT 8 + ATK_ROLE_WINDOW, // nsIAccessible::ROLE_WINDOW 9 + ATK_ROLE_DRAWING_AREA, // nsIAccessible::ROLE_CLIENT 10 + ATK_ROLE_MENU, // nsIAccessible::ROLE_MENUPOPUP 11 + ATK_ROLE_MENU_ITEM, // nsIAccessible::ROLE_MENUITEM 12 + ATK_ROLE_TOOL_TIP, // nsIAccessible::ROLE_TOOLTIP 13 + ATK_ROLE_APPLICATION, // nsIAccessible::ROLE_APPLICATION 14 +#ifdef USE_ATK_ROLE_DOCUMENT_FRAME + ATK_ROLE_DOCUMENT_FRAME, // nsIAccessible::ROLE_DOCUMENT 15 +#else + ATK_ROLE_HTML_CONTAINER, // nsIAccessible::ROLE_DOCUMENT 15 +#endif + ATK_ROLE_PANEL, // nsIAccessible::ROLE_PANE 16 +#ifdef USE_ATK_ROLE_CHART + ATK_ROLE_CHART, // nsIAccessible::ROLE_CHART 17 +#else + ATK_ROLE_PANE, // nsIAccessible::ROLE_CHART 17 +#endif + ATK_ROLE_DIALOG, // nsIAccessible::ROLE_DIALOG 18 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_BORDER 19 + ATK_ROLE_PANEL, // nsIAccessible::ROLE_GROUPING 20 + ATK_ROLE_SEPARATOR, // nsIAccessible::ROLE_SEPARATOR 21 + ATK_ROLE_TOOL_BAR, // nsIAccessible::ROLE_TOOLBAR 22 + ATK_ROLE_STATUSBAR, // nsIAccessible::ROLE_STATUSBAR 23 + ATK_ROLE_TABLE, // nsIAccessible::ROLE_TABLE 24 + ATK_ROLE_COLUMN_HEADER, // nsIAccessible::ROLE_COLUMNHEADER 25 + ATK_ROLE_ROW_HEADER, // nsIAccessible::ROLE_ROWHEADER 26 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_COLUMN 27 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_ROW 28 + ATK_ROLE_TABLE_CELL, // nsIAccessible::ROLE_CELL 29 +#ifdef USE_ATK_ROLE_LINK + ATK_ROLE_LINK, // nsIAccessible::ROLE_LINK 30 +#else + ATK_ROLE_PUSH_BUTTON, // nsIAccessible::ROLE_LINK 30 +#endif + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_HELPBALLOON 31 + ATK_ROLE_IMAGE, // nsIAccessible::ROLE_CHARACTER 32 + ATK_ROLE_LIST, // nsIAccessible::ROLE_LIST 33 + ATK_ROLE_LIST_ITEM, // nsIAccessible::ROLE_LISTITEM 34 + ATK_ROLE_TREE, // nsIAccessible::ROLE_OUTLINE 35 + ATK_ROLE_LIST_ITEM, // nsIAccessible::ROLE_OUTLINEITEM 36 + ATK_ROLE_PAGE_TAB, // nsIAccessible::ROLE_PAGETAB 37 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_PROPERTYPAGE 38 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_INDICATOR 39 + ATK_ROLE_IMAGE, // nsIAccessible::ROLE_GRAPHIC 40 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_STATICTEXT 41 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_TEXT_LEAF 42 + ATK_ROLE_PUSH_BUTTON, // nsIAccessible::ROLE_PUSHBUTTON 43 + ATK_ROLE_CHECK_BOX, // nsIAccessible::ROLE_CHECKBUTTON 44 + ATK_ROLE_RADIO_BUTTON, // nsIAccessible::ROLE_RADIOBUTTON 45 + ATK_ROLE_COMBO_BOX, // nsIAccessible::ROLE_COMBOBOX 46 + ATK_ROLE_CALENDAR, // nsIAccessible::ROLE_DROPLIST 47 + ATK_ROLE_PROGRESS_BAR, // nsIAccessible::ROLE_PROGRESSBAR 48 + ATK_ROLE_DIAL, // nsIAccessible::ROLE_DIAL 49 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_HOTKEYFIELD 50 + ATK_ROLE_SLIDER, // nsIAccessible::ROLE_SLIDER 51 + ATK_ROLE_SPIN_BUTTON, // nsIAccessible::ROLE_SPINBUTTON 52 + ATK_ROLE_IMAGE, // nsIAccessible::ROLE_DIAGRAM 53 + ATK_ROLE_ANIMATION, // nsIAccessible::ROLE_ANIMATION 54 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_EQUATION 55 + ATK_ROLE_PUSH_BUTTON, // nsIAccessible::ROLE_BUTTONDROPDOWN 56 + ATK_ROLE_PUSH_BUTTON, // nsIAccessible::ROLE_BUTTONMENU 57 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_BUTTONDROPDOWNGRID 58 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_WHITESPACE 59 + ATK_ROLE_PAGE_TAB_LIST, // nsIAccessible::ROLE_PAGETABLIST 60 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_CLOCK 61 + ATK_ROLE_PUSH_BUTTON, // nsIAccessible::ROLE_SPLITBUTTON 62 + ATK_ROLE_UNKNOWN, // nsIAccessible::ROLE_IPADDRESS 63 + ATK_ROLE_ACCEL_LABEL, // nsIAccessible::ROLE_ACCEL_LABEL 64 + ATK_ROLE_ARROW, // nsIAccessible::ROLE_ARROW 65 + ATK_ROLE_CANVAS, // nsIAccessible::ROLE_CANVAS 66 + ATK_ROLE_CHECK_MENU_ITEM, // nsIAccessible::ROLE_CHECK_MENU_ITEM 67 + ATK_ROLE_COLOR_CHOOSER, // nsIAccessible::ROLE_COLOR_CHOOSER 68 + ATK_ROLE_DATE_EDITOR, // nsIAccessible::ROLE_DATE_EDITOR 69 + ATK_ROLE_DESKTOP_ICON, // nsIAccessible::ROLE_DESKTOP_ICON 70 + ATK_ROLE_DESKTOP_FRAME, // nsIAccessible::ROLE_DESKTOP_FRAME 71 + ATK_ROLE_DIRECTORY_PANE, // nsIAccessible::ROLE_DIRECTORY_PANE 72 + ATK_ROLE_FILE_CHOOSER, // nsIAccessible::ROLE_FILE_CHOOSER 73 + ATK_ROLE_FILLER, // nsIAccessible::ROLE_FILLER 74 + ATK_ROLE_FONT_CHOOSER, // nsIAccessible::ROLE_FONT_CHOOSER 75 + ATK_ROLE_FRAME, // nsIAccessible::ROLE_FRAME 76 + ATK_ROLE_GLASS_PANE, // nsIAccessible::ROLE_GLASS_PANE 77 + ATK_ROLE_HTML_CONTAINER, // nsIAccessible::ROLE_HTML_CONTAINER 78 + ATK_ROLE_ICON, // nsIAccessible::ROLE_ICON 79 + ATK_ROLE_INTERNAL_FRAME, // nsIAccessible::ROLE_INTERNAL_FRAME 80 + ATK_ROLE_LABEL, // nsIAccessible::ROLE_LABEL 81 + ATK_ROLE_LAYERED_PANE, // nsIAccessible::ROLE_LAYERED_PANE 82 + ATK_ROLE_OPTION_PANE, // nsIAccessible::ROLE_OPTION_PANE 83 + ATK_ROLE_PASSWORD_TEXT, // nsIAccessible::ROLE_PASSWORD_TEXT 84 + ATK_ROLE_POPUP_MENU, // nsIAccessible::ROLE_POPUP_MENU 85 + ATK_ROLE_RADIO_MENU_ITEM, // nsIAccessible::ROLE_RADIO_MENU_ITEM 86 + ATK_ROLE_ROOT_PANE, // nsIAccessible::ROLE_ROOT_PANE 87 + ATK_ROLE_SCROLL_PANE, // nsIAccessible::ROLE_SCROLL_PANE 88 + ATK_ROLE_SPLIT_PANE, // nsIAccessible::ROLE_SPLIT_PANE 89 + ATK_ROLE_TABLE_COLUMN_HEADER, // nsIAccessible::ROLE_TABLE_COLUMN_HEADER 90 + ATK_ROLE_TABLE_ROW_HEADER, // nsIAccessible::ROLE_TABLE_ROW_HEADER 91 + ATK_ROLE_TEAR_OFF_MENU_ITEM, // nsIAccessible::ROLE_TEAR_OFF_MENU_ITEM 92 + ATK_ROLE_TERMINAL, // nsIAccessible::ROLE_TERMINAL 93 + ATK_ROLE_TEXT, // nsIAccessible::ROLE_TEXT_CONTAINER 94 + ATK_ROLE_TOGGLE_BUTTON, // nsIAccessible::ROLE_TOGGLE_BUTTON 95 + ATK_ROLE_TREE_TABLE, // nsIAccessible::ROLE_TREE_TABLE 96 + ATK_ROLE_VIEWPORT, // nsIAccessible::ROLE_VIEWPORT 97 + ATK_ROLE_HEADER, // nsIAccessible::ROLE_HEADER 98 + ATK_ROLE_FOOTER, // nsIAccessible::ROLE_FOOTER 99 + ATK_ROLE_PARAGRAPH, // nsIAccessible::ROLE_PARAGRAPH 100 + ATK_ROLE_RULER, // nsIAccessible::ROLE_RULER 101 +#ifdef USE_ATK_ROLE_AUTOCOMPLETE + ATK_ROLE_AUTOCOMPLETE, // nsIAccessible::ROLE_AUTOCOMPLETE 102 +#else + ATK_ROLE_COMBO_BOX, // nsIAccessible::ROLE_AUTOCOMPLETE 102 +#endif + ATK_ROLE_EDITBAR, // nsIAccessible::ROLE_EDITBAR 103 + ATK_ROLE_EMBEDDED, // nsIAccessible::ROLE_EMBEDDED 104 +#ifdef USE_ATK_ROLE_ENTRY + ATK_ROLE_ENTRY, // nsIAccessible::ROLE_ENTRY 105 +#else + ATK_ROLE_TEXT, // nsIAccessible::ROLE_ENTRY 105 +#endif +#ifdef USE_ATK_ROLE_CAPTION + ATK_ROLE_CAPTION, // nsIAccessible::ROLE_CAPTION 106 +#else + ATK_ROLE_LABEL, // nsIAccessible::ROLE_CAPTION 106 +#endif + ATK_ROLE_DOCUMENT_FRAME, // nsIAccessible::ROLE_DOCUMENT_FRAME 107 +#ifdef USE_ATK_ROLE_HEADING + ATK_ROLE_HEADING, // nsIAccessible::ROLE_HEADING 108 +#else + TK_ROLE_TEXT, // nsIAccessible::ROLE_HEADING 108 +#endif +#ifdef USE_ATK_ROLE_PAGE + ATK_ROLE_PAGE, // nsIAccessible::ROLE_PAGE 109 +#else + ATK_ROLE_SECTION, // nsIAccessible::ROLE_PAGE 109 +#endif +#ifdef USE_ATK_ROLE_SECTION + ATK_ROLE_SECTION, // nsIAccessible::ROLE_SECTION 110 +#else + ATK_ROLE_TEXT, // nsIAccessible::ROLE_SECTION 110 +#endif +#ifdef USE_ATK_ROLE_REDUNDANT_OBJECT + ATK_ROLE_REDUNDANT_OBJECT, // nsIAccessible::ROLE_REDUNDANT_OBJECT 111 +#else + ATK_ROLE_INVALD, // nsIAccessible::ROLE_REDUNDANT_OBJECT 111 +#endif +#ifdef USE_ATK_ROLE_FORM + ATK_ROLE_FORM, // nsIAccessible::ROLE_FORM 112 +#else + ATK_ROLE_PANEL, // nsIAccessible::ROLE_FORM 112 +#endif +#ifdef USE_ATK_ROLE_INPUT_METHOD_WINDOW + ATK_ROLE_INPUT_METHOD_WINDOW // nsIAccessible::ROLE_IME 113 +#else + ATK_ROLE_INVALID // nsIAccessible::ROLE_IME 113 +#endif + ROLE_ATK_LAST_ENTRY // nsIAccessible::ROLE_LAST_ENTRY +}; + diff --git a/accessible/src/msaa/nsAccessibleWrap.cpp b/accessible/src/msaa/nsAccessibleWrap.cpp index f9b4380a640f..00dbeee7fdaa 100644 --- a/accessible/src/msaa/nsAccessibleWrap.cpp +++ b/accessible/src/msaa/nsAccessibleWrap.cpp @@ -50,6 +50,7 @@ #include "nsIServiceManager.h" #include "nsTextFormatter.h" #include "nsIView.h" +#include "nsRoleMap.h" // for the COM IEnumVARIANT solution in get_AccSelection() #define _ATLBASE_IMPL @@ -433,19 +434,17 @@ STDMETHODIMP nsAccessibleWrap::get_accRole( if (!xpAccessible) return E_FAIL; - PRUint32 role = 0; - if (NS_FAILED(xpAccessible->GetFinalRole(&role))) + PRUint32 xpRole = 0, msaaRole = 0; + if (NS_FAILED(xpAccessible->GetFinalRole(&xpRole))) return E_FAIL; - - // Begin check for extended roles that need to be mapped to something known - if (role == ROLE_ENTRY || role == ROLE_PASSWORD_TEXT) { - role = ROLE_TEXT_LEAF; - } + msaaRole = msaaRoleMap[xpRole]; + NS_ASSERTION(msaaRoleMap[nsIAccessible::ROLE_LAST_ENTRY] == ROLE_MSAA_LAST_ENTRY, + "MSAA role map skewed"); // -- Try enumerated role - if (role != ROLE_NOTHING && role != ROLE_CLIENT) { + if (msaaRole != USE_ROLE_STRING) { pvarRole->vt = VT_I4; - pvarRole->lVal = role; // Normal enumerated role + pvarRole->lVal = msaaRole; // Normal enumerated role return S_OK; } @@ -460,7 +459,7 @@ STDMETHODIMP nsAccessibleWrap::get_accRole( NS_ASSERTION(content, "No content for accessible"); if (content && content->IsNodeOfType(nsINode::eELEMENT)) { nsAutoString roleString; - if (role != ROLE_CLIENT && GetRoleAttribute(content, roleString)) { + if (msaaRole != ROLE_CLIENT && GetRoleAttribute(content, roleString)) { nsINodeInfo *nodeInfo = content->NodeInfo(); nodeInfo->GetName(roleString); nsAutoString nameSpaceURI; diff --git a/accessible/src/msaa/nsRoleMap.h b/accessible/src/msaa/nsRoleMap.h new file mode 100644 index 000000000000..e942eaaafc78 --- /dev/null +++ b/accessible/src/msaa/nsRoleMap.h @@ -0,0 +1,165 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vim:expandtab:shiftwidth=4:tabstop=4: + */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is IBM Corporation + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Gao, Ming (gaoming@cn.ibm.com) + * Aaron Leventhal (aleventh@us.ibm.com) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "OLEACC.H" + +#define USE_ROLE_STRING 0 +#define ROLE_MSAA_LAST_ENTRY -1 + +// Map array from cross platform roles to MSAA roles +PRUint32 msaaRoleMap[] = { + USE_ROLE_STRING, // nsIAccessible::ROLE_NOTHING + ROLE_SYSTEM_TITLEBAR, // nsIAccessible::ROLE_TITLEBAR + ROLE_SYSTEM_MENUBAR, // nsIAccessible::ROLE_MENUBAR + ROLE_SYSTEM_SCROLLBAR, // nsIAccessible::ROLE_SCROLLBAR + ROLE_SYSTEM_GRIP, // nsIAccessible::ROLE_GRIP + ROLE_SYSTEM_SOUND, // nsIAccessible::ROLE_SOUND + ROLE_SYSTEM_CURSOR, // nsIAccessible::ROLE_CURSOR + ROLE_SYSTEM_CARET, // nsIAccessible::ROLE_CARET + ROLE_SYSTEM_ALERT, // nsIAccessible::ROLE_ALERT + ROLE_SYSTEM_WINDOW, // nsIAccessible::ROLE_WINDOW + USE_ROLE_STRING, // nsIAccessible::ROLE_CLIENT + ROLE_SYSTEM_MENUPOPUP, // nsIAccessible::ROLE_MENUPOPUP + ROLE_SYSTEM_MENUITEM, // nsIAccessible::ROLE_MENUITEM + ROLE_SYSTEM_TOOLTIP, // nsIAccessible::ROLE_TOOLTIP + ROLE_SYSTEM_APPLICATION, // nsIAccessible::ROLE_APPLICATION + ROLE_SYSTEM_DOCUMENT, // nsIAccessible::ROLE_DOCUMENT + ROLE_SYSTEM_PANE, // nsIAccessible::ROLE_PANE + ROLE_SYSTEM_CHART, // nsIAccessible::ROLE_CHART + ROLE_SYSTEM_DIALOG, // nsIAccessible::ROLE_DIALOG + ROLE_SYSTEM_BORDER, // nsIAccessible::ROLE_BORDER + ROLE_SYSTEM_GROUPING, // nsIAccessible::ROLE_GROUPING + ROLE_SYSTEM_SEPARATOR, // nsIAccessible::ROLE_SEPARATOR + ROLE_SYSTEM_TOOLBAR, // nsIAccessible::ROLE_TOOLBAR + ROLE_SYSTEM_STATUSBAR, // nsIAccessible::ROLE_STATUSBAR + ROLE_SYSTEM_TABLE, // nsIAccessible::ROLE_TABLE + ROLE_SYSTEM_COLUMNHEADER, // nsIAccessible::ROLE_COLUMNHEADER, + ROLE_SYSTEM_ROWHEADER, // nsIAccessible::ROLE_ROWHEADER + ROLE_SYSTEM_COLUMN, // nsIAccessible::ROLE_COLUMN + ROLE_SYSTEM_ROW, // nsIAccessible::ROLE_ROW + ROLE_SYSTEM_CELL, // nsIAccessible::ROLE_CELL + ROLE_SYSTEM_LINK, // nsIAccessible::ROLE_LINK + ROLE_SYSTEM_HELPBALLOON, // nsIAccessible::ROLE_HELPBALLOON + ROLE_SYSTEM_CHARACTER, // nsIAccessible::ROLE_CHARACTER + ROLE_SYSTEM_LIST, // nsIAccessible::ROLE_LIST + ROLE_SYSTEM_LISTITEM, // nsIAccessible::ROLE_LISTITEM + ROLE_SYSTEM_OUTLINE, // nsIAccessible::ROLE_OUTLINE + ROLE_SYSTEM_OUTLINEITEM, // nsIAccessible::ROLE_OUTLINEITEM + ROLE_SYSTEM_PAGETAB, // nsIAccessible::ROLE_PAGETAB + ROLE_SYSTEM_PROPERTYPAGE, // nsIAccessible::ROLE_PROPERTYPAGE + ROLE_SYSTEM_INDICATOR, // nsIAccessible::ROLE_INDICATOR + ROLE_SYSTEM_GRAPHIC, // nsIAccessible::ROLE_GRAPHIC + ROLE_SYSTEM_STATICTEXT, // nsIAccessible::ROLE_STATICTEXT + ROLE_SYSTEM_TEXT, // nsIAccessible::ROLE_TEXT_LEAF + ROLE_SYSTEM_PUSHBUTTON, // nsIAccessible::ROLE_PUSHBUTTON + ROLE_SYSTEM_CHECKBUTTON, // nsIAccessible::ROLE_CHECKBUTTON + ROLE_SYSTEM_RADIOBUTTON, // nsIAccessible::ROLE_RADIOBUTTON + ROLE_SYSTEM_COMBOBOX, // nsIAccessible::ROLE_COMBOBOX + ROLE_SYSTEM_DROPLIST, // nsIAccessible::ROLE_DROPLIST + ROLE_SYSTEM_PROGRESSBAR, // nsIAccessible::ROLE_PROGRESSBAR + ROLE_SYSTEM_DIAL, // nsIAccessible::ROLE_DIAL + ROLE_SYSTEM_HOTKEYFIELD, // nsIAccessible::ROLE_HOTKEYFIELD + ROLE_SYSTEM_SLIDER, // nsIAccessible::ROLE_SLIDER + ROLE_SYSTEM_SPINBUTTON, // nsIAccessible::ROLE_SPINBUTTON + ROLE_SYSTEM_DIAGRAM, // nsIAccessible::ROLE_DIAGRAM + ROLE_SYSTEM_ANIMATION, // nsIAccessible::ROLE_ANIMATION + ROLE_SYSTEM_EQUATION, // nsIAccessible::ROLE_EQUATION + ROLE_SYSTEM_BUTTONDROPDOWN, // nsIAccessible::ROLE_BUTTONDROPDOWN + ROLE_SYSTEM_BUTTONMENU, // nsIAccessible::ROLE_BUTTONMENU + ROLE_SYSTEM_BUTTONDROPDOWNGRID, // nsIAccessible::ROLE_BUTTONDROPDOWNGRID + ROLE_SYSTEM_WHITESPACE, // nsIAccessible::ROLE_WHITESPACE + ROLE_SYSTEM_PAGETABLIST, // nsIAccessible::ROLE_PAGETABLIST + ROLE_SYSTEM_CLOCK, // nsIAccessible::ROLE_CLOCK + ROLE_SYSTEM_SPLITBUTTON, // nsIAccessible::ROLE_SPLITBUTTON + ROLE_SYSTEM_IPADDRESS, // nsIAccessible::ROLE_IPADDRESS + // Make up for ATK roles that we don't have in MSAA. When in doubt + // map them to USE_ROLE_STRING so that the role string is exposed + ROLE_SYSTEM_STATICTEXT, // nsIAccessible::ROLE_ACCEL_LABEL + ROLE_SYSTEM_INDICATOR, // nsIAccessible::ROLE_ARROW + USE_ROLE_STRING, // nsIAccessible::ROLE_CANVAS + ROLE_SYSTEM_MENUITEM, // nsIAccessible::ROLE_CHECK_MENU_ITEM + ROLE_SYSTEM_DIALOG, // nsIAccessible::ROLE_COLOR_CHOOSER + USE_ROLE_STRING, // nsIAccessible::ROLE_DATE_EDITOR + USE_ROLE_STRING, // nsIAccessible::ROLE_DESKTOP_ICON + USE_ROLE_STRING, // nsIAccessible::ROLE_DESKTOP_FRAME + USE_ROLE_STRING, // nsIAccessible::ROLE_DIRECTORY_PANE + USE_ROLE_STRING, // nsIAccessible::ROLE_FILE_CHOOSER + USE_ROLE_STRING, // nsIAccessible::ROLE_FILLER + USE_ROLE_STRING, // nsIAccessible::ROLE_FONT_CHOOSER + USE_ROLE_STRING, // nsIAccessible::ROLE_FRAME + USE_ROLE_STRING, // nsIAccessible::ROLE_GLASS_PANE + USE_ROLE_STRING, // nsIAccessible::ROLE_HTML_CONTAINER + ROLE_SYSTEM_PUSHBUTTON, // nsIAccessible::ROLE_ICON + USE_ROLE_STRING, // nsIAccessible::ROLE_INTERNAL_FRAME + ROLE_SYSTEM_STATICTEXT, // nsIAccessible::ROLE_LABEL + USE_ROLE_STRING, // nsIAccessible::ROLE_LAYERED_PANE + USE_ROLE_STRING, // nsIAccessible::ROLE_OPTION_PANE + ROLE_SYSTEM_TEXT, // nsIAccessible::ROLE_PASSWORD_TEXT + ROLE_SYSTEM_MENUPOPUP, // nsIAccessible::ROLE_POPUP_MENU + ROLE_SYSTEM_MENUITEM, // nsIAccessible::ROLE_RADIO_MENU_ITEM + USE_ROLE_STRING, // nsIAccessible::ROLE_ROOT_PANE + USE_ROLE_STRING, // nsIAccessible::ROLE_SCROLL_PANE + USE_ROLE_STRING, // nsIAccessible::ROLE_SPLIT_PANE + ROLE_SYSTEM_COLUMNHEADER, // nsIAccessible::ROLE_TABLE_COLUMN_HEADER + ROLE_SYSTEM_ROWHEADER, // nsIAccessible::ROLE_TABLE_ROW_HEADER + ROLE_SYSTEM_MENUITEM, // nsIAccessible::ROLE_TEAR_OFF_MENU_ITEM + USE_ROLE_STRING, // nsIAccessible::ROLE_TERMINAL + USE_ROLE_STRING, // nsIAccessible::ROLE_TEXT_CONTAINER + USE_ROLE_STRING, // nsIAccessible::ROLE_TOGGLE_BUTTON + ROLE_SYSTEM_OUTLINE, // nsIAccessible::ROLE_TREE_TABLE + ROLE_SYSTEM_PANE, // nsIAccessible::ROLE_VIEWPORT + USE_ROLE_STRING, // nsIAccessible::ROLE_HEADER + USE_ROLE_STRING, // nsIAccessible::ROLE_FOOTER + USE_ROLE_STRING, // nsIAccessible::ROLE_PARAGRAPH + USE_ROLE_STRING, // nsIAccessible::ROLE_RULER + ROLE_SYSTEM_COMBOBOX, // nsIAccessible::ROLE_AUTOCOMPLETE + ROLE_SYSTEM_TEXT, // nsIAccessible::ROLE_EDITBAR + USE_ROLE_STRING, // nsIAccessible::ROLE_EMBEDDED + ROLE_SYSTEM_TEXT, // nsIAccessible::ROLE_ENTRY + USE_ROLE_STRING, // nsIAccessible::ROLE_CAPTION + USE_ROLE_STRING, // nsIAccessible::ROLE_DOCUMENT_FRAME + USE_ROLE_STRING, // nsIAccessible::ROLE_HEADING + USE_ROLE_STRING, // nsIAccessible::ROLE_PAGE + USE_ROLE_STRING, // nsIAccessible::ROLE_SECTION + USE_ROLE_STRING, // nsIAccessible::ROLE_REDUNDANT_OBJECT + USE_ROLE_STRING, // nsIAccessible::ROLE_FORM + USE_ROLE_STRING, // nsIAccessible::ROLE_IME + ROLE_MSAA_LAST_ENTRY // nsIAccessible::ROLE_LAST_ENTRY +};