Bug 716644 - expandoify accessible roles, r=tbsaunde

This commit is contained in:
Andrzej Skalski 2012-04-26 20:25:33 +02:00
Родитель b15cbbbb14
Коммит f33fd848b9
17 изменённых файлов: 1034 добавлений и 1018 удалений

Просмотреть файл

@ -40,11 +40,8 @@
/**
* Defines cross platform (Gecko) roles.
*
* @note - When adding a new role, be sure to also add it to nsRoleMap.h for
* each platform.
*/
[scriptable, uuid(f134da65-39a8-4330-843c-5bd42780b34c)]
[scriptable, uuid(50db5e86-9a45-4637-a5c3-4ff148c33270)]
interface nsIAccessibleRole : nsISupports
{
/**
@ -811,11 +808,5 @@ interface nsIAccessibleRole : nsISupports
* An HTML definition <dd>
*/
const unsigned long ROLE_DEFINITION = 128;
/**
* It's not role actually. This constant is important to help ensure
* nsRoleMap's are synchronized.
*/
const unsigned long ROLE_LAST_ENTRY = 129;
};

Просмотреть файл

@ -53,7 +53,6 @@
#include "nsString.h"
#include "nsAutoPtr.h"
#include "prprf.h"
#include "nsRoleMap.h"
#include "nsStateMap.h"
#include "Relation.h"
#include "States.h"
@ -722,24 +721,20 @@ getDescriptionCB(AtkObject *aAtkObj)
AtkRole
getRoleCB(AtkObject *aAtkObj)
{
nsAccessibleWrap *accWrap = GetAccessibleWrap(aAtkObj);
if (!accWrap) {
return ATK_ROLE_INVALID;
}
nsAccessibleWrap* accWrap = GetAccessibleWrap(aAtkObj);
if (!accWrap)
return ATK_ROLE_INVALID;
#ifdef DEBUG_A11Y
NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(accWrap),
"Does not support nsIAccessibleText when it should");
NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(accWrap),
"Does not support nsIAccessibleText when it should");
#endif
if (aAtkObj->role == ATK_ROLE_INVALID) {
// map to the actual value
PRUint32 atkRole = atkRoleMap[accWrap->Role()];
NS_ASSERTION(atkRoleMap[nsIAccessibleRole::ROLE_LAST_ENTRY] ==
kROLE_ATK_LAST_ENTRY, "ATK role map skewed");
aAtkObj->role = static_cast<AtkRole>(atkRole);
}
if (aAtkObj->role != ATK_ROLE_INVALID)
return aAtkObj->role;
return aAtkObj->role =
static_cast<AtkRole>(nsAccessibleWrap::AtkRoleFor(accWrap->Role()));
}
AtkAttributeSet*
@ -1400,3 +1395,19 @@ nsAccessibleWrap::FireAtkShowHideEvent(AccEvent* aEvent,
return NS_OK;
}
PRUint32
nsAccessibleWrap::AtkRoleFor(role aRole)
{
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::geckoRole: \
return atkRole;
switch (aRole) {
#include "RoleMap.h"
default:
MOZ_NOT_REACHED("Unknown role.");
return ATK_ROLE_UNKNOWN;
}
#undef ROLE
}

Просмотреть файл

@ -116,6 +116,11 @@ public:
return returnedString.get();
}
/**
* Function mapping from cross platform roles to ATK roles.
*/
inline static PRUint32 AtkRoleFor(mozilla::a11y::role aRole);
protected:
virtual nsresult FirePlatformEvent(AccEvent* aEvent);

Просмотреть файл

