vcl/unx/gtk3/a11y/atkwrapper.cxx |  277 +++++++++++++++++++++++++--------------
 1 file changed, 180 insertions(+), 97 deletions(-)

New commits:
commit 2ab735df698972bff159f52975a1ed5cd4df128e
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Feb 21 16:51:03 2022 +0100
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Tue Feb 22 10:19:27 2022 +0100

    gtk3 a11y: Make a11y role mapping more explicit
    
    Use switch-case instead of an array that uses
    the numerical value of the accessibility::AccessibleRole
    as an index.
    
    Change-Id: Id7fbc31c058d0db716d2b60a4a7eb7e7e954af95
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130330
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/vcl/unx/gtk3/a11y/atkwrapper.cxx b/vcl/unx/gtk3/a11y/atkwrapper.cxx
index 2d65859ddd12..d23f384e26fc 100644
--- a/vcl/unx/gtk3/a11y/atkwrapper.cxx
+++ b/vcl/unx/gtk3/a11y/atkwrapper.cxx
@@ -168,103 +168,186 @@ AtkStateType mapAtkState( sal_Int16 nState )
 
 static AtkRole mapToAtkRole( sal_Int16 nRole )
 {
-    AtkRole role = ATK_ROLE_UNKNOWN;
-
-    static AtkRole roleMap[] = {
-        ATK_ROLE_UNKNOWN,
-        ATK_ROLE_ALERT,
-        ATK_ROLE_COLUMN_HEADER,
-        ATK_ROLE_CANVAS,
-        ATK_ROLE_CHECK_BOX,
-        ATK_ROLE_CHECK_MENU_ITEM,
-        ATK_ROLE_COLOR_CHOOSER,
-        ATK_ROLE_COMBO_BOX,
-        ATK_ROLE_DATE_EDITOR,
-        ATK_ROLE_DESKTOP_ICON,
-        ATK_ROLE_DESKTOP_FRAME,   // ? pane
-        ATK_ROLE_DIRECTORY_PANE,
-        ATK_ROLE_DIALOG,
-        ATK_ROLE_DOCUMENT_FRAME,  // DOCUMENT
-        ATK_ROLE_EMBEDDED,        // EMBEDDED_OBJECT
-        ATK_ROLE_FOOTNOTE,        // END_NOTE
-        ATK_ROLE_FILE_CHOOSER,
-        ATK_ROLE_FILLER,
-        ATK_ROLE_FONT_CHOOSER,
-        ATK_ROLE_FOOTER,
-        ATK_ROLE_FOOTNOTE,
-        ATK_ROLE_FRAME,
-        ATK_ROLE_GLASS_PANE,
-        ATK_ROLE_IMAGE,           // GRAPHIC
-        ATK_ROLE_GROUPING,        // GROUP_BOX
-        ATK_ROLE_HEADER,
-        ATK_ROLE_HEADING,
-        ATK_ROLE_LINK,            // HYPER_LINK
-        ATK_ROLE_ICON,
-        ATK_ROLE_INTERNAL_FRAME,
-        ATK_ROLE_LABEL,
-        ATK_ROLE_LAYERED_PANE,
-        ATK_ROLE_LIST,
-        ATK_ROLE_LIST_ITEM,
-        ATK_ROLE_MENU,
-        ATK_ROLE_MENU_BAR,
-        ATK_ROLE_MENU_ITEM,
-        ATK_ROLE_OPTION_PANE,
-        ATK_ROLE_PAGE_TAB,
-        ATK_ROLE_PAGE_TAB_LIST,
-        ATK_ROLE_PANEL,
-        ATK_ROLE_PARAGRAPH,
-        ATK_ROLE_PASSWORD_TEXT,
-        ATK_ROLE_POPUP_MENU,
-        ATK_ROLE_PUSH_BUTTON,
-        ATK_ROLE_PROGRESS_BAR,
-        ATK_ROLE_RADIO_BUTTON,
-        ATK_ROLE_RADIO_MENU_ITEM,
-        ATK_ROLE_ROW_HEADER,
-        ATK_ROLE_ROOT_PANE,
-        ATK_ROLE_SCROLL_BAR,
-        ATK_ROLE_SCROLL_PANE,
-        ATK_ROLE_PANEL,         // SHAPE
-        ATK_ROLE_SEPARATOR,
-        ATK_ROLE_SLIDER,
-        ATK_ROLE_SPIN_BUTTON,   // SPIN_BOX ?
-        ATK_ROLE_SPLIT_PANE,
-        ATK_ROLE_STATUSBAR,
-        ATK_ROLE_TABLE,
-        ATK_ROLE_TABLE_CELL,
-        ATK_ROLE_TEXT,
-        ATK_ROLE_PANEL,         // TEXT_FRAME
-        ATK_ROLE_TOGGLE_BUTTON,
-        ATK_ROLE_TOOL_BAR,
-        ATK_ROLE_TOOL_TIP,
-        ATK_ROLE_TREE,
-        ATK_ROLE_VIEWPORT,
-        ATK_ROLE_WINDOW,
-        ATK_ROLE_PUSH_BUTTON,   // BUTTON_DROPDOWN
-        ATK_ROLE_PUSH_BUTTON,   // BUTTON_MENU
-        ATK_ROLE_CAPTION,
-        ATK_ROLE_CHART,
-        ATK_ROLE_EDITBAR,
-        ATK_ROLE_FORM,
-        ATK_ROLE_IMAGE_MAP,
-        ATK_ROLE_COMMENT,       // NOTE
-        ATK_ROLE_PAGE,
-        ATK_ROLE_RULER,
-        ATK_ROLE_SECTION,
-        ATK_ROLE_TREE_ITEM,
-        ATK_ROLE_TREE_TABLE,
-        ATK_ROLE_COMMENT,
-        ATK_ROLE_UNKNOWN,        // COMMENT_END - mapped to atk_role_unknown
-        ATK_ROLE_DOCUMENT_PRESENTATION,
-        ATK_ROLE_DOCUMENT_SPREADSHEET,
-        ATK_ROLE_DOCUMENT_TEXT,
-        ATK_ROLE_STATIC
-    };
-
-    static const sal_Int32 nMapSize = SAL_N_ELEMENTS(roleMap);
-    if( 0 <= nRole &&  nMapSize > nRole )
-        role = roleMap[nRole];
-
-    return role;
+    switch (nRole)
+    {
+        case accessibility::AccessibleRole::UNKNOWN:
+            return ATK_ROLE_UNKNOWN;
+        case accessibility::AccessibleRole::ALERT:
+            return ATK_ROLE_ALERT;
+        case accessibility::AccessibleRole::COLUMN_HEADER:
+            return ATK_ROLE_COLUMN_HEADER;
+        case accessibility::AccessibleRole::CANVAS:
+            return ATK_ROLE_CANVAS;
+        case accessibility::AccessibleRole::CHECK_BOX:
+            return ATK_ROLE_CHECK_BOX;
+        case accessibility::AccessibleRole::CHECK_MENU_ITEM:
+            return ATK_ROLE_CHECK_MENU_ITEM;
+        case accessibility::AccessibleRole::COLOR_CHOOSER:
+            return ATK_ROLE_COLOR_CHOOSER;
+        case accessibility::AccessibleRole::COMBO_BOX:
+            return ATK_ROLE_COMBO_BOX;
+        case accessibility::AccessibleRole::DATE_EDITOR:
+            return ATK_ROLE_DATE_EDITOR;
+        case accessibility::AccessibleRole::DESKTOP_ICON:
+            return ATK_ROLE_DESKTOP_ICON;
+        case accessibility::AccessibleRole::DESKTOP_PANE:
+            return ATK_ROLE_DESKTOP_FRAME;
+        case accessibility::AccessibleRole::DIRECTORY_PANE:
+            return ATK_ROLE_DIRECTORY_PANE;
+        case accessibility::AccessibleRole::DIALOG:
+            return ATK_ROLE_DIALOG;
+        case accessibility::AccessibleRole::DOCUMENT:
+            return ATK_ROLE_DOCUMENT_FRAME;
+        case accessibility::AccessibleRole::EMBEDDED_OBJECT:
+            return ATK_ROLE_EMBEDDED;
+        case accessibility::AccessibleRole::END_NOTE:
+            return ATK_ROLE_FOOTNOTE;
+        case accessibility::AccessibleRole::FILE_CHOOSER:
+            return ATK_ROLE_FILE_CHOOSER;
+        case accessibility::AccessibleRole::FILLER:
+            return ATK_ROLE_FILLER;
+        case accessibility::AccessibleRole::FONT_CHOOSER:
+            return ATK_ROLE_FONT_CHOOSER;
+        case accessibility::AccessibleRole::FOOTER:
+            return ATK_ROLE_FOOTER;
+        case accessibility::AccessibleRole::FOOTNOTE:
+            return ATK_ROLE_FOOTNOTE;
+        case accessibility::AccessibleRole::FRAME:
+            return ATK_ROLE_FRAME;
+        case accessibility::AccessibleRole::GLASS_PANE:
+            return ATK_ROLE_GLASS_PANE;
+        case accessibility::AccessibleRole::GRAPHIC:
+            return ATK_ROLE_IMAGE;
+        case accessibility::AccessibleRole::GROUP_BOX:
+            return ATK_ROLE_GROUPING;
+        case accessibility::AccessibleRole::HEADER:
+            return ATK_ROLE_HEADER;
+        case accessibility::AccessibleRole::HEADING:
+            return ATK_ROLE_HEADING;
+        case accessibility::AccessibleRole::HYPER_LINK:
+            return ATK_ROLE_LINK;
+        case accessibility::AccessibleRole::ICON:
+            return ATK_ROLE_ICON;
+        case accessibility::AccessibleRole::INTERNAL_FRAME:
+            return ATK_ROLE_INTERNAL_FRAME;
+        case accessibility::AccessibleRole::LABEL:
+            return ATK_ROLE_LABEL;
+        case accessibility::AccessibleRole::LAYERED_PANE:
+            return ATK_ROLE_LAYERED_PANE;
+        case accessibility::AccessibleRole::LIST:
+            return ATK_ROLE_LIST;
+        case accessibility::AccessibleRole::LIST_ITEM:
+            return ATK_ROLE_LIST_ITEM;
+        case accessibility::AccessibleRole::MENU:
+            return ATK_ROLE_MENU;
+        case accessibility::AccessibleRole::MENU_BAR:
+            return ATK_ROLE_MENU_BAR;
+        case accessibility::AccessibleRole::MENU_ITEM:
+            return ATK_ROLE_MENU_ITEM;
+        case accessibility::AccessibleRole::OPTION_PANE:
+            return ATK_ROLE_OPTION_PANE;
+        case accessibility::AccessibleRole::PAGE_TAB:
+            return ATK_ROLE_PAGE_TAB;
+        case accessibility::AccessibleRole::PAGE_TAB_LIST:
+            return ATK_ROLE_PAGE_TAB_LIST;
+        case accessibility::AccessibleRole::PANEL:
+            return ATK_ROLE_PANEL;
+        case accessibility::AccessibleRole::PARAGRAPH:
+            return ATK_ROLE_PARAGRAPH;
+        case accessibility::AccessibleRole::PASSWORD_TEXT:
+            return ATK_ROLE_PASSWORD_TEXT;
+        case accessibility::AccessibleRole::POPUP_MENU:
+            return ATK_ROLE_POPUP_MENU;
+        case accessibility::AccessibleRole::PUSH_BUTTON:
+            return ATK_ROLE_PUSH_BUTTON;
+        case accessibility::AccessibleRole::PROGRESS_BAR:
+            return ATK_ROLE_PROGRESS_BAR;
+        case accessibility::AccessibleRole::RADIO_BUTTON:
+            return ATK_ROLE_RADIO_BUTTON;
+        case accessibility::AccessibleRole::RADIO_MENU_ITEM:
+            return ATK_ROLE_RADIO_MENU_ITEM;
+        case accessibility::AccessibleRole::ROW_HEADER:
+            return ATK_ROLE_ROW_HEADER;
+        case accessibility::AccessibleRole::ROOT_PANE:
+            return ATK_ROLE_ROOT_PANE;
+        case accessibility::AccessibleRole::SCROLL_BAR:
+            return ATK_ROLE_SCROLL_BAR;
+        case accessibility::AccessibleRole::SCROLL_PANE:
+            return ATK_ROLE_SCROLL_PANE;
+        case accessibility::AccessibleRole::SHAPE:
+            return ATK_ROLE_PANEL;
+        case accessibility::AccessibleRole::SEPARATOR:
+            return ATK_ROLE_SEPARATOR;
+        case accessibility::AccessibleRole::SLIDER:
+            return ATK_ROLE_SLIDER;
+        case accessibility::AccessibleRole::SPIN_BOX:
+            return ATK_ROLE_SPIN_BUTTON;
+        case accessibility::AccessibleRole::SPLIT_PANE:
+            return ATK_ROLE_SPLIT_PANE;
+        case accessibility::AccessibleRole::STATUS_BAR:
+            return ATK_ROLE_STATUSBAR;
+        case accessibility::AccessibleRole::TABLE:
+            return ATK_ROLE_TABLE;
+        case accessibility::AccessibleRole::TABLE_CELL:
+            return ATK_ROLE_TABLE_CELL;
+        case accessibility::AccessibleRole::TEXT:
+            return ATK_ROLE_TEXT;
+        case accessibility::AccessibleRole::TEXT_FRAME:
+            return ATK_ROLE_PANEL;
+        case accessibility::AccessibleRole::TOGGLE_BUTTON:
+            return ATK_ROLE_TOGGLE_BUTTON;
+        case accessibility::AccessibleRole::TOOL_BAR:
+            return ATK_ROLE_TOOL_BAR;
+        case accessibility::AccessibleRole::TOOL_TIP:
+            return ATK_ROLE_TOOL_TIP;
+        case accessibility::AccessibleRole::TREE:
+            return ATK_ROLE_TREE;
+        case accessibility::AccessibleRole::VIEW_PORT:
+            return ATK_ROLE_VIEWPORT;
+        case accessibility::AccessibleRole::WINDOW:
+            return ATK_ROLE_WINDOW;
+        case accessibility::AccessibleRole::BUTTON_DROPDOWN:
+            return ATK_ROLE_PUSH_BUTTON;
+        case accessibility::AccessibleRole::BUTTON_MENU:
+            return ATK_ROLE_PUSH_BUTTON;
+        case accessibility::AccessibleRole::CAPTION:
+            return ATK_ROLE_CAPTION;
+        case accessibility::AccessibleRole::CHART:
+            return ATK_ROLE_CHART;
+        case accessibility::AccessibleRole::EDIT_BAR:
+            return ATK_ROLE_EDITBAR;
+        case accessibility::AccessibleRole::FORM:
+            return ATK_ROLE_FORM;
+        case accessibility::AccessibleRole::IMAGE_MAP:
+            return ATK_ROLE_IMAGE_MAP;
+        case accessibility::AccessibleRole::NOTE:
+            return ATK_ROLE_COMMENT;
+        case accessibility::AccessibleRole::PAGE:
+            return ATK_ROLE_PAGE;
+        case accessibility::AccessibleRole::RULER:
+            return ATK_ROLE_RULER;
+        case accessibility::AccessibleRole::SECTION:
+            return ATK_ROLE_SECTION;
+        case accessibility::AccessibleRole::TREE_ITEM:
+            return ATK_ROLE_TREE_ITEM;
+        case accessibility::AccessibleRole::TREE_TABLE:
+            return ATK_ROLE_TREE_TABLE;
+        case accessibility::AccessibleRole::COMMENT:
+            return ATK_ROLE_COMMENT;
+        case accessibility::AccessibleRole::COMMENT_END:
+            return ATK_ROLE_UNKNOWN;
+        case accessibility::AccessibleRole::DOCUMENT_PRESENTATION:
+            return ATK_ROLE_DOCUMENT_PRESENTATION;
+        case accessibility::AccessibleRole::DOCUMENT_SPREADSHEET:
+            return ATK_ROLE_DOCUMENT_SPREADSHEET;
+        case accessibility::AccessibleRole::DOCUMENT_TEXT:
+            return ATK_ROLE_DOCUMENT_TEXT;
+        case accessibility::AccessibleRole::STATIC:
+            return ATK_ROLE_STATIC;
+        default:
+            SAL_WARN("vcl.gtk", "Unmapped accessible role: " << nRole);
+            return ATK_ROLE_UNKNOWN;
+    }
 }
 
 /*****************************************************************************/

Reply via email to