accessibility/inc/extended/AccessibleGridControlBase.hxx | 14 ----- accessibility/inc/extended/AccessibleGridControlTableCell.hxx | 4 + accessibility/source/extended/AccessibleGridControlBase.cxx | 3 - accessibility/source/extended/AccessibleGridControlTableCell.cxx | 28 ++++++---- 4 files changed, 24 insertions(+), 25 deletions(-)
New commits: commit 83419f869c33d550a61d260b1b3aef6a00cefc45 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Thu Mar 3 14:49:57 2022 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Mar 4 08:05:16 2022 +0100 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.wegh...@posteo.de> 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() {