diff options
-rw-r--r-- | offapi/com/sun/star/accessibility/AccessibleStateType.idl | 6 | ||||
-rw-r--r-- | vcl/qt5/QtAccessibleWidget.cxx | 3 | ||||
-rw-r--r-- | vcl/unx/gtk3/a11y/atkwrapper.cxx | 1 | ||||
-rw-r--r-- | winaccessibility/source/UAccCOM/MAccessible.cxx | 10 |
4 files changed, 18 insertions, 2 deletions
diff --git a/offapi/com/sun/star/accessibility/AccessibleStateType.idl b/offapi/com/sun/star/accessibility/AccessibleStateType.idl index 099dd6510901..f5dcad22a48a 100644 --- a/offapi/com/sun/star/accessibility/AccessibleStateType.idl +++ b/offapi/com/sun/star/accessibility/AccessibleStateType.idl @@ -239,6 +239,12 @@ constants AccessibleStateType */ const hyper COLLAPSE = 8589934592; + /** Indicates this object is checkable, i.e. it has the potential + to be checked. + See also the CHECKED state. + */ + const hyper CHECKABLE = 17179869184; + }; }; }; }; }; diff --git a/vcl/qt5/QtAccessibleWidget.cxx b/vcl/qt5/QtAccessibleWidget.cxx index 47eb08b7e8c7..7eadc3313834 100644 --- a/vcl/qt5/QtAccessibleWidget.cxx +++ b/vcl/qt5/QtAccessibleWidget.cxx @@ -578,6 +578,9 @@ void lcl_addState(QAccessible::State* state, sal_Int64 nState) case AccessibleStateType::BUSY: state->busy = true; break; + case AccessibleStateType::CHECKABLE: + state->checkable = true; + break; case AccessibleStateType::CHECKED: state->checked = true; break; diff --git a/vcl/unx/gtk3/a11y/atkwrapper.cxx b/vcl/unx/gtk3/a11y/atkwrapper.cxx index 8caf40020d13..49b1d371ae12 100644 --- a/vcl/unx/gtk3/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk3/a11y/atkwrapper.cxx @@ -125,6 +125,7 @@ AtkStateType mapAtkState( sal_Int64 nState ) MAP_DIRECT( ACTIVE ); MAP_DIRECT( ARMED ); MAP_DIRECT( BUSY ); + MAP_DIRECT( CHECKABLE ); MAP_DIRECT( CHECKED ); MAP_DIRECT( EDITABLE ); MAP_DIRECT( ENABLED ); diff --git a/winaccessibility/source/UAccCOM/MAccessible.cxx b/winaccessibility/source/UAccCOM/MAccessible.cxx index d126fc31d716..7497a2f09f7e 100644 --- a/winaccessibility/source/UAccCOM/MAccessible.cxx +++ b/winaccessibility/source/UAccCOM/MAccessible.cxx @@ -128,7 +128,7 @@ bool queryTableCell(XAccessible* pXAcc, XInterface** ppXI) } -void lcl_addIA2State(AccessibleStates& rStates, sal_Int64 nUnoState) +void lcl_addIA2State(AccessibleStates& rStates, sal_Int64 nUnoState, sal_Int16 nRole) { switch (nUnoState) { @@ -138,6 +138,12 @@ void lcl_addIA2State(AccessibleStates& rStates, sal_Int64 nUnoState) case css::accessibility::AccessibleStateType::ARMED: rStates |= IA2_STATE_ARMED; break; + case css::accessibility::AccessibleStateType::CHECKABLE: + // STATE_SYSTEM_PRESSED is used instead of STATE_SYSTEM_CHECKED for these button + // roles (s. AccObject::GetMSAAStateFromUNO), so don't set CHECKABLE state for them + if (nRole != AccessibleRole::PUSH_BUTTON && nRole != AccessibleRole::TOGGLE_BUTTON) + rStates |= IA2_STATE_CHECKABLE; + break; case css::accessibility::AccessibleStateType::DEFUNC: rStates |= IA2_STATE_DEFUNCT; break; @@ -2592,7 +2598,7 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CMAccessible::get_states(AccessibleStates __RP { sal_Int64 nUnoState = sal_Int64(1) << i; if (nRStateSet & nUnoState) - lcl_addIA2State(*states, nUnoState); + lcl_addIA2State(*states, nUnoState, m_xContext->getAccessibleRole()); } return S_OK; |