summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2023-12-18 08:48:12 +0100
committerXisco Fauli <xiscofauli@libreoffice.org>2023-12-20 09:27:27 +0100
commitf098ba6579fb1992c0db86b19b22eb8532ab1ba6 (patch)
tree4b57b31df524dba674e9c04b21004443ded0c666
parentd125fc2a2178b100253ea089b7ad30acafccfb57 (diff)
tdf#123864 a11y: Handle new CHECKABLE state in misc places
Add reporting/handling of the CHECKABLE a11y state added in commit d6c6472bbe1c90b733a4d69c4c8528f4de3750d3 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon Nov 13 15:53:44 2023 +0100 tdf#123864 a11y: Add new AccessibleStateType::CHECKABLE in various places where it seems pretty straightforward. `VCLXAccessibleMenuItem` is a bit more complex and will be handled separately. Change-Id: I212b8439609d34410413959973163aa7d809cbf1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160901 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161036
-rw-r--r--accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx1
-rw-r--r--accessibility/source/standard/vclxaccessiblebutton.cxx3
-rw-r--r--accessibility/source/standard/vclxaccessiblecheckbox.cxx1
-rw-r--r--accessibility/source/standard/vclxaccessibleradiobutton.cxx1
-rw-r--r--accessibility/source/standard/vclxaccessibletoolboxitem.cxx2
-rw-r--r--offapi/com/sun/star/awt/AccessibleButton.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleCheckBox.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenu.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleMenuItem.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleRadioButton.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleToolBoxItem.idl2
-rw-r--r--offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl2
-rw-r--r--sfx2/source/view/viewsh.cxx6
-rw-r--r--test/source/a11y/AccessibilityTools.cxx3
-rw-r--r--toolkit/source/awt/vclxaccessiblecomponent.cxx1
-rw-r--r--toolkit/test/accessibility/tools/NameProvider.java1
-rw-r--r--vcl/qa/cppunit/a11y/atspi2/atspi2.cxx1
-rw-r--r--vcl/qt5/QtAccessibleEventListener.cxx3
-rw-r--r--vcl/source/treelist/treelistbox.cxx2
19 files changed, 36 insertions, 3 deletions
diff --git a/accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx b/accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx
index 645b544176d2..e59755555624 100644
--- a/accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx
+++ b/accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx
@@ -57,6 +57,7 @@ namespace accessibility
sal_Int64 nStateSet = AccessibleBrowseBoxCell::implCreateStateSet();
if( isAlive() )
{
+ nStateSet |= AccessibleStateType::CHECKABLE;
mpBrowseBox->FillAccessibleStateSetForCell(
nStateSet, getRowPos(), static_cast< sal_uInt16 >( getColumnPos() ) );
if ( m_eState == TRISTATE_TRUE )
diff --git a/accessibility/source/standard/vclxaccessiblebutton.cxx b/accessibility/source/standard/vclxaccessiblebutton.cxx
index 31c8188b99ab..eb4d1f0821fe 100644
--- a/accessibility/source/standard/vclxaccessiblebutton.cxx
+++ b/accessibility/source/standard/vclxaccessiblebutton.cxx
@@ -78,6 +78,9 @@ void VCLXAccessibleButton::FillAccessibleStateSet( sal_Int64& rStateSet )
rStateSet |= AccessibleStateType::FOCUSABLE;
+ if (pButton->isToggleButton())
+ rStateSet |= AccessibleStateType::CHECKABLE;
+
if ( pButton->GetState() == TRISTATE_TRUE )
rStateSet |= AccessibleStateType::CHECKED;
diff --git a/accessibility/source/standard/vclxaccessiblecheckbox.cxx b/accessibility/source/standard/vclxaccessiblecheckbox.cxx
index 8a0ea492911e..cf75db3fa7b6 100644
--- a/accessibility/source/standard/vclxaccessiblecheckbox.cxx
+++ b/accessibility/source/standard/vclxaccessiblecheckbox.cxx
@@ -127,6 +127,7 @@ void VCLXAccessibleCheckBox::FillAccessibleStateSet( sal_Int64& rStateSet )
{
VCLXAccessibleTextComponent::FillAccessibleStateSet( rStateSet );
+ rStateSet |= AccessibleStateType::CHECKABLE;
rStateSet |= AccessibleStateType::FOCUSABLE;
if ( IsChecked() )
diff --git a/accessibility/source/standard/vclxaccessibleradiobutton.cxx b/accessibility/source/standard/vclxaccessibleradiobutton.cxx
index 0e66dde4c300..c81dead7562f 100644
--- a/accessibility/source/standard/vclxaccessibleradiobutton.cxx
+++ b/accessibility/source/standard/vclxaccessibleradiobutton.cxx
@@ -99,6 +99,7 @@ void VCLXAccessibleRadioButton::FillAccessibleStateSet( sal_Int64& rStateSet )
VCLXRadioButton* pVCLXRadioButton = static_cast< VCLXRadioButton* >( GetVCLXWindow() );
if ( pVCLXRadioButton )
{
+ rStateSet |= AccessibleStateType::CHECKABLE;
rStateSet |= AccessibleStateType::FOCUSABLE;
if ( pVCLXRadioButton->getState() )
rStateSet |= AccessibleStateType::CHECKED;
diff --git a/accessibility/source/standard/vclxaccessibletoolboxitem.cxx b/accessibility/source/standard/vclxaccessibletoolboxitem.cxx
index 808f2fe642d4..96b8e5ef799d 100644
--- a/accessibility/source/standard/vclxaccessibletoolboxitem.cxx
+++ b/accessibility/source/standard/vclxaccessibletoolboxitem.cxx
@@ -385,6 +385,8 @@ sal_Int64 SAL_CALL VCLXAccessibleToolBoxItem::getAccessibleStateSet( )
if ( m_pToolBox && !rBHelper.bDisposed && !rBHelper.bInDispose )
{
nStateSet |= AccessibleStateType::FOCUSABLE;
+ if (m_pToolBox->GetItemBits(m_nItemId) & ToolBoxItemBits::CHECKABLE)
+ nStateSet |= AccessibleStateType::CHECKABLE;
if ( m_bIsChecked && m_nRole != AccessibleRole::PANEL )
nStateSet |= AccessibleStateType::CHECKED;
if ( m_bIndeterminate )
diff --git a/offapi/com/sun/star/awt/AccessibleButton.idl b/offapi/com/sun/star/awt/AccessibleButton.idl
index 4ccd3495d882..69c90bd870f7 100644
--- a/offapi/com/sun/star/awt/AccessibleButton.idl
+++ b/offapi/com/sun/star/awt/AccessibleButton.idl
@@ -38,6 +38,8 @@ service AccessibleButton
<li>Relations: There are no relations.</li>
<li>States: The states supported by this service are
<ul>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is set if the object is checkable, i.e. can be checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the object is currently checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::DEFUNC
diff --git a/offapi/com/sun/star/awt/AccessibleCheckBox.idl b/offapi/com/sun/star/awt/AccessibleCheckBox.idl
index ecf11cebe7e8..a8934139006f 100644
--- a/offapi/com/sun/star/awt/AccessibleCheckBox.idl
+++ b/offapi/com/sun/star/awt/AccessibleCheckBox.idl
@@ -39,6 +39,8 @@ service AccessibleCheckBox
<li>Relations: There are no relations.</li>
<li>States: The states supported by this service are
<ul>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is always set.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the object is currently checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::DEFUNC
diff --git a/offapi/com/sun/star/awt/AccessibleMenu.idl b/offapi/com/sun/star/awt/AccessibleMenu.idl
index 3cd51d5f96f4..276b4b7a77f3 100644
--- a/offapi/com/sun/star/awt/AccessibleMenu.idl
+++ b/offapi/com/sun/star/awt/AccessibleMenu.idl
@@ -46,6 +46,8 @@ service AccessibleMenu
<ul>
<li>com::sun::star::accessibility::AccessibleStateType::ARMED
is set if the object is highlighted.</li>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is set if the object is checkable, i.e. can be checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the object is currently checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::DEFUNC
diff --git a/offapi/com/sun/star/awt/AccessibleMenuItem.idl b/offapi/com/sun/star/awt/AccessibleMenuItem.idl
index d83418961994..ef86f72009f4 100644
--- a/offapi/com/sun/star/awt/AccessibleMenuItem.idl
+++ b/offapi/com/sun/star/awt/AccessibleMenuItem.idl
@@ -44,6 +44,8 @@ service AccessibleMenuItem
<ul>
<li>com::sun::star::accessibility::AccessibleStateType::ARMED
is set if the object is highlighted.</li>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is set if the object is checkable, i.e. can be checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the object is currently checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::DEFUNC
diff --git a/offapi/com/sun/star/awt/AccessibleRadioButton.idl b/offapi/com/sun/star/awt/AccessibleRadioButton.idl
index 889040af3205..8c49b6a7c64a 100644
--- a/offapi/com/sun/star/awt/AccessibleRadioButton.idl
+++ b/offapi/com/sun/star/awt/AccessibleRadioButton.idl
@@ -45,6 +45,8 @@ service AccessibleRadioButton
</li>
<li>States: The states supported by this service are
<ul>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is always set.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the object is currently checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::DEFUNC
diff --git a/offapi/com/sun/star/awt/AccessibleToolBoxItem.idl b/offapi/com/sun/star/awt/AccessibleToolBoxItem.idl
index 78f495442c27..3681efe25fe4 100644
--- a/offapi/com/sun/star/awt/AccessibleToolBoxItem.idl
+++ b/offapi/com/sun/star/awt/AccessibleToolBoxItem.idl
@@ -78,6 +78,8 @@ service AccessibleToolBoxItem
is set if the object is displayed on the screen.</li>
<li>com::sun::star::accessibility::AccessibleStateType::VISIBLE
is always set.</li>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKABLE
+ is set if the tool box item is checkable, i.e. it can be checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set if the tool box item is checked.</li>
</ul>
diff --git a/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl b/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl
index 57a5f23e2f94..e35f4f5aaa3b 100644
--- a/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl
+++ b/offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl
@@ -76,6 +76,8 @@ service AccessibleTreeListBoxEntry
<li>com::sun::star::accessibility::AccessibleStateType::COLLAPSED
is set when it is collapsed.</li>
<li>com::sun::star::accessibility::AccessibleStateType::CHECKED
+ is set when it is checkable.</li>
+ <li>com::sun::star::accessibility::AccessibleStateType::CHECKED
is set when it is checked.</li>
<li>com::sun::star::accessibility::AccessibleStateType::SELECTABLE
is always set.</li>
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index 885b6877761a..93c18a16e2e2 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -433,21 +433,21 @@ OUString truncateText(OUString& sText, sal_Int32 nNewLength)
std::string stateSetToString(::sal_Int64 stateSet)
{
- static const std::string states[34] = {
+ static const std::string states[35] = {
"ACTIVE", "ARMED", "BUSY", "CHECKED", "DEFUNC",
"EDITABLE", "ENABLED", "EXPANDABLE", "EXPANDED", "FOCUSABLE",
"FOCUSED", "HORIZONTAL", "ICONIFIED", "INDETERMINATE", "MANAGES_DESCENDANTS",
"MODAL", "MULTI_LINE", "MULTI_SELECTABLE", "OPAQUE", "PRESSED",
"RESIZABLE", "SELECTABLE", "SELECTED", "SENSITIVE", "SHOWING",
"SINGLE_LINE", "STALE", "TRANSIENT", "VERTICAL", "VISIBLE",
- "MOVEABLE", "DEFAULT", "OFFSCREEN", "COLLAPSE"
+ "MOVEABLE", "DEFAULT", "OFFSCREEN", "COLLAPSE", "CHECKABLE"
};
if (stateSet == 0)
return "INVALID";
::sal_Int64 state = 1;
std::string s;
- for (int i = 0; i < 34; ++i)
+ for (int i = 0; i < 35; ++i)
{
if (stateSet & state)
{
diff --git a/test/source/a11y/AccessibilityTools.cxx b/test/source/a11y/AccessibilityTools.cxx
index 150a1cdf836a..f0a28d4cdad2 100644
--- a/test/source/a11y/AccessibilityTools.cxx
+++ b/test/source/a11y/AccessibilityTools.cxx
@@ -417,6 +417,9 @@ OUString AccessibilityTools::debugAccessibleStateSet(const sal_Int64 nCombinedSt
case accessibility::AccessibleStateType::BUSY:
name = "BUSY";
break;
+ case accessibility::AccessibleStateType::CHECKABLE:
+ name = "CHECKABLE";
+ break;
case accessibility::AccessibleStateType::CHECKED:
name = "CHECKED";
break;
diff --git a/toolkit/source/awt/vclxaccessiblecomponent.cxx b/toolkit/source/awt/vclxaccessiblecomponent.cxx
index 2c353fd801eb..9c2321ede37a 100644
--- a/toolkit/source/awt/vclxaccessiblecomponent.cxx
+++ b/toolkit/source/awt/vclxaccessiblecomponent.cxx
@@ -497,6 +497,7 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( sal_Int64& rStateSet )
MUST BE SET FROM DERIVED CLASSES:
+CHECKABLE
CHECKED
COLLAPSED
EXPANDED
diff --git a/toolkit/test/accessibility/tools/NameProvider.java b/toolkit/test/accessibility/tools/NameProvider.java
index cc5ae469e57a..7a859fcea626 100644
--- a/toolkit/test/accessibility/tools/NameProvider.java
+++ b/toolkit/test/accessibility/tools/NameProvider.java
@@ -99,6 +99,7 @@ public class NameProvider
maStateMap.put (Integer.valueOf(AccessibleStateType.ACTIVE), "ACTIVE");
maStateMap.put (Integer.valueOf(AccessibleStateType.ARMED), "ARMED");
maStateMap.put (Integer.valueOf(AccessibleStateType.BUSY), "BUSY");
+ maStateMap.put (Integer.valueOf(AccessibleStateType.CHECKABLE), "CHECKABLE");
maStateMap.put (Integer.valueOf(AccessibleStateType.CHECKED), "CHECKED");
maStateMap.put (Integer.valueOf(AccessibleStateType.DEFUNC), "DEFUNC");
maStateMap.put (Integer.valueOf(AccessibleStateType.EDITABLE), "EDITABLE");
diff --git a/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx b/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
index 7ef2efeca0ef..e24bf8078613 100644
--- a/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
+++ b/vcl/qa/cppunit/a11y/atspi2/atspi2.cxx
@@ -151,6 +151,7 @@ static AtspiStateType mapAtspiState(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/vcl/qt5/QtAccessibleEventListener.cxx b/vcl/qt5/QtAccessibleEventListener.cxx
index c5d64d4650ed..d6a404e6947e 100644
--- a/vcl/qt5/QtAccessibleEventListener.cxx
+++ b/vcl/qt5/QtAccessibleEventListener.cxx
@@ -64,6 +64,9 @@ void QtAccessibleEventListener::HandleStateChangedEvent(
case AccessibleStateType::BUSY:
aState.busy = true;
break;
+ case AccessibleStateType::CHECKABLE:
+ aState.checkable = true;
+ break;
case AccessibleStateType::CHECKED:
aState.checked = true;
break;
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index b97abc33333b..6dd915e23996 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -3465,6 +3465,8 @@ void SvTreeListBox::FillAccessibleEntryStateSet( SvTreeListEntry* pEntry, sal_In
rStateSet |= AccessibleStateType::EXPANDED;
}
+ if (nTreeFlags & SvTreeFlags::CHKBTN)
+ rStateSet |= AccessibleStateType::CHECKABLE;
if ( GetCheckButtonState( pEntry ) == SvButtonState::Checked )
rStateSet |= AccessibleStateType::CHECKED;
if ( IsEntryVisible( pEntry ) )