diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2022-03-03 14:49:57 +0100 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2022-03-04 08:05:16 +0100 |
commit | 83419f869c33d550a61d260b1b3aef6a00cefc45 (patch) | |
tree | cfaea01b06c61203195c8373ca4966db2b073193 /accessibility | |
parent | a9c57e6ac6bc46ad78b66409a964f5b717878931 (diff) |
tdf#147742 a11y: AccessibleGridControl...: get accessible name on demand
Base class `AccessibleGridControlBase` was retrieving
an accessible name and storing it in class member 'm_aName'.
For the classes representing cells, derived from
`AccessibleGridControlCell`, the index is needed
to get a meaningful name, so the name retrieved in
the `AccessibleGridControlBase` ctor with hard-coded
row/column indices of 0 was replaced again in
the `AccessibleGridControlCell` ctor.
Replace that logic to just retrieve the name
on demand, and override
'getAccessibleName' in `AccessibleGridControlCell`
using the logic used in its ctor previously.
(No functional change intended here, but a
somewhat similar handling for the accessible
description was causing a crash when the Orca screen
reader was active. This will be handled in a following
commit.)
Change-Id: I87eabb2ce3c99d4a622d919ab0fb8d7fb3beed6b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130933
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Diffstat (limited to 'accessibility')
4 files changed, 24 insertions, 25 deletions
diff --git a/accessibility/inc/extended/AccessibleGridControlBase.hxx b/accessibility/inc/extended/AccessibleGridControlBase.hxx index 361c8d4d59f6..4075b7f7964f 100644 --- a/accessibility/inc/extended/AccessibleGridControlBase.hxx +++ b/accessibility/inc/extended/AccessibleGridControlBase.hxx @@ -61,7 +61,7 @@ class AccessibleGridControlBase : public AccessibleGridControlImplHelper { public: - /** Constructor sets specified name and description. + /** Constructor. @param rxParent XAccessible interface of the parent object. @param rTable The Table control. @param eObjType Type of accessible table control. */ @@ -227,10 +227,6 @@ protected: /** @throws <type>DisposedException</type> If the object is not alive. */ void ensureIsAlive() const; - /** Changes the name of the object (flat assignment, no notify). - @attention This method requires a locked mutex. */ - inline void implSetName( const OUString& rName ); - /** Locks all mutex's and calculates the bounding box relative to the parent window. @return The bounding box (VCL rect.) relative to the parent object. @@ -257,8 +253,6 @@ protected: ::vcl::table::AccessibleTableControlObjType m_eObjType; private: - /** Localized name. */ - OUString m_aName; /** Localized description text. */ OUString m_aDescription; ::comphelper::AccessibleEventNotifier::TClientId m_aClientId; @@ -315,12 +309,6 @@ inline ::vcl::table::AccessibleTableControlObjType AccessibleGridControlBase::ge return m_eObjType; } -inline void AccessibleGridControlBase::implSetName( - const OUString& rName ) -{ - m_aName = rName; -} - } // namespace accessibility diff --git a/accessibility/inc/extended/AccessibleGridControlTableCell.hxx b/accessibility/inc/extended/AccessibleGridControlTableCell.hxx index 77077183b54b..6e3ee3367ae8 100644 --- a/accessibility/inc/extended/AccessibleGridControlTableCell.hxx +++ b/accessibility/inc/extended/AccessibleGridControlTableCell.hxx @@ -40,6 +40,10 @@ namespace accessibility // XAccessibleComponent virtual void SAL_CALL grabFocus() override; + public: + // XAccessibleContext + virtual OUString SAL_CALL getAccessibleName() override; + protected: AccessibleGridControlCell( const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, diff --git a/accessibility/source/extended/AccessibleGridControlBase.cxx b/accessibility/source/extended/AccessibleGridControlBase.cxx index c118c70f7a32..c02d921fa1a1 100644 --- a/accessibility/source/extended/AccessibleGridControlBase.cxx +++ b/accessibility/source/extended/AccessibleGridControlBase.cxx @@ -54,7 +54,6 @@ AccessibleGridControlBase::AccessibleGridControlBase( m_xParent( rxParent ), m_aTable( rTable), m_eObjType( eObjType ), - m_aName( rTable.GetAccessibleObjectName( eObjType, 0, 0 ) ), m_aDescription( rTable.GetAccessibleObjectDescription( eObjType ) ), m_aClientId(0) { @@ -143,7 +142,7 @@ OUString SAL_CALL AccessibleGridControlBase::getAccessibleName() SolarMutexGuard g; ensureIsAlive(); - return m_aName; + return m_aTable.GetAccessibleObjectName(m_eObjType, 0, 0); } css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL diff --git a/accessibility/source/extended/AccessibleGridControlTableCell.cxx b/accessibility/source/extended/AccessibleGridControlTableCell.cxx index cb38725dd225..a3a8afa4895a 100644 --- a/accessibility/source/extended/AccessibleGridControlTableCell.cxx +++ b/accessibility/source/extended/AccessibleGridControlTableCell.cxx @@ -59,16 +59,6 @@ namespace accessibility ,m_nRowPos( _nRowPos ) ,m_nColPos( _nColPos ) { - // set accessible name here, because for that we need the position of the cell - // and so the base class isn't capable of doing this - OUString aAccName; - if(_eType == TCTYPE_TABLECELL) - aAccName = _rTable.GetAccessibleObjectName( TCTYPE_TABLECELL, _nRowPos, _nColPos ); - else if(_eType == TCTYPE_ROWHEADERCELL) - aAccName = _rTable.GetAccessibleObjectName( TCTYPE_ROWHEADERCELL, _nRowPos, 0 ); - else if(_eType == TCTYPE_COLUMNHEADERCELL) - aAccName = _rTable.GetAccessibleObjectName( TCTYPE_COLUMNHEADERCELL, 0, _nRowPos ); - implSetName( aAccName ); } void SAL_CALL AccessibleGridControlCell::grabFocus() @@ -78,6 +68,24 @@ namespace accessibility m_aTable.GoToCell( m_nColPos, m_nRowPos ); } + OUString SAL_CALL AccessibleGridControlCell::getAccessibleName() + { + SolarMutexGuard g; + + ensureIsAlive(); + + OUString sAccName; + if (m_eObjType == TCTYPE_TABLECELL) + sAccName = m_aTable.GetAccessibleObjectName(TCTYPE_TABLECELL, m_nRowPos, m_nColPos); + else if (m_eObjType == TCTYPE_ROWHEADERCELL) + sAccName = m_aTable.GetAccessibleObjectName(TCTYPE_ROWHEADERCELL, m_nRowPos, 0); + else if (m_eObjType == TCTYPE_COLUMNHEADERCELL) + sAccName = m_aTable.GetAccessibleObjectName(TCTYPE_COLUMNHEADERCELL, 0, m_nRowPos); + else + assert(false && "Unhandled table cell type"); + return sAccName; + } + // implementation of a table cell OUString AccessibleGridControlTableCell::implGetText() { |