summaryrefslogtreecommitdiff
path: root/svx/source/table
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 /svx/source/table
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 'svx/source/table')
-rw-r--r--svx/source/table/accessiblecell.cxx73
-rw-r--r--svx/source/table/accessiblecell.hxx6
-rw-r--r--svx/source/table/accessibletableshape.cxx10
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();
}