accessibility/inc/extended/accessiblelistbox.hxx    |    2 -
 accessibility/source/extended/accessiblelistbox.cxx |   22 ++++++++------------
 2 files changed, 10 insertions(+), 14 deletions(-)

New commits:
commit efd357d70438b905c5349c304a43347fd293ee6a
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Wed Aug 30 11:48:58 2023 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Wed Aug 30 13:31:09 2023 +0200

    a11y: Hold focused list box entry by rtl::Reference
    
    Use an `rtl::Reference<AccessibleListBoxEntry>` for the
    currently focused entry instead of using a
    `css::uno::Reference<css::accessibility::XAccessible>`
    and casting almost every time that it's used.
    
    Change-Id: Ia3aeca18e61d82b127bf19dd0902d781168b93d0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156281
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/accessibility/inc/extended/accessiblelistbox.hxx 
b/accessibility/inc/extended/accessiblelistbox.hxx
index 5eeaf92d672c..55112facacbc 100644
--- a/accessibility/inc/extended/accessiblelistbox.hxx
+++ b/accessibility/inc/extended/accessiblelistbox.hxx
@@ -105,7 +105,7 @@ namespace accessibility
         typedef std::unordered_map<SvTreeListEntry*, 
rtl::Reference<AccessibleListBoxEntry>> MAP_ENTRY;
         MAP_ENTRY m_mapEntry;
 
-        css::uno::Reference< css::accessibility::XAccessible > m_xFocusedChild;
+        rtl::Reference<AccessibleListBoxEntry> m_xFocusedEntry;
 
         accessibility::AccessibleListBoxEntry* GetCurEventEntry( const 
VclWindowEvent& rVclWindowEvent );
 
diff --git a/accessibility/source/extended/accessiblelistbox.cxx 
b/accessibility/source/extended/accessiblelistbox.cxx
index f0651f05354f..31330c845448 100644
--- a/accessibility/source/extended/accessiblelistbox.cxx
+++ b/accessibility/source/extended/accessiblelistbox.cxx
@@ -102,10 +102,9 @@ namespace accessibility
             {
                 if ( getListBox() && getListBox()->HasFocus() )
                 {
-                    AccessibleListBoxEntry* pEntry =static_cast< 
AccessibleListBoxEntry* >(m_xFocusedChild.get());
-                    if (pEntry)
+                    if (m_xFocusedEntry.is())
                     {
-                        pEntry->NotifyAccessibleEvent( 
AccessibleEventId::SELECTION_CHANGED, Any(), Any() );
+                        
m_xFocusedEntry->NotifyAccessibleEvent(AccessibleEventId::SELECTION_CHANGED, 
Any(), Any());
                     }
                 }
             }
@@ -119,20 +118,18 @@ namespace accessibility
                     SvTreeListEntry* pEntry = static_cast< SvTreeListEntry* >( 
rVclWindowEvent.GetData() );
                     if ( pEntry )
                     {
-                        AccessibleListBoxEntry* pEntryFocus =static_cast< 
AccessibleListBoxEntry* >(m_xFocusedChild.get());
-                        if (pEntryFocus && pEntryFocus->GetSvLBoxEntry() == 
pEntry)
+                        if (m_xFocusedEntry.is() && 
m_xFocusedEntry->GetSvLBoxEntry() == pEntry)
                         {
-                            aNewValue <<= m_xFocusedChild;
+                            aNewValue <<= 
uno::Reference<XAccessible>(m_xFocusedEntry);;
                             NotifyAccessibleEvent( 
AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), aNewValue );
                             return ;
                         }
-
                         uno::Any aOldValue;
-                        aOldValue <<= m_xFocusedChild;
+                        aOldValue <<= 
uno::Reference<XAccessible>(m_xFocusedEntry);;
 
-                        m_xFocusedChild.set(implGetAccessible(*pEntry));
+                        m_xFocusedEntry = implGetAccessible(*pEntry);
 
-                        aNewValue <<= m_xFocusedChild;
+                        aNewValue <<= 
uno::Reference<XAccessible>(m_xFocusedEntry);
                         NotifyAccessibleEvent( 
AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldValue, aNewValue );
                     }
                     else
@@ -202,8 +199,7 @@ namespace accessibility
         if ( !pEntry )
             pEntry = getListBox()->GetCurEntry();
 
-        AccessibleListBoxEntry* pEntryFocus =static_cast< 
AccessibleListBoxEntry* >(m_xFocusedChild.get());
-        if (pEntryFocus && pEntry && pEntry != pEntryFocus->GetSvLBoxEntry())
+        if (m_xFocusedEntry.is() && pEntry && pEntry != 
m_xFocusedEntry->GetSvLBoxEntry())
         {
             AccessibleListBoxEntry *const pAccCurOptionEntry = 
implGetAccessible(*pEntry).get();
             uno::Any aNewValue;
@@ -214,7 +210,7 @@ namespace accessibility
         }
         else
         {
-            return pEntryFocus;
+            return m_xFocusedEntry.get();
         }
     }
 

Reply via email to