include/vcl/menu.hxx                                     |    3 --
 vcl/inc/accessibility/accessiblemenubasecomponent.hxx    |    2 -
 vcl/source/accessibility/accessiblemenubasecomponent.cxx |    2 -
 vcl/source/window/menu.cxx                               |   16 +++++++++------
 4 files changed, 13 insertions(+), 10 deletions(-)

New commits:
commit ba9ecfc57aa1541ac6f6f0c86a48e46532d7653e
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Tue Jul 22 16:02:51 2025 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Wed Jul 23 08:00:16 2025 +0200

    vcl a11y: Return OAccessible in Menu::GetAccessible
    
    The accessible is always an OAccessible, so always
    return that more specific type instead of the
    abstract XAccessible interface.
    
    Change-Id: Iecbc075ba757e2aeba5fee474ea10972d0ef22c6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188179
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index 3a4ef3b32faa..82e88f8af36a 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -56,7 +56,6 @@ struct SystemMenuData;
 enum class VclEventId;
 
 namespace com::sun::star::awt { class XPopupMenu; }
-namespace com::sun::star::accessibility { class XAccessible;  }
 
 namespace vcl
 {
@@ -368,7 +367,7 @@ public:
     // returns the bounding rectangle for an item at pos nItemPos
     tools::Rectangle GetBoundingRectangle( sal_uInt16 nItemPos ) const;
 
-    css::uno::Reference<css::accessibility::XAccessible> GetAccessible();
+    rtl::Reference<comphelper::OAccessible> GetAccessible();
     void SetAccessible(const rtl::Reference<comphelper::OAccessible>& 
rAccessible);
 
     // gets the activation key of the specified item
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 76dad48fc003..1b24ea96ca09 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -1310,7 +1310,7 @@ rtl::Reference<comphelper::OAccessible> 
Menu::CreateAccessible()
     return xAccessible;
 }
 
-css::uno::Reference<css::accessibility::XAccessible> Menu::GetAccessible()
+rtl::Reference<comphelper::OAccessible> Menu::GetAccessible()
 {
     // Since PopupMenu are sometimes shared by different instances of MenuBar, 
the mpAccessible member gets
     // overwritten and may contain a disposed object when the initial menubar 
gets set again. So use the
@@ -1322,12 +1322,16 @@ css::uno::Reference<css::accessibility::XAccessible> 
Menu::GetAccessible()
             sal_uInt16 nItemId = pStartedFrom->GetItemId( i );
             if ( static_cast< Menu* >( pStartedFrom->GetPopupMenu( nItemId ) ) 
== this )
             {
-                css::uno::Reference<css::accessibility::XAccessible> xParent = 
pStartedFrom->GetAccessible();
-                if ( xParent.is() )
+                rtl::Reference<comphelper::OAccessible> pParent = 
pStartedFrom->GetAccessible();
+                if (pParent.is())
                 {
-                    
css::uno::Reference<css::accessibility::XAccessibleContext> xParentContext( 
xParent->getAccessibleContext() );
-                    if (xParentContext.is())
-                        return xParentContext->getAccessibleChild( i );
+                    css::uno::Reference<css::accessibility::XAccessible> xAcc 
= pParent->getAccessibleChild(i);
+                    if (!xAcc)
+                        return {};
+
+                    rtl::Reference<comphelper::OAccessible> pAccessible = 
dynamic_cast<comphelper::OAccessible*>(xAcc.get());
+                    assert(pAccessible.is() && "Accessible is not an 
OAccessible");
+                    return pAccessible;
                 }
             }
         }
commit ab681f1922d0b043fc6544d932da4254a7113f9a
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Tue Jul 22 16:02:06 2025 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Wed Jul 23 08:00:09 2025 +0200

    vcl a11y: Return OAccessible in OAccessibleMenuBaseComponent::GetChild
    
    Change-Id: Iad66cd0269331d088f72747940c81b03859ac4cc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188178
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Jenkins

diff --git a/vcl/inc/accessibility/accessiblemenubasecomponent.hxx 
b/vcl/inc/accessibility/accessiblemenubasecomponent.hxx
index ff37c596dfcb..7eba34134d08 100644
--- a/vcl/inc/accessibility/accessiblemenubasecomponent.hxx
+++ b/vcl/inc/accessibility/accessiblemenubasecomponent.hxx
@@ -74,7 +74,7 @@ protected:
 
     sal_Int64               GetChildCount() const;
 
-    css::uno::Reference< css::accessibility::XAccessible > GetChild( sal_Int64 
i );
+    rtl::Reference<comphelper::OAccessible> GetChild(sal_Int64 i);
     css::uno::Reference< css::accessibility::XAccessible > GetChildAt( const 
css::awt::Point& rPoint );
 
     void                    InsertChild( sal_Int32 i );
diff --git a/vcl/source/accessibility/accessiblemenubasecomponent.cxx 
b/vcl/source/accessibility/accessiblemenubasecomponent.cxx
index 1d700e20b062..361106cdbb01 100644
--- a/vcl/source/accessibility/accessiblemenubasecomponent.cxx
+++ b/vcl/source/accessibility/accessiblemenubasecomponent.cxx
@@ -294,7 +294,7 @@ sal_Int64 OAccessibleMenuBaseComponent::GetChildCount() 
const
 }
 
 
-Reference< XAccessible > OAccessibleMenuBaseComponent::GetChild( sal_Int64 i )
+rtl::Reference<comphelper::OAccessible> 
OAccessibleMenuBaseComponent::GetChild( sal_Int64 i )
 {
     rtl::Reference< OAccessibleMenuItemComponent > xChild = 
m_aAccessibleChildren[i];
     if ( !xChild.is() )

Reply via email to