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/a11y/atkutil.cxx | |
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/a11y/atkutil.cxx')
-rw-r--r-- | vcl/unx/gtk3/a11y/atkutil.cxx | 35 |
1 files changed, 13 insertions, 22 deletions
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&) { |