summaryrefslogtreecommitdiff
path: root/vcl/unx/gtk3/a11y/atkutil.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2022-07-03 20:29:28 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-07-08 10:10:11 +0200
commit8d8e6c84e512c1a8b33aac75965b84481d1a1d13 (patch)
tree9ed209d057081d4283eb44b51c0d9af18f976eab /vcl/unx/gtk3/a11y/atkutil.cxx
parent911ac42485b690df5cbbff6e3c04b111c1723aca (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.cxx35
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&)
{