summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winaccessibility/source/service/AccObject.cxx301
1 files changed, 197 insertions, 104 deletions
diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx
index 98c6bba9392f..ad0f65d8cc09 100644
--- a/winaccessibility/source/service/AccObject.cxx
+++ b/winaccessibility/source/service/AccObject.cxx
@@ -26,6 +26,7 @@
#include <o3tl/char16_t2wchar_t.hxx>
#include <o3tl/safeint.hxx>
+#include <sal/log.hxx>
#include <stdlib.h>
#include <memory.h>
@@ -51,102 +52,199 @@ using namespace com::sun::star::accessibility;
using namespace com::sun::star::accessibility::AccessibleRole;
using namespace com::sun::star::accessibility::AccessibleStateType;
-//Role mapping table,left side is UNO role, right side is MSAA role
-const short ROLE_TABLE[][2] =
+namespace {
+
+/**
+ * Map a UNO accessible role to an IAccessible2 role.
+ * @param nUnoRole The UNO role (css::accessiblity::AccessibleRole).
+ * @return IAccessible2 role.
+ */
+short lcl_mapToIAccessible2Role(sal_Int16 nUnoRole)
+{
+ switch(nUnoRole)
{
- {UNKNOWN, IA2_ROLE_UNKNOWN},
- {ALERT , ROLE_SYSTEM_DIALOG},
- {COLUMN_HEADER , ROLE_SYSTEM_COLUMNHEADER},
- //{CANVAS , ROLE_SYSTEM_CLIENT},
- {CANVAS , IA2_ROLE_CANVAS},
- {CHECK_BOX , ROLE_SYSTEM_CHECKBUTTON},
- {CHECK_MENU_ITEM , IA2_ROLE_CHECK_MENU_ITEM},
- {COLOR_CHOOSER, IA2_ROLE_COLOR_CHOOSER},
- {COMBO_BOX , ROLE_SYSTEM_COMBOBOX},
- {DATE_EDITOR , IA2_ROLE_DATE_EDITOR},
- {DESKTOP_ICON , IA2_ROLE_DESKTOP_ICON},
- {DESKTOP_PANE, IA2_ROLE_DESKTOP_PANE},
- {DIRECTORY_PANE, IA2_ROLE_DIRECTORY_PANE},
- {DIALOG, ROLE_SYSTEM_DIALOG},
- {DOCUMENT, ROLE_SYSTEM_DOCUMENT},
- {EMBEDDED_OBJECT , IA2_ROLE_EMBEDDED_OBJECT },
- {END_NOTE , IA2_ROLE_ENDNOTE },
- {FILE_CHOOSER , IA2_ROLE_FILE_CHOOSER },
- {FILLER, ROLE_SYSTEM_WHITESPACE},
- {FONT_CHOOSER, IA2_ROLE_FONT_CHOOSER},
- {FOOTER, IA2_ROLE_FOOTER},
- {FOOTNOTE, IA2_ROLE_FOOTNOTE},
- {FRAME, IA2_ROLE_FRAME},
- {GLASS_PANE , IA2_ROLE_GLASS_PANE},
- {GRAPHIC , ROLE_SYSTEM_GRAPHIC},
- {GROUP_BOX, ROLE_SYSTEM_GROUPING},
- {HEADER , IA2_ROLE_HEADER},
- {HEADING , IA2_ROLE_HEADING},
- {HYPER_LINK , ROLE_SYSTEM_TEXT},
- {ICON , IA2_ROLE_ICON},
- {INTERNAL_FRAME, IA2_ROLE_INTERNAL_FRAME},
- {LABEL, ROLE_SYSTEM_STATICTEXT},
- {LAYERED_PANE , IA2_ROLE_LAYERED_PANE},
- {LIST , ROLE_SYSTEM_LIST},
- {LIST_ITEM , ROLE_SYSTEM_LISTITEM},
- //{MENU , ROLE_SYSTEM_MENUPOPUP},
- {MENU, ROLE_SYSTEM_MENUITEM},
- {MENU_BAR, ROLE_SYSTEM_MENUBAR},
- {MENU_ITEM, ROLE_SYSTEM_MENUITEM},
- {OPTION_PANE , IA2_ROLE_OPTION_PANE},
- {PAGE_TAB, ROLE_SYSTEM_PAGETAB},
- {PAGE_TAB_LIST, ROLE_SYSTEM_PAGETABLIST},
- {PANEL, IA2_ROLE_OPTION_PANE},
- {PARAGRAPH, IA2_ROLE_PARAGRAPH},
- {PASSWORD_TEXT, ROLE_SYSTEM_TEXT},
- {POPUP_MENU, ROLE_SYSTEM_MENUPOPUP},
- {PUSH_BUTTON, ROLE_SYSTEM_PUSHBUTTON},
- {PROGRESS_BAR, ROLE_SYSTEM_PROGRESSBAR},
- {RADIO_BUTTON, ROLE_SYSTEM_RADIOBUTTON},
- {RADIO_MENU_ITEM, IA2_ROLE_RADIO_MENU_ITEM},
- {ROW_HEADER , ROLE_SYSTEM_ROWHEADER},
- {ROOT_PANE, IA2_ROLE_ROOT_PANE},
- {SCROLL_BAR , ROLE_SYSTEM_SCROLLBAR},
- {SCROLL_PANE , IA2_ROLE_SCROLL_PANE},
- {SHAPE, IA2_ROLE_SHAPE},
- {SEPARATOR , ROLE_SYSTEM_SEPARATOR},
- {SLIDER , ROLE_SYSTEM_SLIDER},
- {SPIN_BOX , ROLE_SYSTEM_SPINBUTTON},
- {SPLIT_PANE, IA2_ROLE_SPLIT_PANE},
- {STATUS_BAR, ROLE_SYSTEM_STATUSBAR},
- {TABLE, ROLE_SYSTEM_TABLE},
- {TABLE_CELL , ROLE_SYSTEM_CELL},
- {TEXT, ROLE_SYSTEM_TEXT},
- {TEXT_FRAME , IA2_ROLE_TEXT_FRAME},
- //for change toggle button to push button for jaws
- {TOGGLE_BUTTON, ROLE_SYSTEM_PUSHBUTTON},
-
- {TOOL_BAR, ROLE_SYSTEM_TOOLBAR},
- {TOOL_TIP, ROLE_SYSTEM_TOOLTIP},
- {TREE , ROLE_SYSTEM_OUTLINE},
- {VIEW_PORT , IA2_ROLE_VIEW_PORT},
- {WINDOW, ROLE_SYSTEM_WINDOW},
- {BUTTON_DROPDOWN, ROLE_SYSTEM_BUTTONDROPDOWN},
- {BUTTON_MENU, ROLE_SYSTEM_BUTTONMENU},
- {CAPTION, IA2_ROLE_CAPTION},
- {CHART, IA2_ROLE_SHAPE},
- {EDIT_BAR, IA2_ROLE_EDITBAR},
- {FORM, IA2_ROLE_FORM},
- {IMAGE_MAP , IA2_ROLE_IMAGE_MAP},
- {NOTE, IA2_ROLE_NOTE},
- {PAGE, IA2_ROLE_PAGE},
- {RULER , IA2_ROLE_RULER},
- {SECTION, IA2_ROLE_SECTION},
- {TREE_ITEM , ROLE_SYSTEM_OUTLINEITEM},
- {TREE_TABLE, ROLE_SYSTEM_OUTLINE},
- {COMMENT, IA2_ROLE_TEXT_FRAME },
- {COMMENT_END, IA2_ROLE_TEXT_FRAME },
- {DOCUMENT_PRESENTATION, ROLE_SYSTEM_DOCUMENT },
- {DOCUMENT_SPREADSHEET, ROLE_SYSTEM_DOCUMENT },
- {DOCUMENT_TEXT, ROLE_SYSTEM_DOCUMENT },
- {STATIC, ROLE_SYSTEM_STATICTEXT },
- {NOTIFICATION, ROLE_SYSTEM_ALERT}
- };
+ case css::accessibility::AccessibleRole::UNKNOWN:
+ return IA2_ROLE_UNKNOWN;
+ case css::accessibility::AccessibleRole::ALERT:
+ return ROLE_SYSTEM_DIALOG;
+ case css::accessibility::AccessibleRole::COLUMN_HEADER:
+ return ROLE_SYSTEM_COLUMNHEADER;
+ case css::accessibility::AccessibleRole::CANVAS:
+ return IA2_ROLE_CANVAS;
+ case css::accessibility::AccessibleRole::CHECK_BOX:
+ return ROLE_SYSTEM_CHECKBUTTON;
+ case css::accessibility::AccessibleRole::CHECK_MENU_ITEM:
+ return IA2_ROLE_CHECK_MENU_ITEM;
+ case css::accessibility::AccessibleRole::COLOR_CHOOSER:
+ return IA2_ROLE_COLOR_CHOOSER;
+ case css::accessibility::AccessibleRole::COMBO_BOX:
+ return ROLE_SYSTEM_COMBOBOX;
+ case css::accessibility::AccessibleRole::DATE_EDITOR:
+ return IA2_ROLE_DATE_EDITOR;
+ case css::accessibility::AccessibleRole::DESKTOP_ICON:
+ return IA2_ROLE_DESKTOP_ICON;
+ case css::accessibility::AccessibleRole::DESKTOP_PANE:
+ return IA2_ROLE_DESKTOP_PANE;
+ case css::accessibility::AccessibleRole::DIRECTORY_PANE:
+ return IA2_ROLE_DIRECTORY_PANE;
+ case css::accessibility::AccessibleRole::DIALOG:
+ return ROLE_SYSTEM_DIALOG;
+ case css::accessibility::AccessibleRole::DOCUMENT:
+ return ROLE_SYSTEM_DOCUMENT;
+ case css::accessibility::AccessibleRole::EMBEDDED_OBJECT:
+ return IA2_ROLE_EMBEDDED_OBJECT;
+ case css::accessibility::AccessibleRole::END_NOTE:
+ return IA2_ROLE_ENDNOTE;
+ case css::accessibility::AccessibleRole::FILE_CHOOSER:
+ return IA2_ROLE_FILE_CHOOSER;
+ case css::accessibility::AccessibleRole::FILLER:
+ return ROLE_SYSTEM_WHITESPACE;
+ case css::accessibility::AccessibleRole::FONT_CHOOSER:
+ return IA2_ROLE_FONT_CHOOSER;
+ case css::accessibility::AccessibleRole::FOOTER:
+ return IA2_ROLE_FOOTER;
+ case css::accessibility::AccessibleRole::FOOTNOTE:
+ return IA2_ROLE_FOOTNOTE;
+ case css::accessibility::AccessibleRole::FRAME:
+ return IA2_ROLE_FRAME;
+ case css::accessibility::AccessibleRole::GLASS_PANE:
+ return IA2_ROLE_GLASS_PANE;
+ case css::accessibility::AccessibleRole::GRAPHIC:
+ return ROLE_SYSTEM_GRAPHIC;
+ case css::accessibility::AccessibleRole::GROUP_BOX:
+ return ROLE_SYSTEM_GROUPING;
+ case css::accessibility::AccessibleRole::HEADER:
+ return IA2_ROLE_HEADER;
+ case css::accessibility::AccessibleRole::HEADING:
+ return IA2_ROLE_HEADING;
+ case css::accessibility::AccessibleRole::HYPER_LINK:
+ return ROLE_SYSTEM_TEXT;
+ case css::accessibility::AccessibleRole::ICON:
+ return IA2_ROLE_ICON;
+ case css::accessibility::AccessibleRole::INTERNAL_FRAME:
+ return IA2_ROLE_INTERNAL_FRAME;
+ case css::accessibility::AccessibleRole::LABEL:
+ return ROLE_SYSTEM_STATICTEXT;
+ case css::accessibility::AccessibleRole::LAYERED_PANE:
+ return IA2_ROLE_LAYERED_PANE;
+ case css::accessibility::AccessibleRole::LIST:
+ return ROLE_SYSTEM_LIST;
+ case css::accessibility::AccessibleRole::LIST_ITEM:
+ return ROLE_SYSTEM_LISTITEM;
+ case css::accessibility::AccessibleRole::MENU:
+ return ROLE_SYSTEM_MENUITEM;
+ case css::accessibility::AccessibleRole::MENU_BAR:
+ return ROLE_SYSTEM_MENUBAR;
+ case css::accessibility::AccessibleRole::MENU_ITEM:
+ return ROLE_SYSTEM_MENUITEM;
+ case css::accessibility::AccessibleRole::OPTION_PANE:
+ return IA2_ROLE_OPTION_PANE;
+ case css::accessibility::AccessibleRole::PAGE_TAB:
+ return ROLE_SYSTEM_PAGETAB;
+ case css::accessibility::AccessibleRole::PAGE_TAB_LIST:
+ return ROLE_SYSTEM_PAGETABLIST;
+ case css::accessibility::AccessibleRole::PANEL:
+ return IA2_ROLE_OPTION_PANE;
+ case css::accessibility::AccessibleRole::PARAGRAPH:
+ return IA2_ROLE_PARAGRAPH;
+ case css::accessibility::AccessibleRole::PASSWORD_TEXT:
+ return ROLE_SYSTEM_TEXT;
+ case css::accessibility::AccessibleRole::POPUP_MENU:
+ return ROLE_SYSTEM_MENUPOPUP;
+ case css::accessibility::AccessibleRole::PUSH_BUTTON:
+ return ROLE_SYSTEM_PUSHBUTTON;
+ case css::accessibility::AccessibleRole::PROGRESS_BAR:
+ return ROLE_SYSTEM_PROGRESSBAR;
+ case css::accessibility::AccessibleRole::RADIO_BUTTON:
+ return ROLE_SYSTEM_RADIOBUTTON;
+ case css::accessibility::AccessibleRole::RADIO_MENU_ITEM:
+ return IA2_ROLE_RADIO_MENU_ITEM;
+ case css::accessibility::AccessibleRole::ROW_HEADER:
+ return ROLE_SYSTEM_ROWHEADER;
+ case css::accessibility::AccessibleRole::ROOT_PANE:
+ return IA2_ROLE_ROOT_PANE;
+ case css::accessibility::AccessibleRole::SCROLL_BAR:
+ return ROLE_SYSTEM_SCROLLBAR;
+ case css::accessibility::AccessibleRole::SCROLL_PANE:
+ return IA2_ROLE_SCROLL_PANE;
+ case css::accessibility::AccessibleRole::SHAPE:
+ return IA2_ROLE_SHAPE;
+ case css::accessibility::AccessibleRole::SEPARATOR:
+ return ROLE_SYSTEM_SEPARATOR;
+ case css::accessibility::AccessibleRole::SLIDER:
+ return ROLE_SYSTEM_SLIDER;
+ case css::accessibility::AccessibleRole::SPIN_BOX:
+ return ROLE_SYSTEM_SPINBUTTON;
+ case css::accessibility::AccessibleRole::SPLIT_PANE:
+ return IA2_ROLE_SPLIT_PANE;
+ case css::accessibility::AccessibleRole::STATUS_BAR:
+ return ROLE_SYSTEM_STATUSBAR;
+ case css::accessibility::AccessibleRole::TABLE:
+ return ROLE_SYSTEM_TABLE;
+ case css::accessibility::AccessibleRole::TABLE_CELL:
+ return ROLE_SYSTEM_CELL;
+ case css::accessibility::AccessibleRole::TEXT:
+ return ROLE_SYSTEM_TEXT;
+ case css::accessibility::AccessibleRole::TEXT_FRAME:
+ return IA2_ROLE_TEXT_FRAME;
+ case css::accessibility::AccessibleRole::TOGGLE_BUTTON:
+ return ROLE_SYSTEM_PUSHBUTTON;
+ case css::accessibility::AccessibleRole::TOOL_BAR:
+ return ROLE_SYSTEM_TOOLBAR;
+ case css::accessibility::AccessibleRole::TOOL_TIP:
+ return ROLE_SYSTEM_TOOLTIP;
+ case css::accessibility::AccessibleRole::TREE:
+ return ROLE_SYSTEM_OUTLINE;
+ case css::accessibility::AccessibleRole::VIEW_PORT:
+ return IA2_ROLE_VIEW_PORT;
+ case css::accessibility::AccessibleRole::WINDOW:
+ return ROLE_SYSTEM_WINDOW;
+ case css::accessibility::AccessibleRole::BUTTON_DROPDOWN:
+ return ROLE_SYSTEM_BUTTONDROPDOWN;
+ case css::accessibility::AccessibleRole::BUTTON_MENU:
+ return ROLE_SYSTEM_BUTTONMENU;
+ case css::accessibility::AccessibleRole::CAPTION:
+ return IA2_ROLE_CAPTION;
+ case css::accessibility::AccessibleRole::CHART:
+ return IA2_ROLE_SHAPE;
+ case css::accessibility::AccessibleRole::EDIT_BAR:
+ return IA2_ROLE_EDITBAR;
+ case css::accessibility::AccessibleRole::FORM:
+ return IA2_ROLE_FORM;
+ case css::accessibility::AccessibleRole::IMAGE_MAP:
+ return IA2_ROLE_IMAGE_MAP;
+ case css::accessibility::AccessibleRole::NOTE:
+ return IA2_ROLE_NOTE;
+ case css::accessibility::AccessibleRole::PAGE:
+ return IA2_ROLE_PAGE;
+ case css::accessibility::AccessibleRole::RULER:
+ return IA2_ROLE_RULER;
+ case css::accessibility::AccessibleRole::SECTION:
+ return IA2_ROLE_SECTION;
+ case css::accessibility::AccessibleRole::TREE_ITEM:
+ return ROLE_SYSTEM_OUTLINEITEM;
+ case css::accessibility::AccessibleRole::TREE_TABLE:
+ return ROLE_SYSTEM_OUTLINE;
+ case css::accessibility::AccessibleRole::COMMENT:
+ return IA2_ROLE_TEXT_FRAME;
+ case css::accessibility::AccessibleRole::COMMENT_END:
+ return IA2_ROLE_TEXT_FRAME;
+ case css::accessibility::AccessibleRole::DOCUMENT_PRESENTATION:
+ return ROLE_SYSTEM_DOCUMENT;
+ case css::accessibility::AccessibleRole::DOCUMENT_SPREADSHEET:
+ return ROLE_SYSTEM_DOCUMENT;
+ case css::accessibility::AccessibleRole::DOCUMENT_TEXT:
+ return ROLE_SYSTEM_DOCUMENT;
+ case css::accessibility::AccessibleRole::STATIC:
+ return ROLE_SYSTEM_STATICTEXT;
+ case css::accessibility::AccessibleRole::NOTIFICATION:
+ return ROLE_SYSTEM_ALERT;
+ default:
+ SAL_WARN("iacc2", "Unmapped role: " << nUnoRole);
+ return IA2_ROLE_UNKNOWN;
+ }
+}
+};
/**
@@ -739,16 +837,11 @@ void AccObject::UpdateRole()
return;
}
- XAccessibleContext* pContext = m_xAccContextRef.get();
- m_pIMAcc->Put_XAccRole( ROLE_SYSTEM_WINDOW );
- sal_Int16 iRoleIndex = pContext->getAccessibleRole();
- if ((0 <= iRoleIndex) && (o3tl::make_unsigned(iRoleIndex) < SAL_N_ELEMENTS(ROLE_TABLE)))
- {
- short iIA2Role = ROLE_TABLE[iRoleIndex][1] ;
- m_pIMAcc->Put_XAccRole( iIA2Role );
- }
-
+ const sal_Int16 nUnoRole = m_xAccContextRef->getAccessibleRole();
+ short nIA2Role = lcl_mapToIAccessible2Role(nUnoRole);
+ m_pIMAcc->Put_XAccRole(nIA2Role);
}
+
/**
* update state information from uno to com
* @param