@ -42,7 +42,6 @@
#include "nsHyperTextAccessible.h"
#include "nsMai.h"
#include "nsRoleMap.h"
#include "nsIPersistentProperties2.h"
@ -52,7 +51,7 @@ static void
ConvertTexttoAsterisks(nsAccessibleWrap* accWrap, nsAString& aString)
{
// convert each char to "*" when it's "password text"
PRUint32 atkRole = atkRoleMap[accWrap->NativeRole()];
PRUint32 atkRole = nsAccessibleWrap::AtkRoleFor(accWrap->NativeRole());
if (atkRole == ATK_ROLE_PASSWORD_TEXT) {
for (PRUint32 i = 0; i < aString.Length(); i++)
aString.Replace(i, 1, NS_LITERAL_STRING("*"));
@ -161,7 +160,7 @@ getCharacterAtOffsetCB(AtkText *aText, gint aOffset)
accText->GetCharacterAtOffset(aOffset, &uniChar);
// convert char to "*" when it's "password text"
PRUint32 atkRole = atkRoleMap[accWrap->NativeRole()];
PRUint32 atkRole = nsAccessibleWrap::AtkRoleFor(accWrap->NativeRole());
if (atkRole == ATK_ROLE_PASSWORD_TEXT)
uniChar = '*';

Просмотреть файл

@ -1,179 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* ***** 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"
const PRUint32 kROLE_ATK_LAST_ENTRY = 0xffffffff;
// Map array from cross platform roles to ATK roles
static const PRUint32 atkRoleMap[] = {
// Cross Platform Roles #
ATK_ROLE_UNKNOWN, // roles::NOTHING 0
ATK_ROLE_UNKNOWN, // roles::TITLEBAR 1
ATK_ROLE_MENU_BAR, // roles::MENUBAR 2
ATK_ROLE_SCROLL_BAR, // roles::SCROLLBAR 3
ATK_ROLE_UNKNOWN, // roles::GRIP 4
ATK_ROLE_UNKNOWN, // roles::SOUND 5
ATK_ROLE_UNKNOWN, // roles::CURSOR 6
ATK_ROLE_UNKNOWN, // roles::CARET 7
ATK_ROLE_ALERT, // roles::ALERT 8
ATK_ROLE_WINDOW, // roles::WINDOW 9
ATK_ROLE_INTERNAL_FRAME, // roles::INTERNAL_FRAME 10
ATK_ROLE_MENU, // roles::MENUPOPUP 11
ATK_ROLE_MENU_ITEM, // roles::MENUITEM 12
ATK_ROLE_TOOL_TIP, // roles::TOOLTIP 13
ATK_ROLE_EMBEDDED, // roles::APPLICATION 14
ATK_ROLE_DOCUMENT_FRAME, // roles::DOCUMENT 15
ATK_ROLE_PANEL, // roles::PANE 16
ATK_ROLE_CHART, // roles::CHART 17
ATK_ROLE_DIALOG, // roles::DIALOG 18
ATK_ROLE_UNKNOWN, // roles::BORDER 19
ATK_ROLE_PANEL, // roles::GROUPING 20
ATK_ROLE_SEPARATOR, // roles::SEPARATOR 21
ATK_ROLE_TOOL_BAR, // roles::TOOLBAR 22
ATK_ROLE_STATUSBAR, // roles::STATUSBAR 23
ATK_ROLE_TABLE, // roles::TABLE 24
ATK_ROLE_COLUMN_HEADER, // roles::COLUMNHEADER 25
ATK_ROLE_ROW_HEADER, // roles::ROWHEADER 26
ATK_ROLE_UNKNOWN, // roles::COLUMN 27
ATK_ROLE_LIST_ITEM, // roles::ROW 28
ATK_ROLE_TABLE_CELL, // roles::CELL 29
ATK_ROLE_LINK, // roles::LINK 30
ATK_ROLE_UNKNOWN, // roles::HELPBALLOON 31
ATK_ROLE_IMAGE, // roles::CHARACTER 32
ATK_ROLE_LIST, // roles::LIST 33
ATK_ROLE_LIST_ITEM, // roles::LISTITEM 34
ATK_ROLE_TREE, // roles::OUTLINE 35
ATK_ROLE_LIST_ITEM, // roles::OUTLINEITEM 36
ATK_ROLE_PAGE_TAB, // roles::PAGETAB 37
ATK_ROLE_SCROLL_PANE, // roles::PROPERTYPAGE 38
ATK_ROLE_UNKNOWN, // roles::INDICATOR 39
ATK_ROLE_IMAGE, // roles::GRAPHIC 40
ATK_ROLE_UNKNOWN, // roles::STATICTEXT 41
ATK_ROLE_UNKNOWN, // roles::TEXT_LEAF 42
ATK_ROLE_PUSH_BUTTON, // roles::PUSHBUTTON 43
ATK_ROLE_CHECK_BOX, // roles::CHECKBUTTON 44
ATK_ROLE_RADIO_BUTTON, // roles::RADIOBUTTON 45
ATK_ROLE_COMBO_BOX, // roles::COMBOBOX 46
ATK_ROLE_COMBO_BOX, // roles::DROPLIST 47
ATK_ROLE_PROGRESS_BAR, // roles::PROGRESSBAR 48
ATK_ROLE_DIAL, // roles::DIAL 49
ATK_ROLE_UNKNOWN, // roles::HOTKEYFIELD 50
ATK_ROLE_SLIDER, // roles::SLIDER 51
ATK_ROLE_SPIN_BUTTON, // roles::SPINBUTTON 52
ATK_ROLE_IMAGE, // roles::DIAGRAM 53
ATK_ROLE_ANIMATION, // roles::ANIMATION 54
ATK_ROLE_UNKNOWN, // roles::EQUATION 55
ATK_ROLE_PUSH_BUTTON, // roles::BUTTONDROPDOWN 56
ATK_ROLE_PUSH_BUTTON, // roles::BUTTONMENU 57
ATK_ROLE_UNKNOWN, // roles::BUTTONDROPDOWNGRID 58
ATK_ROLE_UNKNOWN, // roles::WHITESPACE 59
ATK_ROLE_PAGE_TAB_LIST, // roles::PAGETABLIST 60
ATK_ROLE_UNKNOWN, // roles::CLOCK 61
ATK_ROLE_PUSH_BUTTON, // roles::SPLITBUTTON 62
ATK_ROLE_UNKNOWN, // roles::IPADDRESS 63
ATK_ROLE_ACCEL_LABEL, // roles::ACCEL_LABEL 64
ATK_ROLE_ARROW, // roles::ARROW 65
ATK_ROLE_CANVAS, // roles::CANVAS 66
ATK_ROLE_CHECK_MENU_ITEM, // roles::CHECK_MENU_ITEM 67
ATK_ROLE_COLOR_CHOOSER, // roles::COLOR_CHOOSER 68
ATK_ROLE_DATE_EDITOR, // roles::DATE_EDITOR 69
ATK_ROLE_DESKTOP_ICON, // roles::DESKTOP_ICON 70
ATK_ROLE_DESKTOP_FRAME, // roles::DESKTOP_FRAME 71
ATK_ROLE_DIRECTORY_PANE, // roles::DIRECTORY_PANE 72
ATK_ROLE_FILE_CHOOSER, // roles::FILE_CHOOSER 73
ATK_ROLE_FONT_CHOOSER, // roles::FONT_CHOOSER 74
ATK_ROLE_FRAME, // roles::CHROME_WINDOW 75
ATK_ROLE_GLASS_PANE, // roles::GLASS_PANE 76
ATK_ROLE_HTML_CONTAINER, // roles::HTML_CONTAINER 77
ATK_ROLE_ICON, // roles::ICON 78
ATK_ROLE_LABEL, // roles::LABEL 79
ATK_ROLE_LAYERED_PANE, // roles::LAYERED_PANE 80
ATK_ROLE_OPTION_PANE, // roles::OPTION_PANE 81
ATK_ROLE_PASSWORD_TEXT, // roles::PASSWORD_TEXT 82
ATK_ROLE_POPUP_MENU, // roles::POPUP_MENU 83
ATK_ROLE_RADIO_MENU_ITEM, // roles::RADIO_MENU_ITEM 84
ATK_ROLE_ROOT_PANE, // roles::ROOT_PANE 85
ATK_ROLE_SCROLL_PANE, // roles::SCROLL_PANE 86
ATK_ROLE_SPLIT_PANE, // roles::SPLIT_PANE 87
ATK_ROLE_TABLE_COLUMN_HEADER, // roles::TABLE_COLUMN_HEADER 88
ATK_ROLE_TABLE_ROW_HEADER, // roles::TABLE_ROW_HEADER 89
ATK_ROLE_TEAR_OFF_MENU_ITEM, // roles::TEAR_OFF_MENU_ITEM 90
ATK_ROLE_TERMINAL, // roles::TERMINAL 91
ATK_ROLE_TEXT, // roles::TEXT_CONTAINER 92
ATK_ROLE_TOGGLE_BUTTON, // roles::TOGGLE_BUTTON 93
ATK_ROLE_TREE_TABLE, // roles::TREE_TABLE 94
ATK_ROLE_VIEWPORT, // roles::VIEWPORT 95
ATK_ROLE_HEADER, // roles::HEADER 96
ATK_ROLE_FOOTER, // roles::FOOTER 97
ATK_ROLE_PARAGRAPH, // roles::PARAGRAPH 98
ATK_ROLE_RULER, // roles::RULER 99
ATK_ROLE_AUTOCOMPLETE, // roles::AUTOCOMPLETE 100
ATK_ROLE_EDITBAR, // roles::EDITBAR 101
ATK_ROLE_ENTRY, // roles::ENTRY 102
ATK_ROLE_CAPTION, // roles::CAPTION 103
ATK_ROLE_DOCUMENT_FRAME, // roles::DOCUMENT_FRAME 104
ATK_ROLE_HEADING, // roles::HEADING 105
ATK_ROLE_PAGE, // roles::PAGE 106
ATK_ROLE_SECTION, // roles::SECTION 107
ATK_ROLE_REDUNDANT_OBJECT, // roles::REDUNDANT_OBJECT 108
ATK_ROLE_FORM, // roles::FORM 109
ATK_ROLE_INPUT_METHOD_WINDOW, // roles::IME 110
ATK_ROLE_APPLICATION, // roles::APP_ROOT 111
ATK_ROLE_MENU, // roles::PARENT_MENUITEM 112
ATK_ROLE_CALENDAR, // roles::CALENDAR 113
ATK_ROLE_MENU, // roles::COMBOBOX_LIST 114
ATK_ROLE_MENU_ITEM, // roles::COMBOBOX_OPTION 115
ATK_ROLE_IMAGE, // roles::IMAGE_MAP 116
ATK_ROLE_LIST_ITEM, // roles::OPTION 117
ATK_ROLE_LIST_ITEM, // roles::RICH_OPTION 118
ATK_ROLE_LIST, // roles::LISTBOX 119
ATK_ROLE_UNKNOWN, // roles::FLAT_EQUATION 120
ATK_ROLE_TABLE_CELL, // roles::GRID_CELL 121
ATK_ROLE_PANEL, // roles::EMBEDDED_OBJECT 122
ATK_ROLE_SECTION, // roles::NOTE 123
ATK_ROLE_PANEL, // roles::FIGURE 124
ATK_ROLE_CHECK_BOX, // roles::CHECK_RICH_OPTION 125
ATK_ROLE_LIST, // roles::DEFINITION_LIST 126
ATK_ROLE_LIST_ITEM, // roles::TERM 127
ATK_ROLE_PARAGRAPH, // roles::DEFINITION 128
kROLE_ATK_LAST_ENTRY // roles::LAST_ENTRY
};

Просмотреть файл

@ -41,13 +41,16 @@
#define _role_h_
/**
* Note: Make sure to update the localized role names when changing the list.
* @note Make sure to update the localized role names when changing the list.
* @note When adding a new role, be sure to also add it to base/RoleMap.h and
* update nsIAccessibleRole.
*/
namespace mozilla {
namespace a11y {
namespace roles {
enum Role {
enum Role {
/**
* Used when accessible hans't strong defined role.
*/
@ -812,15 +815,12 @@ namespace roles {
* Represent a definition in a definition list (dd in HTML)
*/
DEFINITION = 128,
};
/**
* It's not role actually. This constant is important to help ensure
* nsRoleMap's are synchronized.
*/
LAST_ENTRY = 129
};
} // namespace role
typedef enum mozilla::a11y::roles::Role role;
} // namespace a11y
} // namespace mozilla

Просмотреть файл

@ -0,0 +1,920 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* Usage: declare the macro ROLE()with the following arguments:
* ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role)
*/
ROLE(NOTHING,
"nothing",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_UNKNOWN)
ROLE(TITLEBAR,
"titlebar",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Irrelevant on OS X; windows are always native.
ROLE_SYSTEM_TITLEBAR,
ROLE_SYSTEM_TITLEBAR)
ROLE(MENUBAR,
"menubar",
ATK_ROLE_MENU_BAR,
NSAccessibilityMenuBarRole, //Irrelevant on OS X; the menubar will always be native and on the top of the screen.
ROLE_SYSTEM_MENUBAR,
ROLE_SYSTEM_MENUBAR)
ROLE(SCROLLBAR,
"scrollbar",
ATK_ROLE_SCROLL_BAR,
NSAccessibilityScrollBarRole, //We might need to make this its own mozAccessible, to support the children objects (valueindicator, down/up buttons).
ROLE_SYSTEM_SCROLLBAR,
ROLE_SYSTEM_SCROLLBAR)
ROLE(GRIP,
"grip",
ATK_ROLE_UNKNOWN,
NSAccessibilitySplitterRole,
ROLE_SYSTEM_GRIP,
ROLE_SYSTEM_GRIP)
ROLE(SOUND,
"sound",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Unused on OS X.
ROLE_SYSTEM_SOUND,
ROLE_SYSTEM_SOUND)
ROLE(CURSOR,
"cursor",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Unused on OS X.
ROLE_SYSTEM_CURSOR,
ROLE_SYSTEM_CURSOR)
ROLE(CARET,
"caret",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Unused on OS X.
ROLE_SYSTEM_CARET,
ROLE_SYSTEM_CARET)
ROLE(ALERT,
"alert",
ATK_ROLE_ALERT,
NSAccessibilityWindowRole,
ROLE_SYSTEM_ALERT,
ROLE_SYSTEM_ALERT)
ROLE(WINDOW,
"window",
ATK_ROLE_WINDOW,
NSAccessibilityWindowRole, //Irrelevant on OS X; all window a11y is handled by the system.
ROLE_SYSTEM_WINDOW,
ROLE_SYSTEM_WINDOW)
ROLE(INTERNAL_FRAME,
"internal frame",
ATK_ROLE_INTERNAL_FRAME,
NSAccessibilityScrollAreaRole,
USE_ROLE_STRING,
IA2_ROLE_INTERNAL_FRAME)
ROLE(MENUPOPUP,
"menupopup",
ATK_ROLE_MENU,
NSAccessibilityMenuRole, //The parent of menuitems.
ROLE_SYSTEM_MENUPOPUP,
ROLE_SYSTEM_MENUPOPUP)
ROLE(MENUITEM,
"menuitem",
ATK_ROLE_MENU_ITEM,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_MENUITEM,
ROLE_SYSTEM_MENUITEM)
ROLE(TOOLTIP,
"tooltip",
ATK_ROLE_TOOL_TIP,
@"AXHelpTag", //10.4+ only, so we re-define the constant.
ROLE_SYSTEM_TOOLTIP,
ROLE_SYSTEM_TOOLTIP)
ROLE(APPLICATION,
"application",
ATK_ROLE_EMBEDDED,
NSAccessibilityGroupRole, //Unused on OS X. the system will take care of this.
ROLE_SYSTEM_APPLICATION,
ROLE_SYSTEM_APPLICATION)
ROLE(DOCUMENT,
"document",
ATK_ROLE_DOCUMENT_FRAME,
@"AXWebArea",
ROLE_SYSTEM_DOCUMENT,
ROLE_SYSTEM_DOCUMENT)
/**
* msaa comment:
* We used to map to ROLE_SYSTEM_PANE, but JAWS would
* not read the accessible name for the contaning pane.
* However, JAWS will read the accessible name for a groupbox.
* By mapping a PANE to a GROUPING, we get no undesirable effects,
* but fortunately JAWS will then read the group's label,
* when an inner control gets focused.
*/
ROLE(PANE,
"pane",
ATK_ROLE_PANEL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_GROUPING,
ROLE_SYSTEM_GROUPING)
ROLE(CHART,
"chart",
ATK_ROLE_CHART,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_CHART,
ROLE_SYSTEM_CHART)
ROLE(DIALOG,
"dialog",
ATK_ROLE_DIALOG,
NSAccessibilityWindowRole, //There's a dialog subrole.
ROLE_SYSTEM_DIALOG,
ROLE_SYSTEM_DIALOG)
ROLE(BORDER,
"border",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Unused on OS X.
ROLE_SYSTEM_BORDER,
ROLE_SYSTEM_BORDER)
ROLE(GROUPING,
"grouping",
ATK_ROLE_PANEL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_GROUPING,
ROLE_SYSTEM_GROUPING)
ROLE(SEPARATOR,
"separator",
ATK_ROLE_SEPARATOR,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_SEPARATOR,
ROLE_SYSTEM_SEPARATOR)
ROLE(TOOLBAR,
"toolbar",
ATK_ROLE_TOOL_BAR,
NSAccessibilityToolbarRole,
ROLE_SYSTEM_TOOLBAR,
ROLE_SYSTEM_TOOLBAR)
ROLE(STATUSBAR,
"statusbar",
ATK_ROLE_STATUSBAR,
NSAccessibilityUnknownRole, //Doesn't exist on OS X (a status bar is its parts; a progressbar, a label, etc.)
ROLE_SYSTEM_STATUSBAR,
ROLE_SYSTEM_STATUSBAR)
ROLE(TABLE,
"table",
ATK_ROLE_TABLE,
NSAccessibilityGroupRole,
ROLE_SYSTEM_TABLE,
ROLE_SYSTEM_TABLE)
ROLE(COLUMNHEADER,
"columnheader",
ATK_ROLE_COLUMN_HEADER,
NSAccessibilityGroupRole,
ROLE_SYSTEM_COLUMNHEADER,
ROLE_SYSTEM_COLUMNHEADER)
ROLE(ROWHEADER,
"rowheader",
ATK_ROLE_ROW_HEADER,
NSAccessibilityGroupRole,
ROLE_SYSTEM_ROWHEADER,
ROLE_SYSTEM_ROWHEADER)
ROLE(COLUMN,
"column",
ATK_ROLE_UNKNOWN,
NSAccessibilityColumnRole,
ROLE_SYSTEM_COLUMN,
ROLE_SYSTEM_COLUMN)
ROLE(ROW,
"row",
ATK_ROLE_LIST_ITEM,
NSAccessibilityRowRole,
ROLE_SYSTEM_ROW,
ROLE_SYSTEM_ROW)
ROLE(CELL,
"cell",
ATK_ROLE_TABLE_CELL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_CELL,
ROLE_SYSTEM_CELL)
ROLE(LINK,
"link",
ATK_ROLE_LINK,
@"AXLink", //10.4+ the attr first define in SDK 10.4, so we define it here too. ROLE_LINK
ROLE_SYSTEM_LINK,
ROLE_SYSTEM_LINK)
ROLE(HELPBALLOON,
"helpballoon",
ATK_ROLE_UNKNOWN,
@"AXHelpTag",
ROLE_SYSTEM_HELPBALLOON,
ROLE_SYSTEM_HELPBALLOON)
ROLE(CHARACTER,
"character",
ATK_ROLE_IMAGE,
NSAccessibilityUnknownRole, //Unused on OS X.
ROLE_SYSTEM_CHARACTER,
ROLE_SYSTEM_CHARACTER)
ROLE(LIST,
"list",
ATK_ROLE_LIST,
NSAccessibilityListRole,
ROLE_SYSTEM_LIST,
ROLE_SYSTEM_LIST)
ROLE(LISTITEM,
"listitem",
ATK_ROLE_LIST_ITEM,
NSAccessibilityGroupRole,
ROLE_SYSTEM_LISTITEM,
ROLE_SYSTEM_LISTITEM)
ROLE(OUTLINE,
"outline",
ATK_ROLE_TREE,
NSAccessibilityOutlineRole,
ROLE_SYSTEM_OUTLINE,
ROLE_SYSTEM_OUTLINE)
ROLE(OUTLINEITEM,
"outlineitem",
ATK_ROLE_LIST_ITEM,
NSAccessibilityRowRole, //XXX: use OutlineRow as subrole.
ROLE_SYSTEM_OUTLINEITEM,
ROLE_SYSTEM_OUTLINEITEM)
ROLE(PAGETAB,
"pagetab",
ATK_ROLE_PAGE_TAB,
NSAccessibilityRadioButtonRole,
ROLE_SYSTEM_PAGETAB,
ROLE_SYSTEM_PAGETAB)
ROLE(PROPERTYPAGE,
"propertypage",
ATK_ROLE_SCROLL_PANE,
NSAccessibilityGroupRole,
ROLE_SYSTEM_PROPERTYPAGE,
ROLE_SYSTEM_PROPERTYPAGE)
ROLE(INDICATOR,
"indicator",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_INDICATOR,
ROLE_SYSTEM_INDICATOR)
ROLE(GRAPHIC,
"graphic",
ATK_ROLE_IMAGE,
NSAccessibilityImageRole,
ROLE_SYSTEM_GRAPHIC,
ROLE_SYSTEM_GRAPHIC)
ROLE(STATICTEXT,
"statictext",
ATK_ROLE_UNKNOWN,
NSAccessibilityStaticTextRole,
ROLE_SYSTEM_STATICTEXT,
ROLE_SYSTEM_STATICTEXT)
ROLE(TEXT_LEAF,
"text leaf",
ATK_ROLE_UNKNOWN,
NSAccessibilityStaticTextRole,
ROLE_SYSTEM_TEXT,
ROLE_SYSTEM_TEXT)
ROLE(PUSHBUTTON,
"pushbutton",
ATK_ROLE_PUSH_BUTTON,
NSAccessibilityButtonRole,
ROLE_SYSTEM_PUSHBUTTON,
ROLE_SYSTEM_PUSHBUTTON)
ROLE(CHECKBUTTON,
"checkbutton",
ATK_ROLE_CHECK_BOX,
NSAccessibilityCheckBoxRole,
ROLE_SYSTEM_CHECKBUTTON,
ROLE_SYSTEM_CHECKBUTTON)
ROLE(RADIOBUTTON,
"radiobutton",
ATK_ROLE_RADIO_BUTTON,
NSAccessibilityRadioButtonRole,
ROLE_SYSTEM_RADIOBUTTON,
ROLE_SYSTEM_RADIOBUTTON)
ROLE(COMBOBOX,
"combobox",
ATK_ROLE_COMBO_BOX,
NSAccessibilityPopUpButtonRole,
ROLE_SYSTEM_COMBOBOX,
ROLE_SYSTEM_COMBOBOX)
ROLE(DROPLIST,
"droplist",
ATK_ROLE_COMBO_BOX,
NSAccessibilityPopUpButtonRole,
ROLE_SYSTEM_DROPLIST,
ROLE_SYSTEM_DROPLIST)
ROLE(PROGRESSBAR,
"progressbar",
ATK_ROLE_PROGRESS_BAR,
NSAccessibilityProgressIndicatorRole,
ROLE_SYSTEM_PROGRESSBAR,
ROLE_SYSTEM_PROGRESSBAR)
ROLE(DIAL,
"dial",
ATK_ROLE_DIAL,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_DIAL,
ROLE_SYSTEM_DIAL)
ROLE(HOTKEYFIELD,
"hotkeyfield",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_HOTKEYFIELD,
ROLE_SYSTEM_HOTKEYFIELD)
ROLE(SLIDER,
"slider",
ATK_ROLE_SLIDER,
NSAccessibilitySliderRole,
ROLE_SYSTEM_SLIDER,
ROLE_SYSTEM_SLIDER)
ROLE(SPINBUTTON,
"spinbutton",
ATK_ROLE_SPIN_BUTTON,
NSAccessibilityIncrementorRole, //Subroles: Increment/Decrement.
ROLE_SYSTEM_SPINBUTTON,
ROLE_SYSTEM_SPINBUTTON)
ROLE(DIAGRAM,
"diagram",
ATK_ROLE_IMAGE,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_DIAGRAM,
ROLE_SYSTEM_DIAGRAM)
ROLE(ANIMATION,
"animation",
ATK_ROLE_ANIMATION,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_ANIMATION,
ROLE_SYSTEM_ANIMATION)
ROLE(EQUATION,
"equation",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_EQUATION,
ROLE_SYSTEM_EQUATION)
ROLE(BUTTONDROPDOWN,
"buttondropdown",
ATK_ROLE_PUSH_BUTTON,
NSAccessibilityPopUpButtonRole,
ROLE_SYSTEM_BUTTONDROPDOWN,
ROLE_SYSTEM_BUTTONDROPDOWN)
ROLE(BUTTONMENU,
"buttonmenu",
ATK_ROLE_PUSH_BUTTON,
NSAccessibilityMenuButtonRole,
ROLE_SYSTEM_BUTTONMENU,
ROLE_SYSTEM_BUTTONMENU)
ROLE(BUTTONDROPDOWNGRID,
"buttondropdowngrid",
ATK_ROLE_UNKNOWN,
NSAccessibilityGroupRole,
ROLE_SYSTEM_BUTTONDROPDOWNGRID,
ROLE_SYSTEM_BUTTONDROPDOWNGRID)
ROLE(WHITESPACE,
"whitespace",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_WHITESPACE,
ROLE_SYSTEM_WHITESPACE)
ROLE(PAGETABLIST,
"pagetablist",
ATK_ROLE_PAGE_TAB_LIST,
NSAccessibilityTabGroupRole,
ROLE_SYSTEM_PAGETABLIST,
ROLE_SYSTEM_PAGETABLIST)
ROLE(CLOCK,
"clock",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole, //Unused on OS X
ROLE_SYSTEM_CLOCK,
ROLE_SYSTEM_CLOCK)
ROLE(SPLITBUTTON,
"splitbutton",
ATK_ROLE_PUSH_BUTTON,
NSAccessibilityButtonRole,
ROLE_SYSTEM_SPLITBUTTON,
ROLE_SYSTEM_SPLITBUTTON)
ROLE(IPADDRESS,
"ipaddress",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_IPADDRESS,
ROLE_SYSTEM_IPADDRESS)
ROLE(ACCEL_LABEL,
"accel label",
ATK_ROLE_ACCEL_LABEL,
NSAccessibilityStaticTextRole,
ROLE_SYSTEM_STATICTEXT,
ROLE_SYSTEM_STATICTEXT)
ROLE(ARROW,
"arrow",
ATK_ROLE_ARROW,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_INDICATOR,
ROLE_SYSTEM_INDICATOR)
ROLE(CANVAS,
"canvas",
ATK_ROLE_CANVAS,
NSAccessibilityImageRole,
USE_ROLE_STRING,
IA2_ROLE_CANVAS)
ROLE(CHECK_MENU_ITEM,
"check menu item",
ATK_ROLE_CHECK_MENU_ITEM,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_MENUITEM,
IA2_ROLE_CHECK_MENU_ITEM)
ROLE(COLOR_CHOOSER,
"color chooser",
ATK_ROLE_COLOR_CHOOSER,
NSAccessibilityColorWellRole,
ROLE_SYSTEM_DIALOG,
IA2_ROLE_COLOR_CHOOSER)
ROLE(DATE_EDITOR,
"date editor",
ATK_ROLE_DATE_EDITOR,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_DATE_EDITOR)
ROLE(DESKTOP_ICON,
"desktop icon",
ATK_ROLE_DESKTOP_ICON,
NSAccessibilityImageRole,
USE_ROLE_STRING,
IA2_ROLE_DESKTOP_ICON)
ROLE(DESKTOP_FRAME,
"desktop frame",
ATK_ROLE_DESKTOP_FRAME,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_DESKTOP_PANE)
ROLE(DIRECTORY_PANE,
"directory pane",
ATK_ROLE_DIRECTORY_PANE,
NSAccessibilityBrowserRole,
USE_ROLE_STRING,
IA2_ROLE_DIRECTORY_PANE)
ROLE(FILE_CHOOSER,
"file chooser",
ATK_ROLE_FILE_CHOOSER,
NSAccessibilityUnknownRole, //Unused on OS X
USE_ROLE_STRING,
IA2_ROLE_FILE_CHOOSER)
ROLE(FONT_CHOOSER,
"font chooser",
ATK_ROLE_FONT_CHOOSER,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_FONT_CHOOSER)
ROLE(CHROME_WINDOW,
"chrome window",
ATK_ROLE_FRAME,
NSAccessibilityUnknownRole, //Unused on OS X
ROLE_SYSTEM_APPLICATION,
IA2_ROLE_FRAME)
ROLE(GLASS_PANE,
"glass pane",
ATK_ROLE_GLASS_PANE,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_GLASS_PANE)
ROLE(HTML_CONTAINER,
"html container",
ATK_ROLE_HTML_CONTAINER,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_UNKNOWN)
ROLE(ICON,
"icon",
ATK_ROLE_ICON,
NSAccessibilityImageRole,
ROLE_SYSTEM_PUSHBUTTON,
IA2_ROLE_ICON)
ROLE(LABEL,
"label",
ATK_ROLE_LABEL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_STATICTEXT,
IA2_ROLE_LABEL)
ROLE(LAYERED_PANE,
"layered pane",
ATK_ROLE_LAYERED_PANE,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_LAYERED_PANE)
ROLE(OPTION_PANE,
"option pane",
ATK_ROLE_OPTION_PANE,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_OPTION_PANE)
ROLE(PASSWORD_TEXT,
"password text",
ATK_ROLE_PASSWORD_TEXT,
NSAccessibilityTextFieldRole,
ROLE_SYSTEM_TEXT,
ROLE_SYSTEM_TEXT)
ROLE(POPUP_MENU,
"popup menu",
ATK_ROLE_POPUP_MENU,
NSAccessibilityUnknownRole, //Unused
ROLE_SYSTEM_MENUPOPUP,
ROLE_SYSTEM_MENUPOPUP)
ROLE(RADIO_MENU_ITEM,
"radio menu item",
ATK_ROLE_RADIO_MENU_ITEM,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_MENUITEM,
IA2_ROLE_RADIO_MENU_ITEM)
ROLE(ROOT_PANE,
"root pane",
ATK_ROLE_ROOT_PANE,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_ROOT_PANE)
ROLE(SCROLL_PANE,
"scroll pane",
ATK_ROLE_SCROLL_PANE,
NSAccessibilityScrollAreaRole,
USE_ROLE_STRING,
IA2_ROLE_SCROLL_PANE)
ROLE(SPLIT_PANE,
"split pane",
ATK_ROLE_SPLIT_PANE,
NSAccessibilitySplitGroupRole,
USE_ROLE_STRING,
IA2_ROLE_SPLIT_PANE)
ROLE(TABLE_COLUMN_HEADER,
"table column header",
ATK_ROLE_TABLE_COLUMN_HEADER,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_COLUMNHEADER,
ROLE_SYSTEM_COLUMNHEADER)
ROLE(TABLE_ROW_HEADER,
"table row header",
ATK_ROLE_TABLE_ROW_HEADER,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_ROWHEADER,
ROLE_SYSTEM_ROWHEADER)
ROLE(TEAR_OFF_MENU_ITEM,
"tear off menu item",
ATK_ROLE_TEAR_OFF_MENU_ITEM,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_MENUITEM,
IA2_ROLE_TEAR_OFF_MENU)
ROLE(TERMINAL,
"terminal",
ATK_ROLE_TERMINAL,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_TERMINAL)
ROLE(TEXT_CONTAINER,
"text container",
ATK_ROLE_TEXT,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_TEXT_FRAME)
ROLE(TOGGLE_BUTTON,
"toggle button",
ATK_ROLE_TOGGLE_BUTTON,
NSAccessibilityButtonRole,
ROLE_SYSTEM_PUSHBUTTON,
IA2_ROLE_TOGGLE_BUTTON)
ROLE(TREE_TABLE,
"tree table",
ATK_ROLE_TREE_TABLE,
NSAccessibilityTableRole,
ROLE_SYSTEM_OUTLINE,
ROLE_SYSTEM_OUTLINE)
ROLE(VIEWPORT,
"viewport",
ATK_ROLE_VIEWPORT,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_PANE,
IA2_ROLE_VIEW_PORT)
ROLE(HEADER,
"header",
ATK_ROLE_HEADER,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_HEADER)
ROLE(FOOTER,
"footer",
ATK_ROLE_FOOTER,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_FOOTER)
ROLE(PARAGRAPH,
"paragraph",
ATK_ROLE_PARAGRAPH,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_PARAGRAPH)
ROLE(RULER,
"ruler",
ATK_ROLE_RULER,
@"AXRuler", //10.4+ only, so we re-define the constant.
USE_ROLE_STRING,
IA2_ROLE_RULER)
ROLE(AUTOCOMPLETE,
"autocomplete",
ATK_ROLE_AUTOCOMPLETE,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_COMBOBOX,
ROLE_SYSTEM_COMBOBOX)
ROLE(EDITBAR,
"editbar",
ATK_ROLE_EDITBAR,
NSAccessibilityTextFieldRole,
ROLE_SYSTEM_TEXT,
IA2_ROLE_EDITBAR)
ROLE(ENTRY,
"entry",
ATK_ROLE_ENTRY,
NSAccessibilityTextFieldRole,
ROLE_SYSTEM_TEXT,
ROLE_SYSTEM_TEXT)
ROLE(CAPTION,
"caption",
ATK_ROLE_CAPTION,
NSAccessibilityStaticTextRole,
USE_ROLE_STRING,
IA2_ROLE_CAPTION)
ROLE(DOCUMENT_FRAME,
"document frame",
ATK_ROLE_DOCUMENT_FRAME,
NSAccessibilityScrollAreaRole,
USE_ROLE_STRING,
IA2_ROLE_UNKNOWN)
ROLE(HEADING,
"heading",
ATK_ROLE_HEADING,
@"AXHeading",
USE_ROLE_STRING,
IA2_ROLE_HEADING)
ROLE(PAGE,
"page",
ATK_ROLE_PAGE,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_PAGE)
ROLE(SECTION,
"section",
ATK_ROLE_SECTION,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_SECTION)
ROLE(REDUNDANT_OBJECT,
"redundant object",
ATK_ROLE_REDUNDANT_OBJECT,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_REDUNDANT_OBJECT)
ROLE(FORM,
"form",
ATK_ROLE_FORM,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_FORM)
ROLE(IME,
"ime",
ATK_ROLE_INPUT_METHOD_WINDOW,
NSAccessibilityUnknownRole,
USE_ROLE_STRING,
IA2_ROLE_INPUT_METHOD_WINDOW)
ROLE(APP_ROOT,
"app root",
ATK_ROLE_APPLICATION,
NSAccessibilityUnknownRole, //Unused on OS X
ROLE_SYSTEM_APPLICATION,
ROLE_SYSTEM_APPLICATION)
ROLE(PARENT_MENUITEM,
"parent menuitem",
ATK_ROLE_MENU,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_MENUITEM,
ROLE_SYSTEM_MENUITEM)
ROLE(CALENDAR,
"calendar",
ATK_ROLE_CALENDAR,
NSAccessibilityGroupRole,
ROLE_SYSTEM_CLIENT,
ROLE_SYSTEM_CLIENT)
ROLE(COMBOBOX_LIST,
"combobox list",
ATK_ROLE_MENU,
NSAccessibilityMenuRole,
ROLE_SYSTEM_LIST,
ROLE_SYSTEM_LIST)
ROLE(COMBOBOX_OPTION,
"combobox option",
ATK_ROLE_MENU_ITEM,
NSAccessibilityMenuItemRole,
ROLE_SYSTEM_LISTITEM,
ROLE_SYSTEM_LISTITEM)
ROLE(IMAGE_MAP,
"image map",
ATK_ROLE_IMAGE,
NSAccessibilityImageRole,
ROLE_SYSTEM_GRAPHIC,
ROLE_SYSTEM_GRAPHIC)
ROLE(OPTION,
"listbox option",
ATK_ROLE_LIST_ITEM,
NSAccessibilityRowRole,
ROLE_SYSTEM_LISTITEM,
ROLE_SYSTEM_LISTITEM)
ROLE(RICH_OPTION,
"listbox rich option",
ATK_ROLE_LIST_ITEM,
NSAccessibilityRowRole,
ROLE_SYSTEM_LISTITEM,
ROLE_SYSTEM_LISTITEM)
ROLE(LISTBOX,
"listbox",
ATK_ROLE_LIST,
NSAccessibilityListRole,
ROLE_SYSTEM_LIST,
ROLE_SYSTEM_LIST)
ROLE(FLAT_EQUATION,
"flat equation",
ATK_ROLE_UNKNOWN,
NSAccessibilityUnknownRole,
ROLE_SYSTEM_EQUATION,
ROLE_SYSTEM_EQUATION)
ROLE(GRID_CELL,
"gridcell",
ATK_ROLE_TABLE_CELL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_CELL,
ROLE_SYSTEM_CELL)
ROLE(EMBEDDED_OBJECT,
"embedded object",
ATK_ROLE_PANEL,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_EMBEDDED_OBJECT)
ROLE(NOTE,
"note",
ATK_ROLE_SECTION,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_NOTE)
ROLE(FIGURE,
"figure",
ATK_ROLE_PANEL,
NSAccessibilityGroupRole,
ROLE_SYSTEM_GROUPING,
ROLE_SYSTEM_GROUPING)
ROLE(CHECK_RICH_OPTION,
"check rich option",
ATK_ROLE_CHECK_BOX,
NSAccessibilityCheckBoxRole,
ROLE_SYSTEM_CHECKBUTTON,
ROLE_SYSTEM_CHECKBUTTON)
ROLE(DEFINITION_LIST,
"definitionlist",
ATK_ROLE_LIST,
NSAccessibilityListRole,
ROLE_SYSTEM_LIST,
ROLE_SYSTEM_LIST)
ROLE(TERM,
"term",
ATK_ROLE_LIST_ITEM,
NSAccessibilityGroupRole,
ROLE_SYSTEM_LISTITEM,
ROLE_SYSTEM_LISTITEM)
ROLE(DEFINITION,
"definition",
ATK_ROLE_PARAGRAPH,
NSAccessibilityGroupRole,
USE_ROLE_STRING,
IA2_ROLE_PARAGRAPH)

Просмотреть файл

@ -706,13 +706,19 @@ nsAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode,
NS_IMETHODIMP
nsAccessibilityService::GetStringRole(PRUint32 aRole, nsAString& aString)
{
if ( aRole >= ArrayLength(kRoleNames)) {
aString.AssignLiteral("unknown");
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::geckoRole: \
CopyUTF8toUTF16(stringRole, aString); \
return NS_OK;
switch (aRole) {
#include "RoleMap.h"
default:
aString.AssignLiteral("unknown");
return NS_OK;
}
CopyUTF8toUTF16(kRoleNames[aRole], aString);
return NS_OK;
#undef ROLE
}
NS_IMETHODIMP

Просмотреть файл

@ -295,142 +295,6 @@ GetAccService()
return nsAccessibilityService::gAccessibilityService;
}
/**
* Map nsIAccessibleRole constants to strings. Used by
* nsIAccessibleRetrieval::getStringRole() method.
*/
static const char kRoleNames[][20] = {
"nothing", //ROLE_NOTHING
"titlebar", //ROLE_TITLEBAR
"menubar", //ROLE_MENUBAR
"scrollbar", //ROLE_SCROLLBAR
"grip", //ROLE_GRIP
"sound", //ROLE_SOUND
"cursor", //ROLE_CURSOR
"caret", //ROLE_CARET
"alert", //ROLE_ALERT
"window", //ROLE_WINDOW
"internal frame", //ROLE_INTERNAL_FRAME
"menupopup", //ROLE_MENUPOPUP
"menuitem", //ROLE_MENUITEM
"tooltip", //ROLE_TOOLTIP
"application", //ROLE_APPLICATION
"document", //ROLE_DOCUMENT
"pane", //ROLE_PANE
"chart", //ROLE_CHART
"dialog", //ROLE_DIALOG
"border", //ROLE_BORDER
"grouping", //ROLE_GROUPING
"separator", //ROLE_SEPARATOR
"toolbar", //ROLE_TOOLBAR
"statusbar", //ROLE_STATUSBAR
"table", //ROLE_TABLE
"columnheader", //ROLE_COLUMNHEADER
"rowheader", //ROLE_ROWHEADER
"column", //ROLE_COLUMN
"row", //ROLE_ROW
"cell", //ROLE_CELL
"link", //ROLE_LINK
"helpballoon", //ROLE_HELPBALLOON
"character", //ROLE_CHARACTER
"list", //ROLE_LIST
"listitem", //ROLE_LISTITEM
"outline", //ROLE_OUTLINE
"outlineitem", //ROLE_OUTLINEITEM
"pagetab", //ROLE_PAGETAB
"propertypage", //ROLE_PROPERTYPAGE
"indicator", //ROLE_INDICATOR
"graphic", //ROLE_GRAPHIC
"statictext", //ROLE_STATICTEXT
"text leaf", //ROLE_TEXT_LEAF
"pushbutton", //ROLE_PUSHBUTTON
"checkbutton", //ROLE_CHECKBUTTON
"radiobutton", //ROLE_RADIOBUTTON
"combobox", //ROLE_COMBOBOX
"droplist", //ROLE_DROPLIST
"progressbar", //ROLE_PROGRESSBAR
"dial", //ROLE_DIAL
"hotkeyfield", //ROLE_HOTKEYFIELD
"slider", //ROLE_SLIDER
"spinbutton", //ROLE_SPINBUTTON
"diagram", //ROLE_DIAGRAM
"animation", //ROLE_ANIMATION
"equation", //ROLE_EQUATION
"buttondropdown", //ROLE_BUTTONDROPDOWN
"buttonmenu", //ROLE_BUTTONMENU
"buttondropdowngrid", //ROLE_BUTTONDROPDOWNGRID
"whitespace", //ROLE_WHITESPACE
"pagetablist", //ROLE_PAGETABLIST
"clock", //ROLE_CLOCK
"splitbutton", //ROLE_SPLITBUTTON
"ipaddress", //ROLE_IPADDRESS
"accel label", //ROLE_ACCEL_LABEL
"arrow", //ROLE_ARROW
"canvas", //ROLE_CANVAS
"check menu item", //ROLE_CHECK_MENU_ITEM
"color chooser", //ROLE_COLOR_CHOOSER
"date editor", //ROLE_DATE_EDITOR
"desktop icon", //ROLE_DESKTOP_ICON
"desktop frame", //ROLE_DESKTOP_FRAME
"directory pane", //ROLE_DIRECTORY_PANE
"file chooser", //ROLE_FILE_CHOOSER
"font chooser", //ROLE_FONT_CHOOSER
"chrome window", //ROLE_CHROME_WINDOW
"glass pane", //ROLE_GLASS_PANE
"html container", //ROLE_HTML_CONTAINER
"icon", //ROLE_ICON
"label", //ROLE_LABEL
"layered pane", //ROLE_LAYERED_PANE
"option pane", //ROLE_OPTION_PANE
"password text", //ROLE_PASSWORD_TEXT
"popup menu", //ROLE_POPUP_MENU
"radio menu item", //ROLE_RADIO_MENU_ITEM
"root pane", //ROLE_ROOT_PANE
"scroll pane", //ROLE_SCROLL_PANE
"split pane", //ROLE_SPLIT_PANE
"table column header", //ROLE_TABLE_COLUMN_HEADER
"table row header", //ROLE_TABLE_ROW_HEADER
"tear off menu item", //ROLE_TEAR_OFF_MENU_ITEM
"terminal", //ROLE_TERMINAL
"text container", //ROLE_TEXT_CONTAINER
"toggle button", //ROLE_TOGGLE_BUTTON
"tree table", //ROLE_TREE_TABLE
"viewport", //ROLE_VIEWPORT
"header", //ROLE_HEADER
"footer", //ROLE_FOOTER
"paragraph", //ROLE_PARAGRAPH
"ruler", //ROLE_RULER
"autocomplete", //ROLE_AUTOCOMPLETE
"editbar", //ROLE_EDITBAR
"entry", //ROLE_ENTRY
"caption", //ROLE_CAPTION
"document frame", //ROLE_DOCUMENT_FRAME
"heading", //ROLE_HEADING
"page", //ROLE_PAGE
"section", //ROLE_SECTION
"redundant object", //ROLE_REDUNDANT_OBJECT
"form", //ROLE_FORM
"ime", //ROLE_IME
"app root", //ROLE_APP_ROOT
"parent menuitem", //ROLE_PARENT_MENUITEM
"calendar", //ROLE_CALENDAR
"combobox list", //ROLE_COMBOBOX_LIST
"combobox option", //ROLE_COMBOBOX_OPTION
"image map", //ROLE_IMAGE_MAP
"listbox option", //ROLE_OPTION
"listbox rich option", //ROLE_RICH_OPTION
"listbox", //ROLE_LISTBOX
"flat equation", //ROLE_FLAT_EQUATION
"gridcell", //ROLE_GRID_CELL
"embedded object", //ROLE_EMBEDDED_OBJECT
"note", //ROLE_NOTE
"figure", //ROLE_FIGURE
"check rich option", //ROLE_CHECK_RICH_OPTION
"definitionlist", //ROLE_DEFINITION_LIST
"term", //ROLE_TERM
"definition" //ROLE_DEFINITION
};
/**
* Map nsIAccessibleEvents constants to strings. Used by
* nsIAccessibleRetrieval::getStringEventType() method.

Просмотреть файл

@ -80,7 +80,6 @@ EXPORTS = \
mozAccessibleProtocol.h \
mozActionElements.h \
mozTextAccessible.h \
nsRoleMap.h \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.

Просмотреть файл

@ -40,7 +40,6 @@
#import "MacUtils.h"
#import "mozView.h"
#import "nsRoleMap.h"
#include "Accessible-inl.h"
#include "nsIAccessibleRelation.h"
@ -121,10 +120,6 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
mGeckoAccessible = geckoAccessible;
mIsExpired = NO;
mRole = geckoAccessible->Role();
// Check for OS X "role skew"; the role constants in nsIAccessible.idl need to match the ones
// in nsRoleMap.h.
NS_ASSERTION([AXRoles[roles::LAST_ENTRY] isEqualToString:@"ROLE_LAST_ENTRY"], "Role skew in the role map!");
}
return self;
@ -462,7 +457,19 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(mGeckoAccessible),
"Does not support nsIAccessibleText when it should");
#endif
return (NSString*) AXRoles[mRole];
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::geckoRole: \
return macRole;
switch (mRole) {
#include "RoleMap.h"
default:
NS_NOTREACHED("Unknown role.");
return NSAccessibilityUnknownRole;
}
#undef ROLE
}
- (NSString*)subrole

Просмотреть файл

@ -101,7 +101,7 @@ public: // construction, destruction
*/
void GetUnignoredChildren(nsTArray<nsAccessible*>* aChildrenArray);
nsAccessible* GetUnignoredParent() const;
protected:
virtual nsresult FirePlatformEvent(AccEvent* aEvent);

Просмотреть файл

@ -39,8 +39,6 @@
#include "nsDocAccessible.h"
#include "nsObjCExceptions.h"
#import "nsRoleMap.h"
#include "Accessible-inl.h"
#include "Role.h"

Просмотреть файл

@ -1,175 +0,0 @@
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
*/
/* ***** 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 Mozilla Foundation
* Portions created by the Initial Developer are Copyright (C) 2006
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Håkan Waara <hwaara@gmail.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 ***** */
#import <Cocoa/Cocoa.h>
#include "nsIAccessible.h"
static const NSString* AXRoles [] = {
NSAccessibilityUnknownRole, // roles::NOTHING 0
NSAccessibilityUnknownRole, // roles::TITLEBAR 1 Irrelevant on OS X; windows are always native.
NSAccessibilityScrollBarRole, // roles::SCROLLBAR 3 We might need to make this its own mozAccessible, to support the children objects (valueindicator, down/up buttons).
NSAccessibilityMenuBarRole, // roles::MENUBAR 2 Irrelevant on OS X; the menubar will always be native and on the top of the screen.
NSAccessibilitySplitterRole, // roles::GRIP 4
NSAccessibilityUnknownRole, // roles::SOUND 5 Unused on OS X.
NSAccessibilityUnknownRole, // roles::CURSOR 6 Unused on OS X.
NSAccessibilityUnknownRole, // roles::CARET 7 Unused on OS X.
NSAccessibilityWindowRole, // roles::ALERT 8
NSAccessibilityWindowRole, // roles::WINDOW 9 Irrelevant on OS X; all window a11y is handled by the system.
NSAccessibilityScrollAreaRole, // roles::INTERNAL_FRAME 10
NSAccessibilityMenuRole, // roles::MENUPOPUP 11 The parent of menuitems.
NSAccessibilityMenuItemRole, // roles::MENUITEM 12
@"AXHelpTag", // roles::TOOLTIP 13 10.4+ only, so we re-define the constant.
NSAccessibilityGroupRole, // roles::APPLICATION 14 Unused on OS X. the system will take care of this.
@"AXWebArea", // roles::DOCUMENT 15
NSAccessibilityGroupRole, // roles::PANE 16
NSAccessibilityUnknownRole, // roles::CHART 17
NSAccessibilityWindowRole, // roles::DIALOG 18 There's a dialog subrole.
NSAccessibilityUnknownRole, // roles::BORDER 19 Unused on OS X.
NSAccessibilityGroupRole, // roles::GROUPING 20
NSAccessibilityUnknownRole, // roles::SEPARATOR 21
NSAccessibilityToolbarRole, // roles::TOOLBAR 22
NSAccessibilityUnknownRole, // roles::STATUSBAR 23 Doesn't exist on OS X (a status bar is its parts; a progressbar, a label, etc.)
NSAccessibilityGroupRole, // roles::TABLE 24
NSAccessibilityGroupRole, // roles::COLUMNHEADER 25
NSAccessibilityGroupRole, // roles::ROWHEADER 26
NSAccessibilityColumnRole, // roles::COLUMN 27
NSAccessibilityRowRole, // roles::ROW 28
NSAccessibilityGroupRole, // roles::CELL 29
@"AXLink", // roles::LINK 30 10.4+ the attr first define in SDK 10.4, so we define it here too. ROLE_LINK
@"AXHelpTag", // roles::HELPBALLOON 31
NSAccessibilityUnknownRole, // roles::CHARACTER 32 Unused on OS X.
NSAccessibilityListRole, // roles::LIST 33
NSAccessibilityGroupRole, // roles::LISTITEM 34
NSAccessibilityOutlineRole, // roles::OUTLINE 35
NSAccessibilityRowRole, // roles::OUTLINEITEM 36 XXX: use OutlineRow as subrole.
NSAccessibilityRadioButtonRole, // roles::PAGETAB 37
NSAccessibilityGroupRole, // roles::PROPERTYPAGE 38
NSAccessibilityUnknownRole, // roles::INDICATOR 39
NSAccessibilityImageRole, // roles::GRAPHIC 40
NSAccessibilityStaticTextRole, // roles::STATICTEXT 41
NSAccessibilityStaticTextRole, // roles::TEXT_LEAF 42
NSAccessibilityButtonRole, // roles::PUSHBUTTON 43
NSAccessibilityCheckBoxRole, // roles::CHECKBUTTON 44
NSAccessibilityRadioButtonRole, // roles::RADIOBUTTON 45
NSAccessibilityPopUpButtonRole, // roles::COMBOBOX 46
NSAccessibilityPopUpButtonRole, // roles::DROPLIST 47
NSAccessibilityProgressIndicatorRole, // roles::PROGRESSBAR 48
NSAccessibilityUnknownRole, // roles::DIAL 49
NSAccessibilityUnknownRole, // roles::HOTKEYFIELD 50
NSAccessibilitySliderRole, // roles::SLIDER 51
NSAccessibilityIncrementorRole, // roles::SPINBUTTON 52 Subroles: Increment/Decrement.
NSAccessibilityUnknownRole, // roles::DIAGRAM 53
NSAccessibilityUnknownRole, // roles::ANIMATION 54
NSAccessibilityUnknownRole, // roles::EQUATION 55
NSAccessibilityPopUpButtonRole, // roles::BUTTONDROPDOWN 56
NSAccessibilityMenuButtonRole, // roles::BUTTONMENU 57
NSAccessibilityGroupRole, // roles::BUTTONDROPDOWNGRID 58
NSAccessibilityUnknownRole, // roles::WHITESPACE 59
NSAccessibilityTabGroupRole, // roles::PAGETABLIST 60
NSAccessibilityUnknownRole, // roles::CLOCK 61 Unused on OS X
NSAccessibilityButtonRole, // roles::SPLITBUTTON 62
NSAccessibilityUnknownRole, // roles::IPADDRESS 63
NSAccessibilityStaticTextRole, // roles::ACCEL_LABEL 64
NSAccessibilityUnknownRole, // roles::ARROW 65
NSAccessibilityImageRole, // roles::CANVAS 66
NSAccessibilityMenuItemRole, // roles::CHECK_MENU_ITEM 67
NSAccessibilityColorWellRole, // roles::COLOR_CHOOSER 68
NSAccessibilityUnknownRole, // roles::DATE_EDITOR 69
NSAccessibilityImageRole, // roles::DESKTOP_ICON 70
NSAccessibilityUnknownRole, // roles::DESKTOP_FRAME 71
NSAccessibilityBrowserRole, // roles::DIRECTORY_PANE 72
NSAccessibilityUnknownRole, // roles::FILE_CHOOSER 73 Unused on OS X
NSAccessibilityUnknownRole, // roles::FONT_CHOOSER 74
NSAccessibilityUnknownRole, // roles::CHROME_WINDOW 75 Unused on OS X
NSAccessibilityGroupRole, // roles::GLASS_PANE 76
NSAccessibilityUnknownRole, // roles::HTML_CONTAINER 77
NSAccessibilityImageRole, // roles::ICON 78
NSAccessibilityGroupRole, // roles::LABEL 79
NSAccessibilityGroupRole, // roles::LAYERED_PANE 80
NSAccessibilityGroupRole, // roles::OPTION_PANE 81
NSAccessibilityTextFieldRole, // roles::PASSWORD_TEXT 82
NSAccessibilityUnknownRole, // roles::POPUP_MENU 83 Unused
NSAccessibilityMenuItemRole, // roles::RADIO_MENU_ITEM 84
NSAccessibilityGroupRole, // roles::ROOT_PANE 85
NSAccessibilityScrollAreaRole, // roles::SCROLL_PANE 86
NSAccessibilitySplitGroupRole, // roles::SPLIT_PANE 87
NSAccessibilityUnknownRole, // roles::TABLE_COLUMN_HEADER 88
NSAccessibilityUnknownRole, // roles::TABLE_ROW_HEADER 89
NSAccessibilityMenuItemRole, // roles::TEAR_OFF_MENU_ITEM 90
NSAccessibilityUnknownRole, // roles::TERMINAL 91
NSAccessibilityGroupRole, // roles::TEXT_CONTAINER 92
NSAccessibilityButtonRole, // roles::TOGGLE_BUTTON 93
NSAccessibilityTableRole, // roles::TREE_TABLE 94
NSAccessibilityUnknownRole, // roles::VIEWPORT 95
NSAccessibilityGroupRole, // roles::HEADER 96
NSAccessibilityGroupRole, // roles::FOOTER 97
NSAccessibilityGroupRole, // roles::PARAGRAPH 98
@"AXRuler", // roles::RULER 99 10.4+ only, so we re-define the constant.
NSAccessibilityUnknownRole, // roles::AUTOCOMPLETE 100
NSAccessibilityTextFieldRole, // roles::EDITBAR 101
NSAccessibilityTextFieldRole, // roles::ENTRY 102
NSAccessibilityStaticTextRole, // roles::CAPTION 103
NSAccessibilityScrollAreaRole, // roles::DOCUMENT_FRAME 104
@"AXHeading", // roles::HEADING 105
NSAccessibilityGroupRole, // roles::PAGE 106
NSAccessibilityGroupRole, // roles::SECTION 107
NSAccessibilityUnknownRole, // roles::REDUNDANT_OBJECT 108
NSAccessibilityGroupRole, // roles::FORM 109
NSAccessibilityUnknownRole, // roles::IME 110
NSAccessibilityUnknownRole, // roles::APP_ROOT 111 Unused on OS X
NSAccessibilityMenuItemRole, // roles::PARENT_MENUITEM 112
NSAccessibilityGroupRole, // roles::CALENDAR 113
NSAccessibilityMenuRole, // roles::COMBOBOX_LIST 114
NSAccessibilityMenuItemRole, // roles::COMBOBOX_OPTION 115
NSAccessibilityImageRole, // roles::IMAGE_MAP 116
NSAccessibilityRowRole, // roles::OPTION 117
NSAccessibilityRowRole, // roles::RICH_OPTION 118
NSAccessibilityListRole, // roles::LISTBOX 119
NSAccessibilityUnknownRole, // roles::FLAT_EQUATION 120
NSAccessibilityGroupRole, // roles::GRID_CELL 121
NSAccessibilityGroupRole, // roles::EMBEDDED_OBJECT 122
NSAccessibilityGroupRole, // roles::NOTE 123
NSAccessibilityGroupRole, // roles::FIGURE 124
NSAccessibilityCheckBoxRole, // roles::CHECK_RICH_OPTION 125
NSAccessibilityListRole, // roles::DEFINITION_LIST 126
NSAccessibilityGroupRole, // roles::TERM 127
NSAccessibilityGroupRole, // roles::DEFINITION 128
@"ROLE_LAST_ENTRY" // roles::LAST_ENTRY Bogus role that will never be shown (just marks the end of this array)!
};

Просмотреть файл

@ -52,6 +52,7 @@
#include "nsIAccessibleRelation.h"
#include "Accessible2_i.c"
#include "AccessibleRole.h"
#include "AccessibleStates.h"
#include "nsIMutableArray.h"
@ -65,12 +66,29 @@
#include "nsTextFormatter.h"
#include "nsIView.h"
#include "nsIViewManager.h"
#include "nsRoleMap.h"
#include "nsEventMap.h"
#include "nsArrayUtils.h"
#include "OLEACC.H"
using namespace mozilla;
using namespace mozilla::a11y;
const PRUint32 USE_ROLE_STRING = 0;
#ifndef ROLE_SYSTEM_SPLITBUTTON
const PRUint32 ROLE_SYSTEM_SPLITBUTTON = 0x3e; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_IPADDRESS
const PRUint32 ROLE_SYSTEM_IPADDRESS = 0x3f; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_OUTLINEBUTTON
const PRUint32 ROLE_SYSTEM_OUTLINEBUTTON = 0x40; // Not defined in all oleacc.h versions
#endif
/* For documentation of the accessibility architecture,
* see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html
*/
@ -374,15 +392,26 @@ __try {
"Does not support nsIAccessibleText when it should");
#endif
roles::Role role = xpAccessible->Role();
PRUint32 msaaRole = gWindowsRoleMap[role].msaaRole;
NS_ASSERTION(gWindowsRoleMap[roles::LAST_ENTRY].msaaRole == ROLE_WINDOWS_LAST_ENTRY,
"MSAA role map skewed");
a11y::role geckoRole = xpAccessible->Role();
PRUint32 msaaRole = 0;
#define ROLE(_geckoRole, stringRole, atkRole, macRole, _msaaRole, ia2Role) \
case roles::_geckoRole: \
msaaRole = _msaaRole; \
break;
switch (geckoRole) {
#include "RoleMap.h"
default:
MOZ_NOT_REACHED("Unknown role.");
};
#undef ROLE
// Special case, if there is a ROLE_ROW inside of a ROLE_TREE_TABLE, then call the MSAA role
// a ROLE_OUTLINEITEM for consistency and compatibility.
// We need this because ARIA has a role of "row" for both grid and treegrid
if (role == roles::ROW) {
if (geckoRole == roles::ROW) {
nsAccessible* xpParent = Parent();
if (xpParent && xpParent->Role() == roles::TREE_TABLE)
msaaRole = ROLE_SYSTEM_OUTLINEITEM;
@ -1202,15 +1231,23 @@ __try {
if (IsDefunct())
return CO_E_OBJNOTCONNECTED;
NS_ASSERTION(gWindowsRoleMap[roles::LAST_ENTRY].ia2Role == ROLE_WINDOWS_LAST_ENTRY,
"MSAA role map skewed");
#define ROLE(_geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::_geckoRole: \
*aRole = ia2Role; \
break;
roles::Role role = Role();
*aRole = gWindowsRoleMap[role].ia2Role;
a11y::role geckoRole = Role();
switch (geckoRole) {
#include "RoleMap.h"
default:
MOZ_NOT_REACHED("Unknown role.");
};
#undef ROLE
// Special case, if there is a ROLE_ROW inside of a ROLE_TREE_TABLE, then call
// the IA2 role a ROLE_OUTLINEITEM.
if (role == roles::ROW) {
if (geckoRole == roles::ROW) {
nsAccessible* xpParent = Parent();
if (xpParent && xpParent->Role() == roles::TREE_TABLE)
*aRole = ROLE_SYSTEM_OUTLINEITEM;

Просмотреть файл

@ -1,467 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
*/
/* ***** 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>
* Alexander Surkov <surkov.alexander@gmail.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"
#include "AccessibleRole.h"
const PRUint32 USE_ROLE_STRING = 0;
const PRUint32 ROLE_WINDOWS_LAST_ENTRY = 0xffffffff;
#ifndef ROLE_SYSTEM_SPLITBUTTON
const PRUint32 ROLE_SYSTEM_SPLITBUTTON = 0x3e; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_IPADDRESS
const PRUint32 ROLE_SYSTEM_IPADDRESS = 0x3f; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_OUTLINEBUTTON
const PRUint32 ROLE_SYSTEM_OUTLINEBUTTON = 0x40; // Not defined in all oleacc.h versions
#endif
struct WindowsRoleMapItem
{
PRUint32 msaaRole;
long ia2Role;
};
// Map array from cross platform roles to MSAA/IA2 roles
static const WindowsRoleMapItem gWindowsRoleMap[] = {
// roles::NOTHING
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::TITLEBAR
{ ROLE_SYSTEM_TITLEBAR, ROLE_SYSTEM_TITLEBAR },
// roles::MENUBAR
{ ROLE_SYSTEM_MENUBAR, ROLE_SYSTEM_MENUBAR },
// roles::SCROLLBAR
{ ROLE_SYSTEM_SCROLLBAR, ROLE_SYSTEM_SCROLLBAR },
// roles::GRIP
{ ROLE_SYSTEM_GRIP, ROLE_SYSTEM_GRIP },
// roles::SOUND
{ ROLE_SYSTEM_SOUND, ROLE_SYSTEM_SOUND },
// roles::CURSOR
{ ROLE_SYSTEM_CURSOR, ROLE_SYSTEM_CURSOR },
// roles::CARET
{ ROLE_SYSTEM_CARET, ROLE_SYSTEM_CARET },
// roles::ALERT
{ ROLE_SYSTEM_ALERT, ROLE_SYSTEM_ALERT },
// roles::WINDOW
{ ROLE_SYSTEM_WINDOW, ROLE_SYSTEM_WINDOW },
// roles::INTERNAL_FRAME
{ USE_ROLE_STRING, IA2_ROLE_INTERNAL_FRAME},
// roles::MENUPOPUP
{ ROLE_SYSTEM_MENUPOPUP, ROLE_SYSTEM_MENUPOPUP },
// roles::MENUITEM
{ ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_MENUITEM },
// roles::TOOLTIP
{ ROLE_SYSTEM_TOOLTIP, ROLE_SYSTEM_TOOLTIP },
// roles::APPLICATION
{ ROLE_SYSTEM_APPLICATION, ROLE_SYSTEM_APPLICATION },
// roles::DOCUMENT
{ ROLE_SYSTEM_DOCUMENT, ROLE_SYSTEM_DOCUMENT },
// roles::PANE
// We used to map to ROLE_SYSTEM_PANE, but JAWS would
// not read the accessible name for the contaning pane.
// However, JAWS will read the accessible name for a groupbox.
// By mapping a PANE to a GROUPING, we get no undesirable effects,
// but fortunately JAWS will then read the group's label,
// when an inner control gets focused.
{ ROLE_SYSTEM_GROUPING , ROLE_SYSTEM_GROUPING },
// roles::CHART
{ ROLE_SYSTEM_CHART, ROLE_SYSTEM_CHART },
// roles::DIALOG
{ ROLE_SYSTEM_DIALOG, ROLE_SYSTEM_DIALOG },
// roles::BORDER
{ ROLE_SYSTEM_BORDER, ROLE_SYSTEM_BORDER },
// roles::GROUPING
{ ROLE_SYSTEM_GROUPING, ROLE_SYSTEM_GROUPING },
// roles::SEPARATOR
{ ROLE_SYSTEM_SEPARATOR, ROLE_SYSTEM_SEPARATOR },
// roles::TOOLBAR
{ ROLE_SYSTEM_TOOLBAR, ROLE_SYSTEM_TOOLBAR },
// roles::STATUSBAR
{ ROLE_SYSTEM_STATUSBAR, ROLE_SYSTEM_STATUSBAR },
// roles::TABLE
{ ROLE_SYSTEM_TABLE, ROLE_SYSTEM_TABLE },
// roles::COLUMNHEADER,
{ ROLE_SYSTEM_COLUMNHEADER, ROLE_SYSTEM_COLUMNHEADER },
// roles::ROWHEADER
{ ROLE_SYSTEM_ROWHEADER, ROLE_SYSTEM_ROWHEADER },
// roles::COLUMN
{ ROLE_SYSTEM_COLUMN, ROLE_SYSTEM_COLUMN },
// roles::ROW
{ ROLE_SYSTEM_ROW, ROLE_SYSTEM_ROW },
// roles::CELL
{ ROLE_SYSTEM_CELL, ROLE_SYSTEM_CELL },
// roles::LINK
{ ROLE_SYSTEM_LINK, ROLE_SYSTEM_LINK },
// roles::HELPBALLOON
{ ROLE_SYSTEM_HELPBALLOON, ROLE_SYSTEM_HELPBALLOON },
// roles::CHARACTER
{ ROLE_SYSTEM_CHARACTER, ROLE_SYSTEM_CHARACTER },
// roles::LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::LISTITEM
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::OUTLINE
{ ROLE_SYSTEM_OUTLINE, ROLE_SYSTEM_OUTLINE },
// roles::OUTLINEITEM
{ ROLE_SYSTEM_OUTLINEITEM, ROLE_SYSTEM_OUTLINEITEM },
// roles::PAGETAB
{ ROLE_SYSTEM_PAGETAB, ROLE_SYSTEM_PAGETAB },
// roles::PROPERTYPAGE
{ ROLE_SYSTEM_PROPERTYPAGE, ROLE_SYSTEM_PROPERTYPAGE },
// roles::INDICATOR
{ ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_INDICATOR },
// roles::GRAPHIC
{ ROLE_SYSTEM_GRAPHIC, ROLE_SYSTEM_GRAPHIC },
// roles::STATICTEXT
{ ROLE_SYSTEM_STATICTEXT, ROLE_SYSTEM_STATICTEXT },
// roles::TEXT_LEAF
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::PUSHBUTTON
{ ROLE_SYSTEM_PUSHBUTTON, ROLE_SYSTEM_PUSHBUTTON },
// roles::CHECKBUTTON
{ ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CHECKBUTTON },
// roles::RADIOBUTTON
{ ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_RADIOBUTTON },
// roles::COMBOBOX
{ ROLE_SYSTEM_COMBOBOX, ROLE_SYSTEM_COMBOBOX },
// roles::DROPLIST
{ ROLE_SYSTEM_DROPLIST, ROLE_SYSTEM_DROPLIST },
// roles::PROGRESSBAR
{ ROLE_SYSTEM_PROGRESSBAR, ROLE_SYSTEM_PROGRESSBAR },
// roles::DIAL
{ ROLE_SYSTEM_DIAL, ROLE_SYSTEM_DIAL },
// roles::HOTKEYFIELD
{ ROLE_SYSTEM_HOTKEYFIELD, ROLE_SYSTEM_HOTKEYFIELD },
// roles::SLIDER
{ ROLE_SYSTEM_SLIDER, ROLE_SYSTEM_SLIDER },
// roles::SPINBUTTON
{ ROLE_SYSTEM_SPINBUTTON, ROLE_SYSTEM_SPINBUTTON },
// roles::DIAGRAM
{ ROLE_SYSTEM_DIAGRAM, ROLE_SYSTEM_DIAGRAM },
// roles::ANIMATION
{ ROLE_SYSTEM_ANIMATION, ROLE_SYSTEM_ANIMATION },
// roles::EQUATION
{ ROLE_SYSTEM_EQUATION, ROLE_SYSTEM_EQUATION },
// roles::BUTTONDROPDOWN
{ ROLE_SYSTEM_BUTTONDROPDOWN, ROLE_SYSTEM_BUTTONDROPDOWN },
// roles::BUTTONMENU
{ ROLE_SYSTEM_BUTTONMENU, ROLE_SYSTEM_BUTTONMENU },
// roles::BUTTONDROPDOWNGRID
{ ROLE_SYSTEM_BUTTONDROPDOWNGRID, ROLE_SYSTEM_BUTTONDROPDOWNGRID },
// roles::WHITESPACE
{ ROLE_SYSTEM_WHITESPACE, ROLE_SYSTEM_WHITESPACE },
// roles::PAGETABLIST
{ ROLE_SYSTEM_PAGETABLIST, ROLE_SYSTEM_PAGETABLIST },
// roles::CLOCK
{ ROLE_SYSTEM_CLOCK, ROLE_SYSTEM_CLOCK },
// roles::SPLITBUTTON
{ ROLE_SYSTEM_SPLITBUTTON, ROLE_SYSTEM_SPLITBUTTON },
// roles::IPADDRESS
{ ROLE_SYSTEM_IPADDRESS, ROLE_SYSTEM_IPADDRESS },
// Make up for Gecko roles that we don't have in MSAA or IA2. When in doubt
// map them to USE_ROLE_STRING (IA2_ROLE_UNKNOWN).
// roles::ACCEL_LABEL
{ ROLE_SYSTEM_STATICTEXT, ROLE_SYSTEM_STATICTEXT },
// roles::ARROW
{ ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_INDICATOR },
// roles::CANVAS
{ USE_ROLE_STRING, IA2_ROLE_CANVAS },
// roles::CHECK_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_CHECK_MENU_ITEM },
// roles::COLOR_CHOOSER
{ ROLE_SYSTEM_DIALOG, IA2_ROLE_COLOR_CHOOSER },
// roles::DATE_EDITOR
{ USE_ROLE_STRING, IA2_ROLE_DATE_EDITOR },
// roles::DESKTOP_ICON
{ USE_ROLE_STRING, IA2_ROLE_DESKTOP_ICON },
// roles::DESKTOP_FRAME
{ USE_ROLE_STRING, IA2_ROLE_DESKTOP_PANE },
// roles::DIRECTORY_PANE
{ USE_ROLE_STRING, IA2_ROLE_DIRECTORY_PANE },
// roles::FILE_CHOOSER
{ USE_ROLE_STRING, IA2_ROLE_FILE_CHOOSER },
// roles::FONT_CHOOSER
{ USE_ROLE_STRING, IA2_ROLE_FONT_CHOOSER },
// roles::CHROME_WINDOW
{ ROLE_SYSTEM_APPLICATION, IA2_ROLE_FRAME },
// roles::GLASS_PANE
{ USE_ROLE_STRING, IA2_ROLE_GLASS_PANE },
// roles::HTML_CONTAINER
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::ICON
{ ROLE_SYSTEM_PUSHBUTTON, IA2_ROLE_ICON },
// roles::LABEL
{ ROLE_SYSTEM_STATICTEXT, IA2_ROLE_LABEL },
// roles::LAYERED_PANE
{ USE_ROLE_STRING, IA2_ROLE_LAYERED_PANE },
// roles::OPTION_PANE
{ USE_ROLE_STRING, IA2_ROLE_OPTION_PANE },
// roles::PASSWORD_TEXT
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::POPUP_MENU
{ ROLE_SYSTEM_MENUPOPUP, ROLE_SYSTEM_MENUPOPUP },
// roles::RADIO_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_RADIO_MENU_ITEM },
// roles::ROOT_PANE
{ USE_ROLE_STRING, IA2_ROLE_ROOT_PANE },
// roles::SCROLL_PANE
{ USE_ROLE_STRING, IA2_ROLE_SCROLL_PANE },
// roles::SPLIT_PANE
{ USE_ROLE_STRING, IA2_ROLE_SPLIT_PANE },
// roles::TABLE_COLUMN_HEADER
{ ROLE_SYSTEM_COLUMNHEADER, ROLE_SYSTEM_COLUMNHEADER },
// roles::TABLE_ROW_HEADER
{ ROLE_SYSTEM_ROWHEADER, ROLE_SYSTEM_ROWHEADER },
// roles::TEAR_OFF_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_TEAR_OFF_MENU },
// roles::TERMINAL
{ USE_ROLE_STRING, IA2_ROLE_TERMINAL },
// roles::TEXT_CONTAINER
{ USE_ROLE_STRING, IA2_ROLE_TEXT_FRAME },
// roles::TOGGLE_BUTTON
{ ROLE_SYSTEM_PUSHBUTTON, IA2_ROLE_TOGGLE_BUTTON },
// roles::TREE_TABLE
{ ROLE_SYSTEM_OUTLINE, ROLE_SYSTEM_OUTLINE },
// roles::VIEWPORT
{ ROLE_SYSTEM_PANE, IA2_ROLE_VIEW_PORT },
// roles::HEADER
{ USE_ROLE_STRING, IA2_ROLE_HEADER },
// roles::FOOTER
{ USE_ROLE_STRING, IA2_ROLE_FOOTER },
// roles::PARAGRAPH
{ USE_ROLE_STRING, IA2_ROLE_PARAGRAPH },
// roles::RULER
{ USE_ROLE_STRING, IA2_ROLE_RULER },
// roles::AUTOCOMPLETE
{ ROLE_SYSTEM_COMBOBOX, ROLE_SYSTEM_COMBOBOX },
// roles::EDITBAR
{ ROLE_SYSTEM_TEXT, IA2_ROLE_EDITBAR },
// roles::ENTRY
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::CAPTION
{ USE_ROLE_STRING, IA2_ROLE_CAPTION },
// roles::DOCUMENT_FRAME
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::HEADING
{ USE_ROLE_STRING, IA2_ROLE_HEADING },
// roles::PAGE
{ USE_ROLE_STRING, IA2_ROLE_PAGE },
// roles::SECTION
{ USE_ROLE_STRING, IA2_ROLE_SECTION },
// roles::REDUNDANT_OBJECT
{ USE_ROLE_STRING, IA2_ROLE_REDUNDANT_OBJECT },
// roles::FORM
{ USE_ROLE_STRING, IA2_ROLE_FORM },
// roles::IME
{ USE_ROLE_STRING, IA2_ROLE_INPUT_METHOD_WINDOW },
// roles::APP_ROOT
{ ROLE_SYSTEM_APPLICATION, ROLE_SYSTEM_APPLICATION },
// roles::PARENT_MENUITEM
{ ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_MENUITEM },
// roles::CALENDAR
{ ROLE_SYSTEM_CLIENT, ROLE_SYSTEM_CLIENT },
// roles::COMBOBOX_LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::COMBOBOX_OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::IMAGE_MAP
{ ROLE_SYSTEM_GRAPHIC, ROLE_SYSTEM_GRAPHIC },
// roles::OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::RICH_OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::LISTBOX
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::FLAT_EQUATION
{ ROLE_SYSTEM_EQUATION, ROLE_SYSTEM_EQUATION },
// roles::GRID_CELL
{ ROLE_SYSTEM_CELL, ROLE_SYSTEM_CELL },
// roles::EMBEDDED_OBJECT
{ USE_ROLE_STRING, IA2_ROLE_EMBEDDED_OBJECT },
// roles::NOTE
{ USE_ROLE_STRING, IA2_ROLE_NOTE },
// roles::FIGURE
{ ROLE_SYSTEM_GROUPING, ROLE_SYSTEM_GROUPING },
// roles::CHECK_RICH_OPTION
{ ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CHECKBUTTON },
// roles::DEFINITION_LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::TERM
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::DEFINITION
{ USE_ROLE_STRING, IA2_ROLE_PARAGRAPH },
// roles::LAST_ENTRY
{ ROLE_WINDOWS_LAST_ENTRY, ROLE_WINDOWS_LAST_ENTRY }
};

Просмотреть файл

@ -20,7 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Alexander Surkov <surkov.alexander@gmail.com> (origianl author)
* Alexander Surkov <surkov.alexander@gmail.com> (original author)
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),