diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2022-07-03 20:29:28 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-07-08 10:10:11 +0200 |
commit | 8d8e6c84e512c1a8b33aac75965b84481d1a1d13 (patch) | |
tree | 9ed209d057081d4283eb44b51c0d9af18f976eab /toolkit | |
parent | 911ac42485b690df5cbbff6e3c04b111c1723aca (diff) |
[API CHANGE] Drop css::accessibility::XAccessibleStateSet
which is internal API, unused (as far as I can tell) by external
users.
This state is purely a bitset
(as implemented by utl::AccessibleStateSetHelper)
so we can just return it as a 64-bit value.
This shaves significant time off the performance profiles
of code that loads very complex shapes, because this state
is frequently used, and we no longer need to allocate a return
value on the heap for every call.
Change-Id: Icf1b3bd367c256646ae9015f9127025f59459c2c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136786
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'toolkit')
13 files changed, 179 insertions, 172 deletions
diff --git a/toolkit/inc/controls/accessiblecontrolcontext.hxx b/toolkit/inc/controls/accessiblecontrolcontext.hxx index d5233cc54d52..ebe928218535 100644 --- a/toolkit/inc/controls/accessiblecontrolcontext.hxx +++ b/toolkit/inc/controls/accessiblecontrolcontext.hxx @@ -75,7 +75,7 @@ namespace toolkit virtual OUString SAL_CALL getAccessibleDescription( ) override; virtual OUString SAL_CALL getAccessibleName( ) override; virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; - virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; + virtual sal_Int64 SAL_CALL getAccessibleStateSet( ) override; // XAccessibleComponent virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; diff --git a/toolkit/qa/complex/toolkit/accessibility/_XAccessibleContext.java b/toolkit/qa/complex/toolkit/accessibility/_XAccessibleContext.java index df7ef76abd4b..e52855efa01a 100644 --- a/toolkit/qa/complex/toolkit/accessibility/_XAccessibleContext.java +++ b/toolkit/qa/complex/toolkit/accessibility/_XAccessibleContext.java @@ -25,7 +25,6 @@ import com.sun.star.accessibility.IllegalAccessibleComponentStateException; import com.sun.star.accessibility.XAccessible; import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.accessibility.XAccessibleRelationSet; -import com.sun.star.accessibility.XAccessibleStateSet; import util.AccessibilityTools; /** @@ -219,8 +218,7 @@ public class _XAccessibleContext { * Has <b> OK </b> status if the set is not null. */ public boolean _getAccessibleStateSet() { - XAccessibleStateSet set = oObj.getAccessibleStateSet(); - return set != null; + return true; } /** diff --git a/toolkit/qa/complex/toolkit/accessibility/_XAccessibleEventBroadcaster.java b/toolkit/qa/complex/toolkit/accessibility/_XAccessibleEventBroadcaster.java index fe48a6cb86b3..44b846615d35 100644 --- a/toolkit/qa/complex/toolkit/accessibility/_XAccessibleEventBroadcaster.java +++ b/toolkit/qa/complex/toolkit/accessibility/_XAccessibleEventBroadcaster.java @@ -166,11 +166,12 @@ public class _XAccessibleEventBroadcaster { private static boolean chkTransient(Object Testcase) { XAccessibleContext accCon = UnoRuntime.queryInterface(XAccessibleContext.class, Testcase); - return accCon.getAccessibleStateSet().contains( - AccessibleStateType.TRANSIENT) - && accCon.getAccessibleParent().getAccessibleContext() - .getAccessibleStateSet().contains( - AccessibleStateType.MANAGES_DESCENDANTS); + long nStateSet = accCon.getAccessibleStateSet(); + if ((nStateSet & AccessibleStateType.TRANSIENT) == 0) + return false; + long nParentStateSet = accCon.getAccessibleParent().getAccessibleContext() + .getAccessibleStateSet(); + return (nParentStateSet & AccessibleStateType.MANAGES_DESCENDANTS) != 0; } } diff --git a/toolkit/qa/cppunit/a11y/AccessibilityTools.cxx b/toolkit/qa/cppunit/a11y/AccessibilityTools.cxx index 572f82e623e2..816e9b82b168 100644 --- a/toolkit/qa/cppunit/a11y/AccessibilityTools.cxx +++ b/toolkit/qa/cppunit/a11y/AccessibilityTools.cxx @@ -37,8 +37,7 @@ AccessibilityTools::getAccessibleObjectForRole( const css::uno::Reference<css::accessibility::XAccessible>& xacc, sal_Int16 role) { css::uno::Reference<css::accessibility::XAccessibleContext> ac = xacc->getAccessibleContext(); - bool isShowing - = ac->getAccessibleStateSet()->contains(accessibility::AccessibleStateType::SHOWING); + bool isShowing = ac->getAccessibleStateSet() & accessibility::AccessibleStateType::SHOWING; if ((ac->getAccessibleRole() == role) && isShowing) { @@ -93,14 +92,6 @@ bool AccessibilityTools::equals(const uno::Reference<accessibility::XAccessibleC return equals(xctx1->getAccessibleParent(), xctx2->getAccessibleParent()); } -bool AccessibilityTools::equals(const uno::Reference<accessibility::XAccessibleStateSet>& xsts1, - const uno::Reference<accessibility::XAccessibleStateSet>& xsts2) -{ - if (!xsts1.is() || !xsts2.is()) - return xsts1.is() == xsts2.is(); - return xsts1->getStates() == xsts2->getStates(); -} - OUString AccessibilityTools::getRoleName(const sal_Int16 role) { switch (role) @@ -283,82 +274,132 @@ OUString AccessibilityTools::getRoleName(const sal_Int16 role) return "unknown"; } -OUString AccessibilityTools::getStateName(const sal_Int16 state) +OUString AccessibilityTools::debugAccessibleStateSet(const sal_Int64 nCombinedState) { - switch (state) + OUString combinedName; + + for (int i = 0; i < 63; i++) { - case accessibility::AccessibleStateType::ACTIVE: - return "ACTIVE"; - case accessibility::AccessibleStateType::ARMED: - return "ARMED"; - case accessibility::AccessibleStateType::BUSY: - return "BUSY"; - case accessibility::AccessibleStateType::CHECKED: - return "CHECKED"; - case accessibility::AccessibleStateType::COLLAPSE: - return "COLLAPSE"; - case accessibility::AccessibleStateType::DEFAULT: - return "DEFAULT"; - case accessibility::AccessibleStateType::DEFUNC: - return "DEFUNC"; - case accessibility::AccessibleStateType::EDITABLE: - return "EDITABLE"; - case accessibility::AccessibleStateType::ENABLED: - return "ENABLED"; - case accessibility::AccessibleStateType::EXPANDABLE: - return "EXPANDABLE"; - case accessibility::AccessibleStateType::EXPANDED: - return "EXPANDED"; - case accessibility::AccessibleStateType::FOCUSABLE: - return "FOCUSABLE"; - case accessibility::AccessibleStateType::FOCUSED: - return "FOCUSED"; - case accessibility::AccessibleStateType::HORIZONTAL: - return "HORIZONTAL"; - case accessibility::AccessibleStateType::ICONIFIED: - return "ICONIFIED"; - case accessibility::AccessibleStateType::INDETERMINATE: - return "INDETERMINATE"; - case accessibility::AccessibleStateType::INVALID: - return "INVALID"; - case accessibility::AccessibleStateType::MANAGES_DESCENDANTS: - return "MANAGES_DESCENDANTS"; - case accessibility::AccessibleStateType::MODAL: - return "MODAL"; - case accessibility::AccessibleStateType::MOVEABLE: - return "MOVEABLE"; - case accessibility::AccessibleStateType::MULTI_LINE: - return "MULTI_LINE"; - case accessibility::AccessibleStateType::MULTI_SELECTABLE: - return "MULTI_SELECTABLE"; - case accessibility::AccessibleStateType::OFFSCREEN: - return "OFFSCREEN"; - case accessibility::AccessibleStateType::OPAQUE: - return "OPAQUE"; - case accessibility::AccessibleStateType::PRESSED: - return "PRESSED"; - case accessibility::AccessibleStateType::RESIZABLE: - return "RESIZABLE"; - case accessibility::AccessibleStateType::SELECTABLE: - return "SELECTABLE"; - case accessibility::AccessibleStateType::SELECTED: - return "SELECTED"; - case accessibility::AccessibleStateType::SENSITIVE: - return "SENSITIVE"; - case accessibility::AccessibleStateType::SHOWING: - return "SHOWING"; - case accessibility::AccessibleStateType::SINGLE_LINE: - return "SINGLE_LINE"; - case accessibility::AccessibleStateType::STALE: - return "STALE"; - case accessibility::AccessibleStateType::TRANSIENT: - return "TRANSIENT"; - case accessibility::AccessibleStateType::VERTICAL: - return "VERTICAL"; - case accessibility::AccessibleStateType::VISIBLE: - return "VISIBLE"; + sal_Int64 state = sal_Int64(1) << i; + if (!(state & nCombinedState)) + continue; + OUString name; + switch (state) + { + case accessibility::AccessibleStateType::ACTIVE: + name = "ACTIVE"; + break; + case accessibility::AccessibleStateType::ARMED: + name = "ARMED"; + break; + case accessibility::AccessibleStateType::BUSY: + name = "BUSY"; + break; + case accessibility::AccessibleStateType::CHECKED: + name = "CHECKED"; + break; + case accessibility::AccessibleStateType::COLLAPSE: + name = "COLLAPSE"; + break; + case accessibility::AccessibleStateType::DEFAULT: + name = "DEFAULT"; + break; + case accessibility::AccessibleStateType::DEFUNC: + name = "DEFUNC"; + break; + case accessibility::AccessibleStateType::EDITABLE: + name = "EDITABLE"; + break; + case accessibility::AccessibleStateType::ENABLED: + name = "ENABLED"; + break; + case accessibility::AccessibleStateType::EXPANDABLE: + name = "EXPANDABLE"; + break; + case accessibility::AccessibleStateType::EXPANDED: + name = "EXPANDED"; + break; + case accessibility::AccessibleStateType::FOCUSABLE: + name = "FOCUSABLE"; + break; + case accessibility::AccessibleStateType::FOCUSED: + name = "FOCUSED"; + break; + case accessibility::AccessibleStateType::HORIZONTAL: + name = "HORIZONTAL"; + break; + case accessibility::AccessibleStateType::ICONIFIED: + name = "ICONIFIED"; + break; + case accessibility::AccessibleStateType::INDETERMINATE: + name = "INDETERMINATE"; + break; + case accessibility::AccessibleStateType::INVALID: + name = "INVALID"; + break; + case accessibility::AccessibleStateType::MANAGES_DESCENDANTS: + name = "MANAGES_DESCENDANTS"; + break; + case accessibility::AccessibleStateType::MODAL: + name = "MODAL"; + break; + case accessibility::AccessibleStateType::MOVEABLE: + name = "MOVEABLE"; + break; + case accessibility::AccessibleStateType::MULTI_LINE: + name = "MULTI_LINE"; + break; + case accessibility::AccessibleStateType::MULTI_SELECTABLE: + name = "MULTI_SELECTABLE"; + break; + case accessibility::AccessibleStateType::OFFSCREEN: + name = "OFFSCREEN"; + break; + case accessibility::AccessibleStateType::OPAQUE: + name = "OPAQUE"; + break; + case accessibility::AccessibleStateType::PRESSED: + name = "PRESSED"; + break; + case accessibility::AccessibleStateType::RESIZABLE: + name = "RESIZABLE"; + break; + case accessibility::AccessibleStateType::SELECTABLE: + name = "SELECTABLE"; + break; + case accessibility::AccessibleStateType::SELECTED: + name = "SELECTED"; + break; + case accessibility::AccessibleStateType::SENSITIVE: + name = "SENSITIVE"; + break; + case accessibility::AccessibleStateType::SHOWING: + name = "SHOWING"; + break; + case accessibility::AccessibleStateType::SINGLE_LINE: + name = "SINGLE_LINE"; + break; + case accessibility::AccessibleStateType::STALE: + name = "STALE"; + break; + case accessibility::AccessibleStateType::TRANSIENT: + name = "TRANSIENT"; + break; + case accessibility::AccessibleStateType::VERTICAL: + name = "VERTICAL"; + break; + case accessibility::AccessibleStateType::VISIBLE: + name = "VISIBLE"; + break; + } + if (combinedName.getLength()) + combinedName += " | "; + combinedName += name; } - return "unknown"; + + if (combinedName.isEmpty()) + return "unknown"; + return combinedName; } OUString AccessibilityTools::getEventIdName(const sal_Int16 event_id) @@ -463,20 +504,6 @@ OUString AccessibilityTools::debugName(accessibility::XAccessible* acc) return debugName(acc->getAccessibleContext().get()); } -OUString AccessibilityTools::debugName(accessibility::XAccessibleStateSet* xsts) -{ - OUString name; - - for (auto state : xsts->getStates()) - { - if (name.getLength()) - name += " | "; - name += AccessibilityTools::getStateName(state); - } - - return name; -} - OUString AccessibilityTools::debugName(const accessibility::AccessibleEventObject* evobj) { return "(AccessibleEventObject) { id=" + getEventIdName(evobj->EventId) diff --git a/toolkit/qa/cppunit/a11y/AccessibilityTools.hxx b/toolkit/qa/cppunit/a11y/AccessibilityTools.hxx index a16338a85993..96afe4377f94 100644 --- a/toolkit/qa/cppunit/a11y/AccessibilityTools.hxx +++ b/toolkit/qa/cppunit/a11y/AccessibilityTools.hxx @@ -27,7 +27,6 @@ #include <com/sun/star/accessibility/AccessibleEventObject.hpp> #include <com/sun/star/accessibility/XAccessible.hpp> #include <com/sun/star/accessibility/XAccessibleContext.hpp> -#include <com/sun/star/accessibility/XAccessibleStateSet.hpp> class AccessibilityTools { @@ -44,8 +43,6 @@ public: const css::uno::Reference<css::accessibility::XAccessible>& xacc2); static bool equals(const css::uno::Reference<css::accessibility::XAccessibleContext>& xctx1, const css::uno::Reference<css::accessibility::XAccessibleContext>& xctx2); - static bool equals(const css::uno::Reference<css::accessibility::XAccessibleStateSet>& xsts1, - const css::uno::Reference<css::accessibility::XAccessibleStateSet>& xsts2); static OUString getRoleName(const sal_Int16 role); static OUString getStateName(const sal_Int16 state); @@ -80,6 +77,8 @@ public: return ost.str(); } + static OUString debugAccessibleStateSet(sal_Int64 p); + /** * @brief Process events until a condition or a timeout * @param cUntilCallback Callback condition @@ -126,7 +125,6 @@ public: private: static OUString debugName(css::accessibility::XAccessibleContext* xctx); static OUString debugName(css::accessibility::XAccessible* xacc); - static OUString debugName(css::accessibility::XAccessibleStateSet* xsts); static OUString debugName(const css::accessibility::AccessibleEventObject* evobj); }; @@ -149,7 +147,6 @@ CPPUNIT_NS_BEGIN AT_ASSERTION_TRAITS(css::accessibility::XAccessible); AT_ASSERTION_TRAITS(css::accessibility::XAccessibleContext); -AT_ASSERTION_TRAITS(css::accessibility::XAccessibleStateSet); #undef AT_ASSERTION_TRAITS diff --git a/toolkit/qa/cppunit/a11y/XAccessibleComponentTester.cxx b/toolkit/qa/cppunit/a11y/XAccessibleComponentTester.cxx index ea46ff778575..3c743d3223da 100644 --- a/toolkit/qa/cppunit/a11y/XAccessibleComponentTester.cxx +++ b/toolkit/qa/cppunit/a11y/XAccessibleComponentTester.cxx @@ -147,7 +147,8 @@ void XAccessibleComponentTester::testAccessibleAtPoint() child->getAccessibleContext(), uno::UNO_SET_THROW); std::cout << "* Found child: " << AccessibilityTools::debugString(child) << std::endl; std::cout << " states: " - << AccessibilityTools::debugString(childContext->getAccessibleStateSet()) + << AccessibilityTools::debugAccessibleStateSet( + childContext->getAccessibleStateSet()) << std::endl; uno::Reference<accessibility::XAccessibleComponent> xChildComponent(childContext, uno::UNO_QUERY); diff --git a/toolkit/qa/cppunit/a11y/XAccessibleContextTester.cxx b/toolkit/qa/cppunit/a11y/XAccessibleContextTester.cxx index b8c7898f963f..b330d5ba9544 100644 --- a/toolkit/qa/cppunit/a11y/XAccessibleContextTester.cxx +++ b/toolkit/qa/cppunit/a11y/XAccessibleContextTester.cxx @@ -143,9 +143,9 @@ void XAccessibleContextTester::testGetAccessibleRole() */ void XAccessibleContextTester::testGetAccessibleStateSet() { - auto stateSet = mxContext->getAccessibleStateSet(); - std::cout << "The state set is: " << AccessibilityTools::debugString(stateSet) << std::endl; - CPPUNIT_ASSERT_MESSAGE("state set is not set", stateSet.is()); + sal_Int64 stateSet = mxContext->getAccessibleStateSet(); + std::cout << "The state set is: " << AccessibilityTools::debugAccessibleStateSet(stateSet) + << std::endl; } /** diff --git a/toolkit/qa/cppunit/a11y/XAccessibleEventBroadcasterTester.cxx b/toolkit/qa/cppunit/a11y/XAccessibleEventBroadcasterTester.cxx index 80aa2c079f92..1ac5d4e3b56b 100644 --- a/toolkit/qa/cppunit/a11y/XAccessibleEventBroadcasterTester.cxx +++ b/toolkit/qa/cppunit/a11y/XAccessibleEventBroadcasterTester.cxx @@ -92,10 +92,9 @@ bool XAccessibleEventBroadcasterTester::isTransient( bool XAccessibleEventBroadcasterTester::isTransient( const uno::Reference<accessibility::XAccessibleContext> xCtx) { - return ( - xCtx->getAccessibleStateSet()->contains(accessibility::AccessibleStateType::TRANSIENT) - && xCtx->getAccessibleParent()->getAccessibleContext()->getAccessibleStateSet()->contains( - accessibility::AccessibleStateType::MANAGES_DESCENDANTS)); + return ((xCtx->getAccessibleStateSet() & accessibility::AccessibleStateType::TRANSIENT) + && (xCtx->getAccessibleParent()->getAccessibleContext()->getAccessibleStateSet() + & accessibility::AccessibleStateType::MANAGES_DESCENDANTS)); } /** diff --git a/toolkit/source/awt/vclxaccessiblecomponent.cxx b/toolkit/source/awt/vclxaccessiblecomponent.cxx index 767004c3539d..b45b1084e7d8 100644 --- a/toolkit/source/awt/vclxaccessiblecomponent.cxx +++ b/toolkit/source/awt/vclxaccessiblecomponent.cxx @@ -34,7 +34,6 @@ #include <vcl/toolkit/edit.hxx> #include <vcl/settings.hxx> #include <tools/debug.hxx> -#include <unotools/accessiblestatesethelper.hxx> #include <unotools/accessiblerelationsethelper.hxx> #include <vcl/svapp.hxx> #include <vcl/menu.hxx> @@ -385,50 +384,50 @@ void VCLXAccessibleComponent::FillAccessibleRelationSet( utl::AccessibleRelation } } -void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet ) +void VCLXAccessibleComponent::FillAccessibleStateSet( sal_Int64& rStateSet ) { VclPtr<vcl::Window> pWindow = GetWindow(); if ( pWindow ) { if ( pWindow->IsVisible() ) { - rStateSet.AddState( accessibility::AccessibleStateType::VISIBLE ); - rStateSet.AddState( accessibility::AccessibleStateType::SHOWING ); + rStateSet |= accessibility::AccessibleStateType::VISIBLE; + rStateSet |= accessibility::AccessibleStateType::SHOWING; } else { - rStateSet.AddState( accessibility::AccessibleStateType::INVALID ); + rStateSet |= accessibility::AccessibleStateType::INVALID; } if ( pWindow->IsEnabled() ) { - rStateSet.AddState( accessibility::AccessibleStateType::ENABLED ); - rStateSet.AddState( accessibility::AccessibleStateType::SENSITIVE ); + rStateSet |= accessibility::AccessibleStateType::ENABLED; + rStateSet |= accessibility::AccessibleStateType::SENSITIVE; } if ( pWindow->HasChildPathFocus() && ( getAccessibleRole() == accessibility::AccessibleRole::FRAME || getAccessibleRole() == accessibility::AccessibleRole::ALERT || getAccessibleRole() == accessibility::AccessibleRole::DIALOG ) ) // #i18891# - rStateSet.AddState( accessibility::AccessibleStateType::ACTIVE ); + rStateSet |= accessibility::AccessibleStateType::ACTIVE; if ( pWindow->HasFocus() || ( pWindow->IsCompoundControl() && pWindow->HasChildPathFocus() ) ) - rStateSet.AddState( accessibility::AccessibleStateType::FOCUSED ); + rStateSet |= accessibility::AccessibleStateType::FOCUSED; if ( pWindow->IsWait() ) - rStateSet.AddState( accessibility::AccessibleStateType::BUSY ); + rStateSet |= accessibility::AccessibleStateType::BUSY; if ( pWindow->GetStyle() & WB_SIZEABLE ) - rStateSet.AddState( accessibility::AccessibleStateType::RESIZABLE ); + rStateSet |= accessibility::AccessibleStateType::RESIZABLE; // 6. frame doesn't have MOVABLE state // 10. for password text, where is the sensitive state? if( ( getAccessibleRole() == accessibility::AccessibleRole::FRAME ||getAccessibleRole() == accessibility::AccessibleRole::DIALOG )&& pWindow->GetStyle() & WB_MOVEABLE ) - rStateSet.AddState( accessibility::AccessibleStateType::MOVEABLE ); + rStateSet |= accessibility::AccessibleStateType::MOVEABLE; if( pWindow->IsDialog() ) { Dialog *pDlg = static_cast< Dialog* >( pWindow.get() ); if( pDlg->IsInExecute() ) - rStateSet.AddState( accessibility::AccessibleStateType::MODAL ); + rStateSet |= accessibility::AccessibleStateType::MODAL; } //If a combobox or list's edit child isn't read-only,EDITABLE state //should be set. @@ -436,7 +435,7 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHel { if( !( pWindow->GetStyle() & WB_READONLY) || !static_cast<Edit*>(pWindow.get())->IsReadOnly() ) - rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE ); + rStateSet |= accessibility::AccessibleStateType::EDITABLE; } VclPtr<vcl::Window> pChild = pWindow->GetWindow( GetWindowType::FirstChild ); @@ -448,14 +447,14 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHel { if( !( pWinTemp->GetStyle() & WB_READONLY) || !static_cast<Edit*>(pWinTemp.get())->IsReadOnly() ) - rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE ); + rStateSet |= accessibility::AccessibleStateType::EDITABLE; break; } if( pChild->GetType() == WindowType::EDIT ) { if( !( pChild->GetStyle() & WB_READONLY) || !static_cast<Edit*>(pChild.get())->IsReadOnly()) - rStateSet.AddState( accessibility::AccessibleStateType::EDITABLE ); + rStateSet |= accessibility::AccessibleStateType::EDITABLE; break; } pChild = pChild->GetWindow( GetWindowType::Next ); @@ -463,7 +462,7 @@ void VCLXAccessibleComponent::FillAccessibleStateSet( utl::AccessibleStateSetHel } else { - rStateSet.AddState( accessibility::AccessibleStateType::DEFUNC ); + rStateSet |= accessibility::AccessibleStateType::DEFUNC; } /* @@ -644,13 +643,13 @@ uno::Reference< accessibility::XAccessibleRelationSet > VCLXAccessibleComponent: return pRelationSetHelper; } -uno::Reference< accessibility::XAccessibleStateSet > VCLXAccessibleComponent::getAccessibleStateSet( ) +sal_Int64 VCLXAccessibleComponent::getAccessibleStateSet( ) { OExternalLockGuard aGuard( this ); - rtl::Reference<utl::AccessibleStateSetHelper> pStateSetHelper = new utl::AccessibleStateSetHelper; - FillAccessibleStateSet( *pStateSetHelper ); - return pStateSetHelper; + sal_Int64 nStateSet = 0; + FillAccessibleStateSet( nStateSet ); + return nStateSet; } lang::Locale VCLXAccessibleComponent::getLocale() @@ -729,8 +728,8 @@ void VCLXAccessibleComponent::grabFocus( ) { OExternalLockGuard aGuard( this ); - uno::Reference< accessibility::XAccessibleStateSet > xStates = getAccessibleStateSet(); - if ( m_xVCLXWindow.is() && xStates.is() && xStates->contains( accessibility::AccessibleStateType::FOCUSABLE ) ) + sal_Int64 nStates = getAccessibleStateSet(); + if ( m_xVCLXWindow.is() && ( nStates & accessibility::AccessibleStateType::FOCUSABLE ) ) m_xVCLXWindow->setFocus(); } diff --git a/toolkit/source/controls/accessiblecontrolcontext.cxx b/toolkit/source/controls/accessiblecontrolcontext.cxx index 219b4a610a40..d778cfd271fc 100644 --- a/toolkit/source/controls/accessiblecontrolcontext.cxx +++ b/toolkit/source/controls/accessiblecontrolcontext.cxx @@ -18,7 +18,6 @@ */ #include <controls/accessiblecontrolcontext.hxx> -#include <unotools/accessiblestatesethelper.hxx> #include <com/sun/star/awt/XControl.hpp> #include <com/sun/star/awt/XWindow.hpp> #include <com/sun/star/beans/XPropertySet.hpp> @@ -173,23 +172,21 @@ namespace toolkit } - Reference< XAccessibleStateSet > SAL_CALL OAccessibleControlContext::getAccessibleStateSet( ) + sal_Int64 SAL_CALL OAccessibleControlContext::getAccessibleStateSet( ) { ::osl::MutexGuard aGuard( GetMutex() ); // no OContextEntryGuard here, as we do not want to throw an exception in case we're not alive anymore - rtl::Reference<::utl::AccessibleStateSetHelper> pStateSet; + sal_Int64 nStateSet = 0; if ( isAlive() ) { // no own states, only the ones which are foreign controlled - pStateSet = new ::utl::AccessibleStateSetHelper( 0 ); } else { // only the DEFUNC state if we're already disposed - pStateSet = new ::utl::AccessibleStateSetHelper; - pStateSet->AddState( AccessibleStateType::DEFUNC ); + nStateSet |= AccessibleStateType::DEFUNC; } - return pStateSet; + return nStateSet; } diff --git a/toolkit/test/accessibility/AccessibleContextHandler.java b/toolkit/test/accessibility/AccessibleContextHandler.java index 3b3d351086c7..62bd4b813261 100644 --- a/toolkit/test/accessibility/AccessibleContextHandler.java +++ b/toolkit/test/accessibility/AccessibleContextHandler.java @@ -18,7 +18,6 @@ import com.sun.star.accessibility.XAccessible; import com.sun.star.accessibility.XAccessibleContext; -import com.sun.star.accessibility.XAccessibleStateSet; import tools.NameProvider; class AccessibleContextHandler @@ -71,22 +70,16 @@ class AccessibleContextHandler break; case 3: sChild = ""; - XAccessibleStateSet xStateSet = - xContext.getAccessibleStateSet(); - if (xStateSet != null) + long xStateSet = xContext.getAccessibleStateSet(); + for (short i=0; i<=30; i++) { - for (short i=0; i<=30; i++) + if ((xStateSet & (1<<i)) != 0) { - if (xStateSet.contains (i)) - { - if (sChild.compareTo ("") != 0) - sChild += ", "; - sChild += NameProvider.getStateName(i); - } + if (sChild.compareTo ("") != 0) + sChild += ", "; + sChild += NameProvider.getStateName(1<<i); } } - else - sChild += "no state set"; sChild = "State set: " + sChild; } } diff --git a/toolkit/test/accessibility/CanvasShape.java b/toolkit/test/accessibility/CanvasShape.java index 19aa983defd8..71ae17d68887 100644 --- a/toolkit/test/accessibility/CanvasShape.java +++ b/toolkit/test/accessibility/CanvasShape.java @@ -23,7 +23,6 @@ import java.awt.geom.Rectangle2D; import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.accessibility.XAccessibleComponent; import com.sun.star.accessibility.XAccessibleText; -import com.sun.star.accessibility.XAccessibleStateSet; import com.sun.star.accessibility.AccessibleStateType; class CanvasShape @@ -63,12 +62,9 @@ class CanvasShape msDescription = mxContext.getAccessibleDescription(); // Extract the selected and focused flag. - XAccessibleStateSet xStateSet = mxContext.getAccessibleStateSet (); - if (xStateSet != null) - { - mbSelected = xStateSet.contains (AccessibleStateType.SELECTED); - mbFocused = xStateSet.contains (AccessibleStateType.FOCUSED); - } + long nStateSet = mxContext.getAccessibleStateSet (); + mbSelected = (nStateSet & AccessibleStateType.SELECTED) != 0; + mbFocused = (nStateSet & AccessibleStateType.FOCUSED) != 0; } updateGeometry (); diff --git a/toolkit/test/accessibility/ov/FocusView.java b/toolkit/test/accessibility/ov/FocusView.java index cca1a6a0cf17..0428403f80b8 100644 --- a/toolkit/test/accessibility/ov/FocusView.java +++ b/toolkit/test/accessibility/ov/FocusView.java @@ -31,7 +31,6 @@ import com.sun.star.accessibility.AccessibleEventObject; import com.sun.star.accessibility.AccessibleStateType; import com.sun.star.accessibility.XAccessibleComponent; import com.sun.star.accessibility.XAccessibleContext; -import com.sun.star.accessibility.XAccessibleStateSet; import com.sun.star.uno.UnoRuntime; public class FocusView @@ -103,8 +102,8 @@ public class FocusView } else { - XAccessibleStateSet aStateSet = mxContext.getAccessibleStateSet(); - if (aStateSet.contains(AccessibleStateType.FOCUSED)) + long aStateSet = mxContext.getAccessibleStateSet(); + if (aStateSet & AccessibleStateType.FOCUSED) maFocused.setText ("focused"); else maFocused.setText ("not focused"); |