accessibility/inc/standard/vclxaccessiblemenuitem.hxx | 1 accessibility/source/extended/AccessibleBrowseBoxCheckBoxCell.cxx | 1 accessibility/source/standard/vclxaccessiblebutton.cxx | 3 accessibility/source/standard/vclxaccessiblecheckbox.cxx | 1 accessibility/source/standard/vclxaccessiblemenuitem.cxx | 10 accessibility/source/standard/vclxaccessibleradiobutton.cxx | 1 accessibility/source/standard/vclxaccessibletoolboxitem.cxx | 2 include/vcl/menu.hxx | 1 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 vcl/source/window/menu.cxx | 11 vcl/unx/gtk3/a11y/atklistener.cxx | 129 ---------- 24 files changed, 59 insertions(+), 132 deletions(-)
New commits: commit eef4d5cbd10a042bd3b5fb555e0bf9b0dd7d1215 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Dec 18 09:10:36 2023 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Dec 19 09:30:23 2023 +0100 tdf#123864 a11y: Handle new checkable state for VCLXAccessibleMenuItem Add reporting for the new CHECKABLE a11y state introduced 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 for `VCLXAccessibleMenuItem`. `MenuItemData::HasCheck` looks like it already provides what's needed to say whether an item is checkable, therefore add a `Menu::IsItemCheckable` that makes use of this and and a `VCLXAccessibleMenuItem::IsCheckable` that makes use of that in turn. Extend `VCLXAccessibleMenuItem::FillAccessibleStateSet` to use the latter to report the CHECKABLE state accordingly. Change-Id: Id23196ef2527a71a338102a5143a8bd6fd41db84 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160902 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/accessibility/inc/standard/vclxaccessiblemenuitem.hxx b/accessibility/inc/standard/vclxaccessiblemenuitem.hxx index ddc50a8f3577..4eec5fa6746e 100644 --- a/accessibility/inc/standard/vclxaccessiblemenuitem.hxx +++ b/accessibility/inc/standard/vclxaccessiblemenuitem.hxx @@ -41,6 +41,7 @@ class VCLXAccessibleMenuItem : public cppu::ImplInheritanceHelper< protected: virtual bool IsFocused() override; virtual bool IsSelected() override; + virtual bool IsCheckable(); virtual bool IsChecked() override; virtual bool IsHighlighted() override; diff --git a/accessibility/source/standard/vclxaccessiblemenuitem.cxx b/accessibility/source/standard/vclxaccessiblemenuitem.cxx index 2c4e8043c00b..03bdc88c93c5 100644 --- a/accessibility/source/standard/vclxaccessiblemenuitem.cxx +++ b/accessibility/source/standard/vclxaccessiblemenuitem.cxx @@ -66,6 +66,14 @@ bool VCLXAccessibleMenuItem::IsSelected() return IsHighlighted(); } +bool VCLXAccessibleMenuItem::IsCheckable() +{ + if (!m_pParent) + return false; + + const sal_uInt16 nItemId = m_pParent->GetItemId(m_nItemPos); + return m_pParent->IsItemCheckable(nItemId); +} bool VCLXAccessibleMenuItem::IsChecked() { @@ -107,6 +115,8 @@ void VCLXAccessibleMenuItem::FillAccessibleStateSet( sal_Int64& rStateSet ) if ( IsSelected() ) rStateSet |= AccessibleStateType::SELECTED; + if (IsCheckable()) + rStateSet |= AccessibleStateType::CHECKABLE; if ( IsChecked() ) rStateSet |= AccessibleStateType::CHECKED; } diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx index 2442eef9202f..a28182e51fe2 100644 --- a/include/vcl/menu.hxx +++ b/include/vcl/menu.hxx @@ -275,6 +275,7 @@ public: void CheckItem( sal_uInt16 nItemId, bool bCheck = true ); void CheckItem( std::u16string_view rIdent, bool bCheck = true ); + bool IsItemCheckable(sal_uInt16 nItemId) const; bool IsItemChecked( sal_uInt16 nItemId ) const; virtual void SelectItem(sal_uInt16 nItemId) = 0; diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index 0a065589a41f..2dbba65ba245 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -907,6 +907,17 @@ void Menu::CheckItem( std::u16string_view rIdent , bool bCheck ) CheckItem( GetItemId( rIdent ), bCheck ); } +bool Menu::IsItemCheckable(sal_uInt16 nItemId) const +{ + size_t nPos; + MenuItemData* pData = pItemList->GetData(nItemId, nPos); + + if (!pData) + return false; + + return pData->HasCheck(); +} + bool Menu::IsItemChecked( sal_uInt16 nItemId ) const { size_t nPos; commit 8bc6119812223643b50dcd22c504f9f853976352 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Dec 18 08:48:12 2023 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Dec 19 09:30:15 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> 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 ) ) commit 36123d802af0e115628d38fe0e0a30d65885e9fb Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Dec 18 08:45:03 2023 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Dec 19 09:30:08 2023 +0100 gtk3 a11y: Drop dead debug code Change-Id: I84ce9541c5d67416498bc5a36f0125c4110ffce1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160900 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/unx/gtk3/a11y/atklistener.cxx b/vcl/unx/gtk3/a11y/atklistener.cxx index b9a053d83a7b..3b7777a088c8 100644 --- a/vcl/unx/gtk3/a11y/atklistener.cxx +++ b/vcl/unx/gtk3/a11y/atklistener.cxx @@ -33,13 +33,6 @@ #include <sal/log.hxx> -#define DEBUG_ATK_LISTENER 0 - -#if DEBUG_ATK_LISTENER -#include <iostream> -#include <sstream> -#endif - using namespace com::sun::star; AtkListener::AtkListener( AtkObjectWrapper* pWrapper ) : mpWrapper( pWrapper ) @@ -343,128 +336,6 @@ getAccessibleContextFromSource( const uno::Reference< uno::XInterface >& rxSourc return xContext; } -#if DEBUG_ATK_LISTENER - -namespace { - -void printNotifyEvent( const accessibility::AccessibleEventObject& rEvent ) -{ - static std::vector<const char*> aLabels = { - 0, - "NAME_CHANGED", // 01 - "DESCRIPTION_CHANGED", // 02 - "ACTION_CHANGED", // 03 - "STATE_CHANGED", // 04 - "ACTIVE_DESCENDANT_CHANGED", // 05 - "BOUNDRECT_CHANGED", // 06 - "CHILD", // 07 - "INVALIDATE_ALL_CHILDREN", // 08 - "SELECTION_CHANGED", // 09 - "VISIBLE_DATA_CHANGED", // 10 - "VALUE_CHANGED", // 11 - "CONTENT_FLOWS_FROM_RELATION_CHANGED", // 12 - "CONTENT_FLOWS_TO_RELATION_CHANGED", // 13 - "CONTROLLED_BY_RELATION_CHANGED", // 14 - "CONTROLLER_FOR_RELATION_CHANGED", // 15 - "LABEL_FOR_RELATION_CHANGED", // 16 - "LABELED_BY_RELATION_CHANGED", // 17 - "MEMBER_OF_RELATION_CHANGED", // 18 - "SUB_WINDOW_OF_RELATION_CHANGED", // 19 - "CARET_CHANGED", // 20 - "TEXT_SELECTION_CHANGED", // 21 - "TEXT_CHANGED", // 22 - "TEXT_ATTRIBUTE_CHANGED", // 23 - "HYPERTEXT_CHANGED", // 24 - "TABLE_CAPTION_CHANGED", // 25 - "TABLE_COLUMN_DESCRIPTION_CHANGED", // 26 - "TABLE_COLUMN_HEADER_CHANGED", // 27 - "TABLE_MODEL_CHANGED", // 28 - "TABLE_ROW_DESCRIPTION_CHANGED", // 29 - "TABLE_ROW_HEADER_CHANGED", // 30 - "TABLE_SUMMARY_CHANGED", // 31 - "LISTBOX_ENTRY_EXPANDED", // 32 - "LISTBOX_ENTRY_COLLAPSED", // 33 - "ACTIVE_DESCENDANT_CHANGED_NOFOCUS", // 34 - "SELECTION_CHANGED_ADD", // 35 - "SELECTION_CHANGED_REMOVE", // 36 - "SELECTION_CHANGED_WITHIN", // 37 - "PAGE_CHANGED", // 38 - "SECTION_CHANGED", // 39 - "COLUMN_CHANGED", // 40 - "ROLE_CHANGED", // 41 - }; - - static std::vector<const char*> aStates = { - "INVALID", // 00 - "ACTIVE", // 01 - "ARMED", // 02 - "BUSY", // 03 - "CHECKED", // 04 - "DEFUNC", // 05 - "EDITABLE", // 06 - "ENABLED", // 07 - "EXPANDABLE", // 08 - "EXPANDED", // 09 - "FOCUSABLE", // 10 - "FOCUSED", // 11 - "HORIZONTAL", // 12 - "ICONIFIED", // 13 - "INDETERMINATE", // 14 - "MANAGES_DESCENDANTS", // 15 - "MODAL", // 16 - "MULTI_LINE", // 17 - "MULTI_SELECTABLE", // 18 - "OPAQUE", // 19 - "PRESSED", // 20 - "RESIZABLE", // 21 - "SELECTABLE", // 22 - "SELECTED", // 23 - "SENSITIVE", // 24 - "SHOWING", // 25 - "SINGLE_LINE", // 26 - "STALE", // 27 - "TRANSIENT", // 28 - "VERTICAL", // 29 - "VISIBLE", // 30 - "MOVEABLE", // 31 - "DEFAULT", // 32 - "OFFSCREEN", // 33 - "COLLAPSE", // 34 - }; - - auto getOrUnknown = [](const std::vector<const char*>& rCont, size_t nIndex) -> std::string - { - return (nIndex < rCont.size()) ? rCont[nIndex] : "<unknown>"; - }; - - std::ostringstream os; - os << "--" << std::endl; - os << "* event = " << getOrUnknown(aLabels, rEvent.EventId) << std::endl; - - switch (rEvent.EventId) - { - case accessibility::AccessibleEventId::STATE_CHANGED: - { - sal_Int64 nState; - if (rEvent.OldValue >>= nState) - os << " * old state = " << getOrUnknown(aStates, nState); - if (rEvent.NewValue >>= nState) - os << " * new state = " << getOrUnknown(aStates, nState); - - os << std::endl; - break; - } - default: - ; - } - - std::cout << os.str(); -} - -} - -#endif - void AtkListener::notifyEvent( const accessibility::AccessibleEventObject& aEvent ) { if( !mpWrapper )