summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleStateType.idl6
-rw-r--r--vcl/qt5/QtAccessibleWidget.cxx3
-rw-r--r--vcl/unx/gtk3/a11y/atkwrapper.cxx1
-rw-r--r--winaccessibility/source/UAccCOM/MAccessible.cxx10
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;