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()
     {

Reply via email to