vcl/source/window/accessibility.cxx | 147 ++++++++++++++++++++++++++---------- 1 file changed, 107 insertions(+), 40 deletions(-)
New commits: commit 520722210d9ffcf57b08e4bd7dd8803c5190937c Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Thu Apr 11 09:39:08 2024 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Apr 11 23:53:52 2024 +0200 a11y: Assign a11y role for WindowType::PROGRESSBAR `WindowType::PROGRESSBAR` was recently added in commit 460a7103664ac8dc60e260c56e5113d689b8072f Author: Hubert Figuière <h...@collabora.com> Date: Fri Mar 22 09:59:54 2024 -0400 vcl: Implement JSLevelBar This fixes the JSDialog layout of the sheet protection dialog. This was introduced for 24.02 to provide password strength indication of the sheet password. Defined a new WindowType of PROGRESSBAR. The type property in JSDialog JSON will be "progressbar". Map it to the corresponding a11y role, `accessibility::AccessibleRole::PROGRESS_BAR`, so it's reported as such on the a11y level. The role can e.g. be seen in Accerciser for the password strength indicator (progress bar) in the dialog to set a document password (shown when checking the "Save with password" checkbox in the Save dialog in Writer). Before: In [2]: acc.role Out[2]: <enum ATSPI_ROLE_PANEL of type Atspi.Role> With this commit in place: In [8]: acc.role Out[8]: <enum ATSPI_ROLE_PROGRESS_BAR of type Atspi.Role> Change-Id: Idfd7798641e30632a9ffd2ea07a79d42d159a51f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165989 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/source/window/accessibility.cxx b/vcl/source/window/accessibility.cxx index 47f46ee44ab7..e48d5d22dd5e 100644 --- a/vcl/source/window/accessibility.cxx +++ b/vcl/source/window/accessibility.cxx @@ -363,6 +363,10 @@ sal_uInt16 Window::getDefaultAccessibleRole() const nRole = accessibility::AccessibleRole::TOOL_TIP; break; + case WindowType::PROGRESSBAR: + nRole = accessibility::AccessibleRole::PROGRESS_BAR; + break; + case WindowType::RULER: nRole = accessibility::AccessibleRole::RULER; break; commit 0de33d779747d4117348daf92b08b105102968b3 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Thu Apr 11 09:17:39 2024 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Apr 11 23:53:45 2024 +0200 vcl a11y: Reformat switch-case in Window::getDefaultAccessibleRole Use more standard formatting for this switch-case in `Window::getDefaultAccessibleRole` (mostly done by clang-format). It helps at least myself see more easily what a11y role a window type is mapped to as the assignment and break are on separate, further indented lines now. Change-Id: Ic6c7588f2212055812cd32d34eccbaf27fa41eb0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165988 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/source/window/accessibility.cxx b/vcl/source/window/accessibility.cxx index 72dc2797d935..47f46ee44ab7 100644 --- a/vcl/source/window/accessibility.cxx +++ b/vcl/source/window/accessibility.cxx @@ -215,111 +215,174 @@ void Window::SetAccessibleRole( sal_uInt16 nRole ) sal_uInt16 Window::getDefaultAccessibleRole() const { sal_uInt16 nRole = 0xFFFF; - switch ( GetType() ) + switch (GetType()) { - case WindowType::MESSBOX: // MT: Would be nice to have special roles! + case WindowType::MESSBOX: // MT: Would be nice to have special roles! case WindowType::INFOBOX: case WindowType::WARNINGBOX: case WindowType::ERRORBOX: - case WindowType::QUERYBOX: nRole = accessibility::AccessibleRole::ALERT; break; + case WindowType::QUERYBOX: + nRole = accessibility::AccessibleRole::ALERT; + break; case WindowType::MODELESSDIALOG: case WindowType::TABDIALOG: case WindowType::BUTTONDIALOG: - case WindowType::DIALOG: nRole = accessibility::AccessibleRole::DIALOG; break; + case WindowType::DIALOG: + nRole = accessibility::AccessibleRole::DIALOG; + break; case WindowType::PUSHBUTTON: case WindowType::OKBUTTON: case WindowType::CANCELBUTTON: case WindowType::HELPBUTTON: case WindowType::IMAGEBUTTON: - case WindowType::MOREBUTTON: nRole = accessibility::AccessibleRole::PUSH_BUTTON; break; - case WindowType::MENUBUTTON: nRole = accessibility::AccessibleRole::BUTTON_MENU; break; + case WindowType::MOREBUTTON: + nRole = accessibility::AccessibleRole::PUSH_BUTTON; + break; + case WindowType::MENUBUTTON: + nRole = accessibility::AccessibleRole::BUTTON_MENU; + break; - case WindowType::RADIOBUTTON: nRole = accessibility::AccessibleRole::RADIO_BUTTON; break; + case WindowType::RADIOBUTTON: + nRole = accessibility::AccessibleRole::RADIO_BUTTON; + break; case WindowType::TRISTATEBOX: - case WindowType::CHECKBOX: nRole = accessibility::AccessibleRole::CHECK_BOX; break; + case WindowType::CHECKBOX: + nRole = accessibility::AccessibleRole::CHECK_BOX; + break; - case WindowType::MULTILINEEDIT: nRole = accessibility::AccessibleRole::SCROLL_PANE; break; + case WindowType::MULTILINEEDIT: + nRole = accessibility::AccessibleRole::SCROLL_PANE; + break; case WindowType::PATTERNFIELD: - case WindowType::EDIT: nRole = static_cast<Edit const *>(this)->IsPassword() ? accessibility::AccessibleRole::PASSWORD_TEXT : accessibility::AccessibleRole::TEXT; break; + case WindowType::EDIT: + nRole = static_cast<Edit const*>(this)->IsPassword() + ? accessibility::AccessibleRole::PASSWORD_TEXT + : accessibility::AccessibleRole::TEXT; + break; case WindowType::PATTERNBOX: case WindowType::NUMERICBOX: case WindowType::METRICBOX: case WindowType::CURRENCYBOX: case WindowType::LONGCURRENCYBOX: - case WindowType::COMBOBOX: nRole = accessibility::AccessibleRole::COMBO_BOX; break; + case WindowType::COMBOBOX: + nRole = accessibility::AccessibleRole::COMBO_BOX; + break; case WindowType::LISTBOX: - case WindowType::MULTILISTBOX: nRole = accessibility::AccessibleRole::LIST; break; + case WindowType::MULTILISTBOX: + nRole = accessibility::AccessibleRole::LIST; + break; - case WindowType::TREELISTBOX: nRole = accessibility::AccessibleRole::TREE; break; + case WindowType::TREELISTBOX: + nRole = accessibility::AccessibleRole::TREE; + break; - case WindowType::FIXEDTEXT: nRole = accessibility::AccessibleRole::LABEL; break; + case WindowType::FIXEDTEXT: + nRole = accessibility::AccessibleRole::LABEL; + break; case WindowType::FIXEDLINE: - if( !GetText().isEmpty() ) + if (!GetText().isEmpty()) nRole = accessibility::AccessibleRole::LABEL; else nRole = accessibility::AccessibleRole::SEPARATOR; break; case WindowType::FIXEDBITMAP: - case WindowType::FIXEDIMAGE: nRole = accessibility::AccessibleRole::ICON; break; - case WindowType::GROUPBOX: nRole = accessibility::AccessibleRole::GROUP_BOX; break; - case WindowType::SCROLLBAR: nRole = accessibility::AccessibleRole::SCROLL_BAR; break; + case WindowType::FIXEDIMAGE: + nRole = accessibility::AccessibleRole::ICON; + break; + case WindowType::GROUPBOX: + nRole = accessibility::AccessibleRole::GROUP_BOX; + break; + case WindowType::SCROLLBAR: + nRole = accessibility::AccessibleRole::SCROLL_BAR; + break; case WindowType::SLIDER: case WindowType::SPLITTER: - case WindowType::SPLITWINDOW: nRole = accessibility::AccessibleRole::SPLIT_PANE; break; + case WindowType::SPLITWINDOW: + nRole = accessibility::AccessibleRole::SPLIT_PANE; + break; case WindowType::DATEBOX: case WindowType::TIMEBOX: case WindowType::DATEFIELD: - case WindowType::TIMEFIELD: nRole = accessibility::AccessibleRole::DATE_EDITOR; break; + case WindowType::TIMEFIELD: + nRole = accessibility::AccessibleRole::DATE_EDITOR; + break; case WindowType::METRICFIELD: case WindowType::CURRENCYFIELD: case WindowType::SPINBUTTON: case WindowType::SPINFIELD: - case WindowType::FORMATTEDFIELD: nRole = accessibility::AccessibleRole::SPIN_BOX; break; + case WindowType::FORMATTEDFIELD: + nRole = accessibility::AccessibleRole::SPIN_BOX; + break; - case WindowType::TOOLBOX: nRole = accessibility::AccessibleRole::TOOL_BAR; break; - case WindowType::STATUSBAR: nRole = accessibility::AccessibleRole::STATUS_BAR; break; + case WindowType::TOOLBOX: + nRole = accessibility::AccessibleRole::TOOL_BAR; + break; + case WindowType::STATUSBAR: + nRole = accessibility::AccessibleRole::STATUS_BAR; + break; - case WindowType::TABPAGE: nRole = accessibility::AccessibleRole::PANEL; break; - case WindowType::TABCONTROL: nRole = accessibility::AccessibleRole::PAGE_TAB_LIST; break; + case WindowType::TABPAGE: + nRole = accessibility::AccessibleRole::PANEL; + break; + case WindowType::TABCONTROL: + nRole = accessibility::AccessibleRole::PAGE_TAB_LIST; + break; - case WindowType::DOCKINGWINDOW: nRole = (mpWindowImpl->mbFrame) ? accessibility::AccessibleRole::FRAME : - accessibility::AccessibleRole::PANEL; break; + case WindowType::DOCKINGWINDOW: + nRole = (mpWindowImpl->mbFrame) ? accessibility::AccessibleRole::FRAME + : accessibility::AccessibleRole::PANEL; + break; - case WindowType::FLOATINGWINDOW: nRole = ( mpWindowImpl->mbFrame || - (mpWindowImpl->mpBorderWindow && mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame) || - (GetStyle() & WB_OWNERDRAWDECORATION) ) ? accessibility::AccessibleRole::FRAME : - accessibility::AccessibleRole::WINDOW; break; + case WindowType::FLOATINGWINDOW: + nRole = (mpWindowImpl->mbFrame + || (mpWindowImpl->mpBorderWindow + && mpWindowImpl->mpBorderWindow->mpWindowImpl->mbFrame) + || (GetStyle() & WB_OWNERDRAWDECORATION)) + ? accessibility::AccessibleRole::FRAME + : accessibility::AccessibleRole::WINDOW; + break; - case WindowType::WORKWINDOW: nRole = accessibility::AccessibleRole::ROOT_PANE; break; + case WindowType::WORKWINDOW: + nRole = accessibility::AccessibleRole::ROOT_PANE; + break; - case WindowType::SCROLLBARBOX: nRole = accessibility::AccessibleRole::FILLER; break; + case WindowType::SCROLLBARBOX: + nRole = accessibility::AccessibleRole::FILLER; + break; - case WindowType::HELPTEXTWINDOW: nRole = accessibility::AccessibleRole::TOOL_TIP; break; + case WindowType::HELPTEXTWINDOW: + nRole = accessibility::AccessibleRole::TOOL_TIP; + break; - case WindowType::RULER: nRole = accessibility::AccessibleRole::RULER; break; + case WindowType::RULER: + nRole = accessibility::AccessibleRole::RULER; + break; - case WindowType::SCROLLWINDOW: nRole = accessibility::AccessibleRole::SCROLL_PANE; break; + case WindowType::SCROLLWINDOW: + nRole = accessibility::AccessibleRole::SCROLL_PANE; + break; case WindowType::WINDOW: case WindowType::CONTROL: case WindowType::BORDERWINDOW: case WindowType::SYSTEMCHILDWINDOW: default: - if (IsNativeFrame() ) + if (IsNativeFrame()) nRole = accessibility::AccessibleRole::FRAME; - else if( IsScrollable() ) + else if (IsScrollable()) nRole = accessibility::AccessibleRole::SCROLL_PANE; - else if( this->ImplGetWindow()->IsMenuFloatingWindow() ) - nRole = accessibility::AccessibleRole::WINDOW; // #106002#, contextmenus are windows (i.e. toplevel) + else if (this->ImplGetWindow()->IsMenuFloatingWindow()) + // #106002#, contextmenus are windows (i.e. toplevel) + nRole = accessibility::AccessibleRole::WINDOW; else // #104051# WINDOW seems to be a bad default role, use LAYEREDPANE instead // a WINDOW is interpreted as a top-level window, which is typically not the case