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 /vcl/unx/gtk3 | |
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 'vcl/unx/gtk3')
-rw-r--r-- | vcl/unx/gtk3/a11y/atklistener.cxx | 11 | ||||
-rw-r--r-- | vcl/unx/gtk3/a11y/atkutil.cxx | 35 | ||||
-rw-r--r-- | vcl/unx/gtk3/a11y/atkwrapper.cxx | 19 | ||||
-rw-r--r-- | vcl/unx/gtk3/a11y/atkwrapper.hxx | 2 |
4 files changed, 27 insertions, 40 deletions
diff --git a/vcl/unx/gtk3/a11y/atklistener.cxx b/vcl/unx/gtk3/a11y/atklistener.cxx index f0c2504c9acf..0c6842ab130c 100644 --- a/vcl/unx/gtk3/a11y/atklistener.cxx +++ b/vcl/unx/gtk3/a11y/atklistener.cxx @@ -67,7 +67,7 @@ AtkListener::~AtkListener() static AtkStateType mapState( const uno::Any &rAny ) { - sal_Int16 nState = accessibility::AccessibleStateType::INVALID; + sal_Int64 nState = accessibility::AccessibleStateType::INVALID; rAny >>= nState; return mapAtkState( nState ); } @@ -133,10 +133,9 @@ void AtkListener::updateChildList( { m_aChildList.clear(); - uno::Reference< accessibility::XAccessibleStateSet > xStateSet = pContext->getAccessibleStateSet(); - if( !xStateSet.is() - || xStateSet->contains(accessibility::AccessibleStateType::DEFUNC) - || xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS) ) + sal_Int64 nStateSet = pContext->getAccessibleStateSet(); + if( (nStateSet & accessibility::AccessibleStateType::DEFUNC) + || (nStateSet & accessibility::AccessibleStateType::MANAGES_DESCENDANTS) ) return; css::uno::Reference<css::accessibility::XAccessibleContext3> xContext3(pContext, css::uno::UNO_QUERY); @@ -395,7 +394,7 @@ void printNotifyEvent( const accessibility::AccessibleEventObject& rEvent ) { case accessibility::AccessibleEventId::STATE_CHANGED: { - sal_Int16 nState; + sal_Int64 nState; if (rEvent.OldValue >>= nState) os << " * old state = " << getOrUnknown(aStates, nState); if (rEvent.NewValue >>= nState) diff --git a/vcl/unx/gtk3/a11y/atkutil.cxx b/vcl/unx/gtk3/a11y/atkutil.cxx index a2c8b46b470d..ed93b842a9c8 100644 --- a/vcl/unx/gtk3/a11y/atkutil.cxx +++ b/vcl/unx/gtk3/a11y/atkutil.cxx @@ -146,7 +146,7 @@ void DocumentFocusListener::notifyEvent( const accessibility::AccessibleEventObj { case accessibility::AccessibleEventId::STATE_CHANGED: { - sal_Int16 nState = accessibility::AccessibleStateType::INVALID; + sal_Int64 nState = accessibility::AccessibleStateType::INVALID; aEvent.NewValue >>= nState; if( accessibility::AccessibleStateType::FOCUSED == nState ) @@ -228,11 +228,8 @@ void DocumentFocusListener::attachRecursive( const uno::Reference< accessibility::XAccessibleContext >& xContext ) { - uno::Reference< accessibility::XAccessibleStateSet > xStateSet = - xContext->getAccessibleStateSet(); - - if( xStateSet.is() ) - attachRecursive(xAccessible, xContext, xStateSet); + sal_Int64 nStateSet = xContext->getAccessibleStateSet(); + attachRecursive(xAccessible, xContext, nStateSet); } /*****************************************************************************/ @@ -240,10 +237,10 @@ void DocumentFocusListener::attachRecursive( void DocumentFocusListener::attachRecursive( const uno::Reference< accessibility::XAccessible >& xAccessible, const uno::Reference< accessibility::XAccessibleContext >& xContext, - const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet + sal_Int64 nStateSet ) { - if( xStateSet->contains(accessibility::AccessibleStateType::FOCUSED ) ) + if( nStateSet & accessibility::AccessibleStateType::FOCUSED ) atk_wrapper_focus_tracker_notify_when_idle( xAccessible ); uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster(xContext, uno::UNO_QUERY); @@ -258,7 +255,7 @@ void DocumentFocusListener::attachRecursive( xBroadcaster->addAccessibleEventListener(static_cast< accessibility::XAccessibleEventListener *>(this)); - if( ! xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS ) ) + if( ! (nStateSet & accessibility::AccessibleStateType::MANAGES_DESCENDANTS) ) { sal_Int32 n, nmax = xContext->getAccessibleChildCount(); for( n = 0; n < nmax; n++ ) @@ -290,18 +287,16 @@ void DocumentFocusListener::detachRecursive( const uno::Reference< accessibility::XAccessibleContext >& xContext ) { - uno::Reference< accessibility::XAccessibleStateSet > xStateSet = - xContext->getAccessibleStateSet(); + sal_Int64 nStateSet = xContext->getAccessibleStateSet(); - if( xStateSet.is() ) - detachRecursive(xContext, xStateSet); + detachRecursive(xContext, nStateSet); } /*****************************************************************************/ void DocumentFocusListener::detachRecursive( const uno::Reference< accessibility::XAccessibleContext >& xContext, - const uno::Reference< accessibility::XAccessibleStateSet >& xStateSet + sal_Int64 nStateSet ) { uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster(xContext, uno::UNO_QUERY); @@ -311,7 +306,7 @@ void DocumentFocusListener::detachRecursive( xBroadcaster->removeAccessibleEventListener(static_cast< accessibility::XAccessibleEventListener *>(this)); - if( ! xStateSet->contains(accessibility::AccessibleStateType::MANAGES_DESCENDANTS ) ) + if( ! (nStateSet & accessibility::AccessibleStateType::MANAGES_DESCENDANTS) ) { sal_Int32 n, nmax = xContext->getAccessibleChildCount(); for( n = 0; n < nmax; n++ ) @@ -489,16 +484,12 @@ static void handle_get_focus(::VclWindowEvent const * pEvent) if( ! xContext.is() ) return; - uno::Reference< accessibility::XAccessibleStateSet > xStateSet = - xContext->getAccessibleStateSet(); - - if( ! xStateSet.is() ) - return; + sal_Int64 nStateSet = xContext->getAccessibleStateSet(); /* the UNO ToolBox wrapper does not (yet?) support XAccessibleSelection, so we * need to add listeners to the children instead of re-using the tabpage stuff */ - if( xStateSet->contains(accessibility::AccessibleStateType::FOCUSED) && + if( (nStateSet & accessibility::AccessibleStateType::FOCUSED) && ( pWindow->GetType() != WindowType::TREELISTBOX ) ) { atk_wrapper_focus_tracker_notify_when_idle( xAccessible ); @@ -509,7 +500,7 @@ static void handle_get_focus(::VclWindowEvent const * pEvent) { try { - rDocumentFocusListener.attachRecursive(xAccessible, xContext, xStateSet); + rDocumentFocusListener.attachRecursive(xAccessible, xContext, nStateSet); } catch (const uno::Exception&) { diff --git a/vcl/unx/gtk3/a11y/atkwrapper.cxx b/vcl/unx/gtk3/a11y/atkwrapper.cxx index d23f384e26fc..735b53c3edbe 100644 --- a/vcl/unx/gtk3/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk3/a11y/atkwrapper.cxx @@ -32,7 +32,6 @@ #include <com/sun/star/accessibility/XAccessibleContext2.hpp> #include <com/sun/star/accessibility/XAccessibleComponent.hpp> #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> -#include <com/sun/star/accessibility/XAccessibleStateSet.hpp> #include <com/sun/star/accessibility/XAccessibleRelationSet.hpp> #include <com/sun/star/accessibility/XAccessibleTable.hpp> #include <com/sun/star/accessibility/XAccessibleEditableText.hpp> @@ -110,7 +109,7 @@ static AtkRelationType mapRelationType( sal_Int16 nRelation ) return type; } -AtkStateType mapAtkState( sal_Int16 nState ) +AtkStateType mapAtkState( sal_Int64 nState ) { AtkStateType type = ATK_STATE_INVALID; @@ -592,18 +591,16 @@ wrapper_ref_state_set( AtkObject *atk_obj ) if( obj->mpContext.is() ) { try { - uno::Reference< accessibility::XAccessibleStateSet > xStateSet( - obj->mpContext->getAccessibleStateSet()); + sal_Int64 nStateSet = obj->mpContext->getAccessibleStateSet(); - if( xStateSet.is() ) + if( nStateSet ) { - uno::Sequence< sal_Int16 > aStates = xStateSet->getStates(); - - for( const auto nState : aStates ) + for (int i=0; i<63; ++i) { // ATK_STATE_LAST_DEFINED is used to check if the state // is unmapped, do not report it to Atk - if ( mapAtkState( nState ) != ATK_STATE_LAST_DEFINED ) + sal_Int64 nState = sal_Int64(1) << i; + if ( (nStateSet & nState) && mapAtkState( nState ) != ATK_STATE_LAST_DEFINED ) atk_state_set_add_state( pSet, mapAtkState( nState ) ); } @@ -896,8 +893,8 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib } // Attach a listener to the UNO object if it's not TRANSIENT - uno::Reference< accessibility::XAccessibleStateSet > xStateSet( xContext->getAccessibleStateSet() ); - if( xStateSet.is() && ! xStateSet->contains( accessibility::AccessibleStateType::TRANSIENT ) ) + sal_Int64 nStateSet( xContext->getAccessibleStateSet() ); + if( ! (nStateSet & accessibility::AccessibleStateType::TRANSIENT ) ) { uno::Reference< accessibility::XAccessibleEventBroadcaster > xBroadcaster(xContext, uno::UNO_QUERY); if( xBroadcaster.is() ) diff --git a/vcl/unx/gtk3/a11y/atkwrapper.hxx b/vcl/unx/gtk3/a11y/atkwrapper.hxx index 0b5f64726bba..d67ea2480e4d 100644 --- a/vcl/unx/gtk3/a11y/atkwrapper.hxx +++ b/vcl/unx/gtk3/a11y/atkwrapper.hxx @@ -94,7 +94,7 @@ void atk_object_wrapper_set_role(AtkObjectWrapper* wrapper, sa void atk_object_wrapper_dispose(AtkObjectWrapper* wrapper); -AtkStateType mapAtkState( sal_Int16 nState ); +AtkStateType mapAtkState( sal_Int64 nState ); AtkRelation* atk_object_wrapper_relation_new(const css::accessibility::AccessibleRelation& rRelation); |