winaccessibility/source/service/AccObject.cxx | 163 +++++++++----------------- 1 file changed, 58 insertions(+), 105 deletions(-)
New commits: commit 0e6f683de6301ace4582901367ea10cb6bc143bc Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Sep 30 13:49:13 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon Sep 30 21:40:50 2024 +0200 wina11y: Drop "using namespace css::accessibility::AccessibleRole" Change-Id: I7c801f3101b0d4ed642cab799d44da092faa3bc7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174279 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx index 32d06729f309..db3abc931724 100644 --- a/winaccessibility/source/service/AccObject.cxx +++ b/winaccessibility/source/service/AccObject.cxx @@ -49,7 +49,6 @@ using namespace com::sun::star::uno; using namespace com::sun::star::accessibility; -using namespace com::sun::star::accessibility::AccessibleRole; constexpr DWORD MSAA_NO_STATE = 0x00000000; @@ -366,14 +365,14 @@ void AccObject::SetValue( Any pAny ) OUString val; switch(m_accRole) { - case SPIN_BOX: + case AccessibleRole::SPIN_BOX: // 3. date editor's msaa value should be the same as spinbox - case DATE_EDITOR: - case TEXT: - case BLOCK_QUOTE: - case PARAGRAPH: - case HEADING: - case TABLE_CELL: + case AccessibleRole::DATE_EDITOR: + case AccessibleRole::TEXT: + case AccessibleRole::BLOCK_QUOTE: + case AccessibleRole::PARAGRAPH: + case AccessibleRole::HEADING: + case AccessibleRole::TABLE_CELL: if(pRText) { @@ -381,16 +380,16 @@ void AccObject::SetValue( Any pAny ) } m_pIMAcc->Put_XAccValue( o3tl::toW(val.getStr()) ); break; - case TREE_ITEM: + case AccessibleRole::TREE_ITEM: //case CHECK_BOX: //Commented by Li Xing to disable the value for general checkbox - case COMBO_BOX: - case NOTE: - case SCROLL_BAR: + case AccessibleRole::COMBO_BOX: + case AccessibleRole::NOTE: + case AccessibleRole::SCROLL_BAR: m_pIMAcc->Put_XAccValue( o3tl::toW(GetMAccessibleValueFromAny(pAny).getStr()) ); break ; // Added by Li Xing, only the checkbox in tree should have the value. - case CHECK_BOX: - if( ( m_pParentObj !=nullptr ) && (TREE == m_pParentObj->m_accRole || TREE_ITEM == m_pParentObj->m_accRole )) + case AccessibleRole::CHECK_BOX: + if( ( m_pParentObj !=nullptr ) && (AccessibleRole::TREE == m_pParentObj->m_accRole || AccessibleRole::TREE_ITEM == m_pParentObj->m_accRole )) m_pIMAcc->Put_XAccValue( o3tl::toW(GetMAccessibleValueFromAny(pAny).getStr()) ); break; default: @@ -486,7 +485,7 @@ DWORD AccObject::GetMSAAStateFromUNO(sal_Int64 nState) case AccessibleStateType::BUSY: return STATE_SYSTEM_BUSY; case AccessibleStateType::CHECKED: - if (m_accRole == PUSH_BUTTON || m_accRole == TOGGLE_BUTTON) + if (m_accRole == AccessibleRole::PUSH_BUTTON || m_accRole == AccessibleRole::TOGGLE_BUTTON) return STATE_SYSTEM_PRESSED; return STATE_SYSTEM_CHECKED; case AccessibleStateType::DEFUNC: @@ -506,18 +505,20 @@ DWORD AccObject::GetMSAAStateFromUNO(sal_Int64 nState) case AccessibleStateType::RESIZABLE: return STATE_SYSTEM_SIZEABLE; case AccessibleStateType::SELECTABLE: - if (m_accRole == MENU || m_accRole == MENU_ITEM) + if (m_accRole == AccessibleRole::MENU || m_accRole == AccessibleRole::MENU_ITEM) return MSAA_NO_STATE; return STATE_SYSTEM_SELECTABLE; case AccessibleStateType::SELECTED: - if (m_accRole == MENU || m_accRole == MENU_ITEM) + if (m_accRole == AccessibleRole::MENU || m_accRole == AccessibleRole::MENU_ITEM) return MSAA_NO_STATE; return STATE_SYSTEM_SELECTED; case AccessibleStateType::ARMED: return STATE_SYSTEM_FOCUSED; case AccessibleStateType::EXPANDABLE: { - if (m_accRole == PUSH_BUTTON || m_accRole == TOGGLE_BUTTON || m_accRole == BUTTON_DROPDOWN) + if (m_accRole == AccessibleRole::PUSH_BUTTON + || m_accRole == AccessibleRole::TOGGLE_BUTTON + || m_accRole == AccessibleRole::BUTTON_DROPDOWN) return STATE_SYSTEM_HASPOPUP; if (!(m_xAccContextRef->getAccessibleStateSet() & AccessibleStateType::EXPANDED)) @@ -554,13 +555,17 @@ void AccObject::DecreaseState( sal_Int64 xState ) { if (xState == AccessibleStateType::FOCUSABLE) { - if (m_accRole == MENU_ITEM || m_accRole == RADIO_MENU_ITEM || m_accRole == CHECK_MENU_ITEM) + if (m_accRole == AccessibleRole::MENU_ITEM || m_accRole == AccessibleRole::RADIO_MENU_ITEM + || m_accRole == AccessibleRole::CHECK_MENU_ITEM) return; else { - if (m_accRole == TOGGLE_BUTTON || m_accRole == PUSH_BUTTON || m_accRole == BUTTON_DROPDOWN) + if (m_accRole == AccessibleRole::TOGGLE_BUTTON + || m_accRole == AccessibleRole::PUSH_BUTTON + || m_accRole == AccessibleRole::BUTTON_DROPDOWN) { - if( ( m_pParentObj !=nullptr ) && (TOOL_BAR == m_pParentObj->m_accRole ) ) + if ((m_pParentObj != nullptr) + && (AccessibleRole::TOOL_BAR == m_pParentObj->m_accRole)) return; } } @@ -639,7 +644,7 @@ void AccObject::UpdateState() m_pIMAcc->SetState(0); - if ( m_accRole == POPUP_MENU ) + if (m_accRole == AccessibleRole::POPUP_MENU) { return; } @@ -668,7 +673,9 @@ void AccObject::UpdateState() IncreaseState(nState); } - bool bIsMenuItem = m_accRole == MENU_ITEM || m_accRole == RADIO_MENU_ITEM || m_accRole == CHECK_MENU_ITEM; + bool bIsMenuItem = m_accRole == AccessibleRole::MENU_ITEM + || m_accRole == AccessibleRole::RADIO_MENU_ITEM + || m_accRole == AccessibleRole::CHECK_MENU_ITEM; if(bIsMenuItem) { @@ -685,31 +692,31 @@ void AccObject::UpdateState() switch(m_accRole) { - case LABEL: - case STATIC: - case NOTIFICATION: - case TEXT: + case AccessibleRole::LABEL: + case AccessibleRole::STATIC: + case AccessibleRole::NOTIFICATION: + case AccessibleRole::TEXT: // 2. editable combobox -> readonly ------ bridge - case EMBEDDED_OBJECT: - case END_NOTE: - case FOOTER: - case FOOTNOTE: - case GRAPHIC: - case HEADER: - case HEADING: + case AccessibleRole::EMBEDDED_OBJECT: + case AccessibleRole::END_NOTE: + case AccessibleRole::FOOTER: + case AccessibleRole::FOOTNOTE: + case AccessibleRole::GRAPHIC: + case AccessibleRole::HEADER: + case AccessibleRole::HEADING: //Image Map - case BLOCK_QUOTE: - case PARAGRAPH: - case PASSWORD_TEXT: - case SHAPE: - case SPIN_BOX: - case TABLE: - case TABLE_CELL: - case TEXT_FRAME: - case DATE_EDITOR: - case DOCUMENT: - case COLUMN_HEADER: + case AccessibleRole::BLOCK_QUOTE: + case AccessibleRole::PARAGRAPH: + case AccessibleRole::PASSWORD_TEXT: + case AccessibleRole::SHAPE: + case AccessibleRole::SPIN_BOX: + case AccessibleRole::TABLE: + case AccessibleRole::TABLE_CELL: + case AccessibleRole::TEXT_FRAME: + case AccessibleRole::DATE_EDITOR: + case AccessibleRole::DOCUMENT: + case AccessibleRole::COLUMN_HEADER: { if(!isEditable) m_pIMAcc->IncreaseState( STATE_SYSTEM_READONLY ); @@ -727,12 +734,12 @@ void AccObject::UpdateState() switch(m_accRole) { - case POPUP_MENU: - case MENU: + case AccessibleRole::POPUP_MENU: + case AccessibleRole::MENU: if( pContext->getAccessibleChildCount() > 0 ) m_pIMAcc->IncreaseState( STATE_SYSTEM_HASPOPUP ); break; - case PASSWORD_TEXT: + case AccessibleRole::PASSWORD_TEXT: m_pIMAcc->IncreaseState( STATE_SYSTEM_PROTECTED ); break; default: commit a241661862ef35774f560e4068a895dcaa6f2113 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Sep 30 13:37:14 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon Sep 30 21:40:43 2024 +0200 wina11y: Bridge focusable state as is Drop all the special-casing of particular (parent) roles etc. when considering whether or not to set the focusable state. Instead, fully rely on the AccessibleStateType::FOCUSABLE state as reported by the underlying XAccessibleContext and report the IAccessible/MSAA STATE_SYSTEM_FOCUSABLE state whenever the former is set. I tend to think that if this this change results in unexpected behavior, it is likely that issues should best be fixed in the underlying XAccessibleContext implementations rather than worked around in the Windows a11y bridge. Change-Id: I6e2eee3a9cbe779de3b3d349f23efc6a68a8344b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174278 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx index acc8cfae053d..32d06729f309 100644 --- a/winaccessibility/source/service/AccObject.cxx +++ b/winaccessibility/source/service/AccObject.cxx @@ -675,7 +675,6 @@ void AccObject::UpdateState() if(!(isShowing && isVisible) ) { m_pIMAcc->IncreaseState( STATE_SYSTEM_INVISIBLE ); - m_pIMAcc->DecreaseState( STATE_SYSTEM_FOCUSABLE ); } } else @@ -720,62 +719,11 @@ void AccObject::UpdateState() break; } - if( isEnable ) - { - - if (!(m_accRole == FILLER || m_accRole == END_NOTE || m_accRole == FOOTER || m_accRole == FOOTNOTE || m_accRole == GROUP_BOX || m_accRole == RULER - || m_accRole == HEADER || m_accRole == ICON || m_accRole == INTERNAL_FRAME || m_accRole == LABEL || m_accRole == LAYERED_PANE - || m_accRole == SCROLL_BAR || m_accRole == SCROLL_PANE || m_accRole == SPLIT_PANE || m_accRole == STATIC || m_accRole == STATUS_BAR - || m_accRole == TOOL_TIP || m_accRole == NOTIFICATION)) - { - if (m_accRole == SEPARATOR) - { - if( ( m_pParentObj != nullptr ) && ( MENU == m_pParentObj->m_accRole || POPUP_MENU == m_pParentObj->m_accRole )) - IncreaseState(AccessibleStateType::FOCUSABLE); - } + if (isFocusable) + IncreaseState(STATE_SYSTEM_FOCUSABLE); - else if (m_accRole == TABLE_CELL || m_accRole == TABLE || m_accRole == PANEL || m_accRole == OPTION_PANE || - m_accRole == COLUMN_HEADER) - { - if (isFocusable) - IncreaseState(AccessibleStateType::FOCUSABLE); - } - else - { - if(bIsMenuItem) - { - if ( isShowing && isVisible) - IncreaseState(AccessibleStateType::FOCUSABLE); - } - else - { - IncreaseState(AccessibleStateType::FOCUSABLE); - } - } - } - } - else - { + if (!isEnable) m_pIMAcc->IncreaseState( STATE_SYSTEM_UNAVAILABLE ); - if( !((m_accRole == MENU_ITEM) || - (m_accRole == RADIO_MENU_ITEM) || - (m_accRole == CHECK_MENU_ITEM)) ) - { - if (m_accRole == TOGGLE_BUTTON || m_accRole == PUSH_BUTTON || m_accRole == BUTTON_DROPDOWN) - { - if(( m_pParentObj != nullptr )&& (TOOL_BAR == m_pParentObj->m_accRole ) ) - IncreaseState(AccessibleStateType::FOCUSABLE); - else - DecreaseState(AccessibleStateType::FOCUSABLE); - } - else - DecreaseState(AccessibleStateType::FOCUSABLE); - } - else if( isShowing || isVisible ) - { - IncreaseState(AccessibleStateType::FOCUSABLE); - } - } switch(m_accRole) { commit 3d0230b918d0d18a2e1562dd23d5afbbc8bac128 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Sep 30 13:15:19 2024 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon Sep 30 21:40:35 2024 +0200 wina11y: Unify handling for editable/readonly state a bit The LABEL, STATIC and NOTIFICATION roles are used for readonly text, so if the EDITABLE state were ever set on these, that should be fixed in the underlying XAccessibleContext implementation instead of special handling to always set the readonly state in the Windows a11y bridge. Therefore, rely on the EDITABLE state not being set for these in order to report the IAccessible/MSAA STATE_SYSTEM_READONLY like for the other roles handled here. Change-Id: Ie8398ad0186d57ebf92701ab3a2c0603b50f5a2e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174277 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/winaccessibility/source/service/AccObject.cxx b/winaccessibility/source/service/AccObject.cxx index 2cc9f7308a50..acc8cfae053d 100644 --- a/winaccessibility/source/service/AccObject.cxx +++ b/winaccessibility/source/service/AccObject.cxx @@ -689,8 +689,6 @@ void AccObject::UpdateState() case LABEL: case STATIC: case NOTIFICATION: - m_pIMAcc->IncreaseState( STATE_SYSTEM_READONLY ); - break; case TEXT: // 2. editable combobox -> readonly ------ bridge case EMBEDDED_OBJECT: