accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx |    1 +
 accessibility/source/standard/vclxaccessiblebutton.cxx            |    3 +++
 accessibility/source/standard/vclxaccessiblecheckbox.cxx          |    1 +
 accessibility/source/standard/vclxaccessibleradiobutton.cxx       |    1 +
 accessibility/source/standard/vclxaccessibletoolboxitem.cxx       |    2 ++
 offapi/com/sun/star/awt/AccessibleButton.idl                      |    2 ++
 offapi/com/sun/star/awt/AccessibleCheckBox.idl                    |    2 ++
 offapi/com/sun/star/awt/AccessibleMenu.idl                        |    2 ++
 offapi/com/sun/star/awt/AccessibleMenuItem.idl                    |    2 ++
 offapi/com/sun/star/awt/AccessibleRadioButton.idl                 |    2 ++
 offapi/com/sun/star/awt/AccessibleToolBoxItem.idl                 |    2 ++
 offapi/com/sun/star/awt/AccessibleTreeListBoxEntry.idl            |    2 ++
 sfx2/source/view/viewsh.cxx                                       |    6 +++---
 test/source/a11y/AccessibilityTools.cxx                           |    3 +++
 toolkit/source/awt/vclxaccessiblecomponent.cxx                    |    1 +
 toolkit/test/accessibility/tools/NameProvider.java                |    1 +
 vcl/qa/cppunit/a11y/atspi2/atspi2.cxx                             |    1 +
 vcl/qt5/QtAccessibleEventListener.cxx                             |    3 +++
 vcl/source/treelist/treelistbox.cxx                               |    2 ++
 19 files changed, 36 insertions(+), 3 deletions(-)

New commits:
commit f098ba6579fb1992c0db86b19b22eb8532ab1ba6
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Dec 18 08:48:12 2023 +0100
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Wed Dec 20 09:27:27 2023 +0100

    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.wegh...@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.wegh...@posteo.de>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161036

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
@@ -75,6 +75,8 @@ service AccessibleTreeListBoxEntry
                is set when it is expanded.</li>
            <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
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 ) )

Reply via email to