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 /svx/source/table | |
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 'svx/source/table')
-rw-r--r-- | svx/source/table/accessiblecell.cxx | 73 | ||||
-rw-r--r-- | svx/source/table/accessiblecell.hxx | 6 | ||||
-rw-r--r-- | svx/source/table/accessibletableshape.cxx | 10 |
3 files changed, 38 insertions, 51 deletions
diff --git a/svx/source/table/accessiblecell.cxx b/svx/source/table/accessiblecell.cxx index 1052ab5eb93b..0cb9072fb04b 100644 --- a/svx/source/table/accessiblecell.cxx +++ b/svx/source/table/accessiblecell.cxx @@ -33,7 +33,6 @@ #include <vcl/svapp.hxx> #include <vcl/window.hxx> -#include <unotools/accessiblestatesethelper.hxx> #include <comphelper/string.hxx> #include <comphelper/sequence.hxx> #include <svx/IAccessibleViewForwarder.hxx> @@ -87,7 +86,7 @@ void AccessibleCell::Init() } -bool AccessibleCell::SetState (sal_Int16 aState) +bool AccessibleCell::SetState (sal_Int64 aState) { bool bStateHasChanged = false; @@ -106,7 +105,7 @@ bool AccessibleCell::SetState (sal_Int16 aState) } -bool AccessibleCell::ResetState (sal_Int16 aState) +bool AccessibleCell::ResetState (sal_Int64 aState) { bool bStateHasChanged = false; @@ -178,65 +177,54 @@ Reference<XAccessible> SAL_CALL AccessibleCell::getAccessibleChild (sal_Int32 nI SHOWING VISIBLE */ -Reference<XAccessibleStateSet> SAL_CALL AccessibleCell::getAccessibleStateSet() +sal_Int64 SAL_CALL AccessibleCell::getAccessibleStateSet() { SolarMutexGuard aSolarGuard; ::osl::MutexGuard aGuard (m_aMutex); - Reference<XAccessibleStateSet> xStateSet; + sal_Int64 nStateSet = 0; if (rBHelper.bDisposed || mpText == nullptr) { // Return a minimal state set that only contains the DEFUNC state. - xStateSet = AccessibleContextBase::getAccessibleStateSet (); + nStateSet = AccessibleContextBase::getAccessibleStateSet (); } else { - if(mxStateSet) + // Merge current FOCUSED state from edit engine. + if (mpText != nullptr) { - // Merge current FOCUSED state from edit engine. - if (mpText != nullptr) - { - if (mpText->HaveFocus()) - mxStateSet->AddState (AccessibleStateType::FOCUSED); - else - mxStateSet->RemoveState (AccessibleStateType::FOCUSED); - } - // Set the invisible state for merged cell - if (mxCell.is() && mxCell->isMerged()) - mxStateSet->RemoveState(AccessibleStateType::VISIBLE); + if (mpText->HaveFocus()) + mnStateSet |= AccessibleStateType::FOCUSED; else - mxStateSet->AddState(AccessibleStateType::VISIBLE); + mnStateSet &= ~AccessibleStateType::FOCUSED; + } + // Set the invisible state for merged cell + if (mxCell.is() && mxCell->isMerged()) + mnStateSet &= ~AccessibleStateType::VISIBLE; + else + mnStateSet |= AccessibleStateType::VISIBLE; - //Just when the parent table is not read-only,set states EDITABLE,RESIZABLE,MOVEABLE - css::uno::Reference<XAccessible> xTempAcc = getAccessibleParent(); - if( xTempAcc.is() ) + //Just when the parent table is not read-only,set states EDITABLE,RESIZABLE,MOVEABLE + css::uno::Reference<XAccessible> xTempAcc = getAccessibleParent(); + if( xTempAcc.is() ) + { + css::uno::Reference<XAccessibleContext> + xTempAccContext = xTempAcc->getAccessibleContext(); + if( xTempAccContext.is() ) { - css::uno::Reference<XAccessibleContext> - xTempAccContext = xTempAcc->getAccessibleContext(); - if( xTempAccContext.is() ) + if (xTempAccContext->getAccessibleStateSet() & AccessibleStateType::EDITABLE) { - css::uno::Reference<XAccessibleStateSet> rState = - xTempAccContext->getAccessibleStateSet(); - if( rState.is() ) - { - const css::uno::Sequence<short> aStates = rState->getStates(); - if (std::find(aStates.begin(), aStates.end(), AccessibleStateType::EDITABLE) != aStates.end()) - { - mxStateSet->AddState (AccessibleStateType::EDITABLE); - mxStateSet->AddState (AccessibleStateType::RESIZABLE); - mxStateSet->AddState (AccessibleStateType::MOVEABLE); - } - } + mnStateSet |= AccessibleStateType::EDITABLE; + mnStateSet |= AccessibleStateType::RESIZABLE; + mnStateSet |= AccessibleStateType::MOVEABLE; } } - // Create a copy of the state set that may be modified by the - // caller without affecting the current state set. - xStateSet.set(new ::utl::AccessibleStateSetHelper (*mxStateSet)); } + nStateSet = mnStateSet; } - return xStateSet; + return nStateSet; } @@ -491,8 +479,7 @@ void AccessibleCell::disposing() // Make sure to send an event that this object loses the focus in the // case that it has the focus. - if (mxStateSet != nullptr) - mxStateSet->RemoveState(AccessibleStateType::FOCUSED); + mnStateSet &= ~AccessibleStateType::FOCUSED; if (mpText != nullptr) { diff --git a/svx/source/table/accessiblecell.hxx b/svx/source/table/accessiblecell.hxx index 65b9665ab668..d08cc97e9207 100644 --- a/svx/source/table/accessiblecell.hxx +++ b/svx/source/table/accessiblecell.hxx @@ -54,8 +54,8 @@ public: void Init(); - virtual bool SetState (sal_Int16 aState) override; - virtual bool ResetState (sal_Int16 aState) override; + virtual bool SetState (sal_Int64 aState) override; + virtual bool ResetState (sal_Int64 aState) override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override; @@ -65,7 +65,7 @@ public: // XAccessibleContext virtual sal_Int32 SAL_CALL getAccessibleChildCount() override; virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL getAccessibleChild(sal_Int32 nIndex) override; - virtual css::uno::Reference< css::accessibility::XAccessibleStateSet> SAL_CALL getAccessibleStateSet() override; + virtual sal_Int64 SAL_CALL getAccessibleStateSet() override; virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override; virtual OUString SAL_CALL getAccessibleName() override; const sdr::table::CellRef& getCellRef() const { return mxCell;} diff --git a/svx/source/table/accessibletableshape.cxx b/svx/source/table/accessibletableshape.cxx index 540ae311687e..cd29e8dbf1bc 100644 --- a/svx/source/table/accessibletableshape.cxx +++ b/svx/source/table/accessibletableshape.cxx @@ -954,7 +954,7 @@ AccessibleCell* AccessibleTableShape::GetActiveAccessibleCell() } //If current active cell is in editing, the focus state should be set to internal text -bool AccessibleTableShape::SetState (sal_Int16 aState) +bool AccessibleTableShape::SetState (sal_Int64 aState) { if( aState == AccessibleStateType::FOCUSED ) { @@ -967,7 +967,7 @@ bool AccessibleTableShape::SetState (sal_Int16 aState) } //If current active cell is in editing, the focus state should be reset to internal text -bool AccessibleTableShape::ResetState (sal_Int16 aState) +bool AccessibleTableShape::ResetState (sal_Int64 aState) { if( aState == AccessibleStateType::FOCUSED ) { @@ -979,12 +979,12 @@ bool AccessibleTableShape::ResetState (sal_Int16 aState) return AccessibleShape::ResetState (aState); } -bool AccessibleTableShape::SetStateDirectly (sal_Int16 aState) +bool AccessibleTableShape::SetStateDirectly (sal_Int64 aState) { return AccessibleContextBase::SetState (aState); } -bool AccessibleTableShape::ResetStateDirectly (sal_Int16 aState) +bool AccessibleTableShape::ResetStateDirectly (sal_Int64 aState) { return AccessibleContextBase::ResetState (aState); } @@ -1051,7 +1051,7 @@ OUString SAL_CALL AccessibleTableHeaderShape::getAccessibleName() return mpTable->getAccessibleName(); } -Reference< XAccessibleStateSet > SAL_CALL AccessibleTableHeaderShape::getAccessibleStateSet() +sal_Int64 SAL_CALL AccessibleTableHeaderShape::getAccessibleStateSet() { return mpTable->getAccessibleStateSet(); } |