chart2/source/controller/accessibility/AccessibleBase.cxx         |  132 
+---------
 chart2/source/controller/accessibility/AccessibleChartElement.cxx |   53 ----
 chart2/source/controller/accessibility/AccessibleChartElement.hxx |   28 --
 chart2/source/controller/accessibility/AccessibleChartShape.cxx   |   48 ---
 chart2/source/controller/accessibility/AccessibleChartShape.hxx   |   20 -
 chart2/source/controller/accessibility/AccessibleChartView.cxx    |   18 -
 chart2/source/controller/inc/AccessibleBase.hxx                   |   49 ---
 chart2/source/controller/inc/AccessibleChartView.hxx              |    6 
 8 files changed, 45 insertions(+), 309 deletions(-)

New commits:
commit 9a71ceb7946e3ae4d67bfeef4ca8325c550f400a
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Mar 31 09:08:24 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Apr 1 11:19:06 2025 +0200

    chart a11y: Drop AccessibleBase::BroadcastAccEvent
    
    Use the base class's OCommonAccessibleComponent::NotifyAccessibleEvent
    directly instead.
    
    The old/new params are in reverse order
    for that one, so adjust callers accordingly.
    
    Change-Id: I8d4ef730a139366c5762836819e20d35cb2ff5a6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183536
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/chart2/source/controller/accessibility/AccessibleBase.cxx 
b/chart2/source/controller/accessibility/AccessibleBase.cxx
index c4cc7c927ed9..bd04a69afb67 100644
--- a/chart2/source/controller/accessibility/AccessibleBase.cxx
+++ b/chart2/source/controller/accessibility/AccessibleBase.cxx
@@ -112,11 +112,11 @@ bool AccessibleBase::NotifyEvent( EventType eEventType, 
const AccessibleUniqueId
             case EventType::GOT_SELECTION:
                 {
                     AddState( AccessibleStateType::SELECTED );
-                    BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, 
aSelected, aEmpty );
+                    NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, 
aEmpty, aSelected);
 
                     AddState( AccessibleStateType::FOCUSED );
                     aSelected <<= AccessibleStateType::FOCUSED;
-                    BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, 
aSelected, aEmpty );
+                    NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, 
aEmpty, aSelected);
 
                     SAL_INFO("chart2.accessibility", "Selection acquired by: " 
<< getAccessibleName());
                 }
@@ -125,11 +125,11 @@ bool AccessibleBase::NotifyEvent( EventType eEventType, 
const AccessibleUniqueId
             case EventType::LOST_SELECTION:
                 {
                     RemoveState( AccessibleStateType::SELECTED );
-                    BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, 
aEmpty, aSelected );
+                    NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, 
aSelected, aEmpty);
 
                     AddState( AccessibleStateType::FOCUSED );
                     aSelected <<= AccessibleStateType::FOCUSED;
-                    BroadcastAccEvent( AccessibleEventId::STATE_CHANGED, 
aEmpty, aSelected );
+                    NotifyAccessibleEvent(AccessibleEventId::STATE_CHANGED, 
aSelected, aEmpty);
                     SAL_INFO("chart2.accessibility", "Selection lost by: " << 
getAccessibleName());
                 }
                 break;
@@ -259,7 +259,7 @@ void AccessibleBase::AddChild( AccessibleBase * pChild  )
         aNew <<= uno::Reference<XAccessible>(xChild);
 
         aGuard.clear();
-        BroadcastAccEvent( AccessibleEventId::CHILD, aNew, aEmpty );
+        NotifyAccessibleEvent(AccessibleEventId::CHILD, aEmpty, aNew);
     }
 }
 
@@ -295,7 +295,7 @@ void AccessibleBase::RemoveChildByOId( const 
ObjectIdentifier& rOId )
         Any aEmpty, aOld;
         aOld <<= uno::Reference<XAccessible>(xChild);
 
-        BroadcastAccEvent( AccessibleEventId::CHILD, aEmpty, aOld );
+        NotifyAccessibleEvent(AccessibleEventId::CHILD, aOld, aEmpty);
     }
 
     // dispose the child
@@ -323,11 +323,6 @@ awt::Point AccessibleBase::GetUpperLeftOnScreen() const
     return aResult;
 }
 
-void AccessibleBase::BroadcastAccEvent(sal_Int16 nId, const Any& rNew, const 
Any& rOld)
-{
-    NotifyAccessibleEvent(nId, rOld, rNew);
-}
-
 void AccessibleBase::KillAllChildren()
 {
     ClearableMutexGuard aGuard( m_aMutex );
@@ -345,7 +340,7 @@ void AccessibleBase::KillAllChildren()
     for (auto const& localChild : aLocalChildList)
     {
         aOld <<= uno::Reference<XAccessible>(localChild);
-        BroadcastAccEvent( AccessibleEventId::CHILD, aEmpty, aOld );
+        NotifyAccessibleEvent(AccessibleEventId::CHILD, aOld, aEmpty);
 
         if (localChild.is())
             localChild->dispose();
@@ -360,7 +355,7 @@ void AccessibleBase::SetInfo( const AccessibleElementInfo & 
rNewInfo )
     {
         KillAllChildren();
     }
-    BroadcastAccEvent( AccessibleEventId::INVALIDATE_ALL_CHILDREN, uno::Any(), 
uno::Any());
+    NotifyAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN, 
uno::Any(), uno::Any());
 }
 
 // ________ (XComponent::dispose) ________
diff --git a/chart2/source/controller/inc/AccessibleBase.hxx 
b/chart2/source/controller/inc/AccessibleBase.hxx
index cc2733ade04d..a491f98771f5 100644
--- a/chart2/source/controller/inc/AccessibleBase.hxx
+++ b/chart2/source/controller/inc/AccessibleBase.hxx
@@ -168,13 +168,6 @@ protected:
      */
     virtual css::awt::Point   GetUpperLeftOnScreen() const;
 
-    /** This method creates an AccessibleEventObject and sends it to all
-        listeners that are currently listening to this object
-     */
-    void         BroadcastAccEvent( sal_Int16 nId,
-                                    const css::uno::Any & rNew,
-                                    const css::uno::Any & rOld );
-
     /** Removes all children from the internal lists and broadcasts child 
remove
         events.
 
commit 0191439627ee5ec4f692e60b25501fa40f9ea91e
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Mar 31 09:03:00 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Apr 1 11:19:00 2025 +0200

    chart a11y: Use OAccessibleExtendedComponentHelper
    
    Let chart's AccessibleBase derive from
    OAccessibleExtendedComponentHelper to make use of the
    logic already implemented there instead of having to
    implement all the XAccessible(Extended)Component
    and XAccessibleEventBroadcaster methods manually.
    
    AccessibleBase::getBounds implements what is needed
    to implement OAccessibleExtendedComponentHelper::implGetBounds,
    so rename the method.
    
    Drop all of the other overrides that are no longer
    needed as the implementation is now provided by
    the base class.
    
    Adjust subclasses as well to deduplicate logic there, too.
    
    No change in behavior intended or observed initially
    when testing this with Accerciser and Orca and the gtk3 and qt6
    VCL plugins for a chart inserted in Writer ("Insert" -> "Chart").
    
    Change-Id: I5d29c099dc31d70711f4017e52a0859f22c5aa23
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183524
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/chart2/source/controller/accessibility/AccessibleBase.cxx 
b/chart2/source/controller/accessibility/AccessibleBase.cxx
index 99571b419b19..c4cc7c927ed9 100644
--- a/chart2/source/controller/accessibility/AccessibleBase.cxx
+++ b/chart2/source/controller/accessibility/AccessibleBase.cxx
@@ -66,11 +66,9 @@ AccessibleBase::AccessibleBase(
     AccessibleElementInfo aAccInfo,
     bool bMayHaveChildren,
     bool bAlwaysTransparent /* default: false */ ) :
-        impl::AccessibleBase_Base( m_aMutex ),
         m_bIsDisposed( false ),
         m_bMayHaveChildren( bMayHaveChildren ),
         m_bChildrenInitialized( false ),
-        m_nEventNotifierId(0),
         m_nStateSet( 0 ),
         m_aAccInfo(std::move( aAccInfo )),
         m_bAlwaysTransparent( bAlwaysTransparent ),
@@ -327,19 +325,7 @@ awt::Point AccessibleBase::GetUpperLeftOnScreen() const
 
 void AccessibleBase::BroadcastAccEvent(sal_Int16 nId, const Any& rNew, const 
Any& rOld)
 {
-    ClearableMutexGuard aGuard( m_aMutex );
-
-    if ( !m_nEventNotifierId )
-        return;
-        // if we don't have a client id for the notifier, then we don't have 
listeners, then
-        // we don't need to notify anything
-
-    const AccessibleEventObject aEvent(static_cast<uno::XWeak*>(this), nId, 
rNew, rOld, -1);
-
-    // let the notifier handle this event
-    ::comphelper::AccessibleEventNotifier::addEvent( m_nEventNotifierId, 
aEvent );
-
-    aGuard.clear();
+    NotifyAccessibleEvent(nId, rOld, rNew);
 }
 
 void AccessibleBase::KillAllChildren()
@@ -384,13 +370,7 @@ void SAL_CALL AccessibleBase::disposing()
         MutexGuard aGuard(m_aMutex);
         OSL_ENSURE(!m_bIsDisposed, "dispose() called twice");
 
-        // notify disposing to all AccessibleEvent listeners asynchronous
-        if (m_nEventNotifierId)
-        {
-            
::comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing(m_nEventNotifierId,
-                                                                               
*this);
-            m_nEventNotifierId = 0;
-        }
+        OAccessibleExtendedComponentHelper::disposing();
 
         // reset pointers
         m_aAccInfo.m_pWindow.clear();
@@ -542,25 +522,12 @@ lang::Locale SAL_CALL AccessibleBase::getLocale()
 }
 
 // ________ AccessibleBase::XAccessibleComponent ________
-sal_Bool SAL_CALL AccessibleBase::containsPoint( const awt::Point& aPoint )
-{
-    awt::Rectangle aRect( getBounds() );
-
-    // contains() works with relative coordinates
-    aRect.X = 0;
-    aRect.Y = 0;
-
-    return ( aPoint.X >= aRect.X &&
-             aPoint.Y >= aRect.Y &&
-             aPoint.X < (aRect.X + aRect.Width) &&
-             aPoint.Y < (aRect.Y + aRect.Height) );
-}
 
 Reference< XAccessible > SAL_CALL AccessibleBase::getAccessibleAtPoint( const 
awt::Point& aPoint )
 {
     CheckDisposeState();
     rtl::Reference< AccessibleBase > aResult;
-    awt::Rectangle aRect( getBounds());
+    awt::Rectangle aRect( implGetBounds());
 
     // children are positioned relative to this object, so translate bound rect
     aRect.X = 0;
@@ -578,7 +545,7 @@ Reference< XAccessible > SAL_CALL 
AccessibleBase::getAccessibleAtPoint( const aw
         {
             if (xLocalChild.is())
             {
-                aRect = xLocalChild->getBounds();
+                aRect = xLocalChild->implGetBounds();
                 if( ( aRect.X <= aPoint.X && aPoint.X <= (aRect.X + 
aRect.Width) ) &&
                     ( aRect.Y <= aPoint.Y && aPoint.Y <= (aRect.Y + 
aRect.Height)))
                 {
@@ -592,7 +559,7 @@ Reference< XAccessible > SAL_CALL 
AccessibleBase::getAccessibleAtPoint( const aw
     return aResult;
 }
 
-awt::Rectangle SAL_CALL AccessibleBase::getBounds()
+css::awt::Rectangle AccessibleBase::implGetBounds()
 {
     rtl::Reference<ChartView> pChartView = m_aAccInfo.m_xView.get();
     if( pChartView )
@@ -626,36 +593,6 @@ awt::Rectangle SAL_CALL AccessibleBase::getBounds()
     return awt::Rectangle();
 }
 
-awt::Point SAL_CALL AccessibleBase::getLocation()
-{
-    CheckDisposeState();
-    awt::Rectangle aBBox( getBounds() );
-    return awt::Point( aBBox.X, aBBox.Y );
-}
-
-awt::Point SAL_CALL AccessibleBase::getLocationOnScreen()
-{
-    CheckDisposeState();
-
-    if (AccessibleBase* pParent = m_aAccInfo.m_pParent)
-    {
-        awt::Point aLocThisRel( getLocation());
-        awt::Point aUpperLeft(pParent->getLocationOnScreen());
-
-        return  awt::Point( aUpperLeft.X + aLocThisRel.X,
-                            aUpperLeft.Y + aLocThisRel.Y );
-    }
-    else
-        return getLocation();
-}
-
-awt::Size SAL_CALL AccessibleBase::getSize()
-{
-    CheckDisposeState();
-    awt::Rectangle aBBox( getBounds() );
-    return awt::Size( aBBox.Width, aBBox.Height );
-}
-
 void SAL_CALL AccessibleBase::grabFocus()
 {
     CheckDisposeState();
@@ -798,36 +735,6 @@ uno::Sequence< OUString > SAL_CALL 
AccessibleBase::getSupportedServiceNames()
     };
 }
 
-// ________ XAccessibleEventBroadcasters ________
-void SAL_CALL AccessibleBase::addAccessibleEventListener( const Reference< 
XAccessibleEventListener >& xListener )
-{
-    MutexGuard aGuard( m_aMutex );
-
-    if ( xListener.is() )
-    {
-        if ( !m_nEventNotifierId )
-            m_nEventNotifierId = 
::comphelper::AccessibleEventNotifier::registerClient();
-
-        ::comphelper::AccessibleEventNotifier::addEventListener( 
m_nEventNotifierId, xListener );
-    }
-}
-
-void SAL_CALL AccessibleBase::removeAccessibleEventListener( const Reference< 
XAccessibleEventListener >& xListener )
-{
-    MutexGuard aGuard( m_aMutex );
-
-    if ( xListener.is() && m_nEventNotifierId)
-    {
-        sal_Int32 nListenerCount = 
::comphelper::AccessibleEventNotifier::removeEventListener( m_nEventNotifierId, 
xListener );
-        if ( !nListenerCount )
-        {
-            // no listeners anymore
-            ::comphelper::AccessibleEventNotifier::revokeClient( 
m_nEventNotifierId );
-            m_nEventNotifierId = 0;
-        }
-    }
-}
-
 } // namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.cxx 
b/chart2/source/controller/accessibility/AccessibleChartShape.cxx
index 0c366b4c6899..f415748323ea 100644
--- a/chart2/source/controller/accessibility/AccessibleChartShape.cxx
+++ b/chart2/source/controller/accessibility/AccessibleChartShape.cxx
@@ -129,15 +129,6 @@ OUString AccessibleChartShape::getAccessibleName()
 }
 
 // ________ XAccessibleComponent ________
-sal_Bool AccessibleChartShape::containsPoint( const awt::Point& aPoint )
-{
-    bool bReturn = false;
-    if ( m_pAccShape.is() )
-    {
-        bReturn = m_pAccShape->containsPoint( aPoint );
-    }
-    return bReturn;
-}
 
 Reference< XAccessible > AccessibleChartShape::getAccessibleAtPoint( const 
awt::Point& aPoint )
 {
@@ -149,7 +140,7 @@ Reference< XAccessible > 
AccessibleChartShape::getAccessibleAtPoint( const awt::
     return xResult;
 }
 
-awt::Rectangle AccessibleChartShape::getBounds()
+awt::Rectangle AccessibleChartShape::implGetBounds()
 {
     awt::Rectangle aBounds;
     if ( m_pAccShape.is() )
@@ -159,36 +150,6 @@ awt::Rectangle AccessibleChartShape::getBounds()
     return aBounds;
 }
 
-awt::Point AccessibleChartShape::getLocation()
-{
-    awt::Point aLocation;
-    if ( m_pAccShape.is() )
-    {
-        aLocation = m_pAccShape->getLocation();
-    }
-    return aLocation;
-}
-
-awt::Point AccessibleChartShape::getLocationOnScreen()
-{
-    awt::Point aLocation;
-    if ( m_pAccShape.is() )
-    {
-        aLocation = m_pAccShape->getLocationOnScreen();
-    }
-    return aLocation;
-}
-
-awt::Size AccessibleChartShape::getSize()
-{
-    awt::Size aSize;
-    if ( m_pAccShape.is() )
-    {
-        aSize = m_pAccShape->getSize();
-    }
-    return aSize;
-}
-
 sal_Int32 AccessibleChartShape::getForeground()
 {
     sal_Int32 nColor(0);
diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.hxx 
b/chart2/source/controller/accessibility/AccessibleChartShape.hxx
index 8ae07b51a8bf..ae0e3ebe276a 100644
--- a/chart2/source/controller/accessibility/AccessibleChartShape.hxx
+++ b/chart2/source/controller/accessibility/AccessibleChartShape.hxx
@@ -48,13 +48,11 @@ public:
     virtual OUString SAL_CALL getAccessibleDescription() override;
     virtual OUString SAL_CALL getAccessibleName() override;
 
+    // OCommonAccessibleComponent
+    virtual css::awt::Rectangle implGetBounds() override;
+
     // ________ XAccessibleComponent ________
-    virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) 
override;
     virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL 
getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
-    virtual css::awt::Rectangle SAL_CALL getBounds() override;
-    virtual css::awt::Point SAL_CALL getLocation() override;
-    virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
-    virtual css::awt::Size SAL_CALL getSize() override;
     virtual sal_Int32 SAL_CALL getForeground() override;
     virtual sal_Int32 SAL_CALL getBackground() override;
 
diff --git a/chart2/source/controller/accessibility/AccessibleChartView.cxx 
b/chart2/source/controller/accessibility/AccessibleChartView.cxx
index 57d5d962cd5a..5929ce757eb7 100644
--- a/chart2/source/controller/accessibility/AccessibleChartView.cxx
+++ b/chart2/source/controller/accessibility/AccessibleChartView.cxx
@@ -119,8 +119,7 @@ sal_Int16 SAL_CALL AccessibleChartView::getAccessibleRole()
     return AccessibleRole::DOCUMENT;
 }
 
-// ________ XAccessibleComponent ________
-awt::Rectangle SAL_CALL AccessibleChartView::getBounds()
+awt::Rectangle AccessibleChartView::implGetBounds()
 {
     awt::Rectangle aResult( GetWindowPosSize());
     Reference< XAccessible > xParent( m_xParent );
@@ -137,21 +136,6 @@ awt::Rectangle SAL_CALL AccessibleChartView::getBounds()
     return aResult;
 }
 
-awt::Point SAL_CALL AccessibleChartView::getLocationOnScreen()
-{
-    awt::Rectangle aBounds( getBounds());
-    awt::Point aResult;
-    Reference< XAccessible > xParent( m_xParent );
-    if( xParent.is())
-    {
-        Reference< XAccessibleComponent > xAccComp(
-            xParent->getAccessibleContext(), uno::UNO_QUERY );
-        aResult = xAccComp->getLocationOnScreen();
-        aResult.X += aBounds.X;
-        aResult.Y += aBounds.Y;
-    }
-    return aResult;
-}
 
 void SAL_CALL AccessibleChartView::disposing()
 {
diff --git a/chart2/source/controller/inc/AccessibleBase.hxx 
b/chart2/source/controller/inc/AccessibleBase.hxx
index 71947a30d9f5..cc2733ade04d 100644
--- a/chart2/source/controller/inc/AccessibleBase.hxx
+++ b/chart2/source/controller/inc/AccessibleBase.hxx
@@ -24,9 +24,7 @@
 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
-#include <com/sun/star/accessibility/XAccessibleExtendedComponent.hpp>
-#include <comphelper/accessibleeventnotifier.hxx>
+#include <comphelper/accessiblecomponenthelper.hxx>
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/compbase.hxx>
 #include <tools/color.hxx>
@@ -73,22 +71,11 @@ struct AccessibleElementInfo
     ::accessibility::IAccessibleViewForwarder* m_pViewForwarder;
 };
 
-namespace impl
-{
-typedef ::cppu::WeakComponentImplHelper<
-        css::accessibility::XAccessible,
-        css::accessibility::XAccessibleContext,
-        css::accessibility::XAccessibleEventBroadcaster,
-        css::accessibility::XAccessibleExtendedComponent,
-        css::lang::XServiceInfo
-        > AccessibleBase_Base;
-}
-
 /** Base class for all Chart Accessibility objects
  */
-class AccessibleBase :
-    public cppu::BaseMutex,
-    public impl::AccessibleBase_Base
+class AccessibleBase
+    : public 
cppu::ImplInheritanceHelper<comphelper::OAccessibleExtendedComponentHelper,
+                                         css::accessibility::XAccessible, 
css::lang::XServiceInfo>
 {
 public:
     enum class EventType
@@ -242,15 +229,12 @@ protected:
 //     virtual OUString SAL_CALL getAccessibleDescription()
 //         throw (css::uno::RuntimeException);
 
+    // OCommonAccessibleComponent
+    virtual css::awt::Rectangle implGetBounds() override;
+
     // ________ XAccessibleComponent ________
-    virtual sal_Bool SAL_CALL containsPoint(
-        const css::awt::Point& aPoint ) override;
     virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
         getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
-    virtual css::awt::Rectangle SAL_CALL getBounds() override;
-    virtual css::awt::Point SAL_CALL getLocation() override;
-    virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
-    virtual css::awt::Size SAL_CALL getSize() override;
     virtual void SAL_CALL grabFocus() override;
     virtual sal_Int32 SAL_CALL getForeground() override;
     virtual sal_Int32 SAL_CALL getBackground() override;
@@ -265,12 +249,6 @@ protected:
         const OUString& ServiceName ) override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
-    // ________ XAccessibleEventBroadcaster ________
-    virtual void SAL_CALL addAccessibleEventListener(
-        const css::uno::Reference< 
css::accessibility::XAccessibleEventListener >& xListener ) override;
-    virtual void SAL_CALL removeAccessibleEventListener(
-        const css::uno::Reference< 
css::accessibility::XAccessibleEventListener >& xListener ) override;
-
 private:
     enum eColorType
     {
@@ -292,8 +270,6 @@ private:
 
     ChildOIDMap                           m_aChildOIDMap;
 
-    ::comphelper::AccessibleEventNotifier::TClientId      m_nEventNotifierId;
-
     /** for getAccessibleStateSet()
      */
     sal_Int64     m_nStateSet;
diff --git a/chart2/source/controller/inc/AccessibleChartView.hxx 
b/chart2/source/controller/inc/AccessibleChartView.hxx
index 6cea437d9ccf..d4c966205021 100644
--- a/chart2/source/controller/inc/AccessibleChartView.hxx
+++ b/chart2/source/controller/inc/AccessibleChartView.hxx
@@ -84,9 +84,9 @@ public:
     virtual OUString SAL_CALL getAccessibleName() override;
     virtual sal_Int16 SAL_CALL getAccessibleRole() override;
 
-    // ________ XAccessibleComponent ________
-    virtual css::awt::Rectangle SAL_CALL getBounds() override;
-    virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
+
+    // OCommonAccessibleComponent
+    virtual css::awt::Rectangle implGetBounds() override;
 
 protected:
     // ________ AccessibleChartElement ________
commit fcc01f789aabf734307e609fee62ef5037c1903a
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Mar 31 07:44:12 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Apr 1 11:18:53 2025 +0200

    chart a11y: Simplify XAccessible{,Extended}Component implementations
    
    Let the base class AccessibleBase implement
    XAccessibleExtendedComponent with default implementations
    for the methods that simply return empty strings.
    
    This simplifies the implementation in subclasses, that
    now only need to override XAccessibleComponent
    and XAccessibleExtendedComponent methods when they
    actually want to have a different behavior, not
    to avoid ambiguity due to XAccessibleComponent
    being a base class of both of their base classes
    (XAccessibleExtendedComponent, AccessibleBase).
    
    Change-Id: I2a6a39a721de19178954db898d52a2d7bc01fcb7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183523
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/chart2/source/controller/accessibility/AccessibleBase.cxx 
b/chart2/source/controller/accessibility/AccessibleBase.cxx
index 98bc1d7e1d40..99571b419b19 100644
--- a/chart2/source/controller/accessibility/AccessibleBase.cxx
+++ b/chart2/source/controller/accessibility/AccessibleBase.cxx
@@ -769,6 +769,16 @@ Color AccessibleBase::getColor( eColorType eColType )
     return nResult;
 }
 
+OUString SAL_CALL AccessibleBase::getTitledBorderText()
+{
+    return OUString();
+}
+
+OUString SAL_CALL AccessibleBase::getToolTipText()
+{
+    return OUString();
+}
+
 // ________ AccessibleBase::XServiceInfo ________
 OUString SAL_CALL AccessibleBase::getImplementationName()
 {
diff --git a/chart2/source/controller/accessibility/AccessibleChartElement.cxx 
b/chart2/source/controller/accessibility/AccessibleChartElement.cxx
index e176846b8b84..cb8ec98eff72 100644
--- a/chart2/source/controller/accessibility/AccessibleChartElement.cxx
+++ b/chart2/source/controller/accessibility/AccessibleChartElement.cxx
@@ -42,7 +42,7 @@ namespace chart
 AccessibleChartElement::AccessibleChartElement(
     const AccessibleElementInfo & rAccInfo,
     bool bMayHaveChildren ) :
-        impl::AccessibleChartElement_Base( rAccInfo, bMayHaveChildren, 
false/*bAlwaysTransparent*/ ),
+        AccessibleBase(rAccInfo, bMayHaveChildren, 
false/*bAlwaysTransparent*/),
         m_bHasText( false )
 {
     AddState( AccessibleStateType::TRANSIENT );
@@ -139,11 +139,6 @@ OUString SAL_CALL 
AccessibleChartElement::getAccessibleDescription()
 
 // ________ AccessibleChartElement::XAccessibleExtendedComponent ________
 
-OUString SAL_CALL AccessibleChartElement::getTitledBorderText()
-{
-    return OUString();
-}
-
 OUString SAL_CALL AccessibleChartElement::getToolTipText()
 {
     CheckDisposeState();
@@ -152,52 +147,6 @@ OUString SAL_CALL AccessibleChartElement::getToolTipText()
         GetInfo().m_aOID.getObjectCID(), GetInfo().m_xChartDocument );
 }
 
-// ________ XAccessibleComponent ________
-sal_Bool SAL_CALL AccessibleChartElement::containsPoint( const awt::Point& 
aPoint )
-{
-    return AccessibleBase::containsPoint( aPoint );
-}
-
-Reference< XAccessible > SAL_CALL 
AccessibleChartElement::getAccessibleAtPoint( const awt::Point& aPoint )
-{
-    return AccessibleBase::getAccessibleAtPoint( aPoint );
-}
-
-awt::Rectangle SAL_CALL AccessibleChartElement::getBounds()
-{
-    return AccessibleBase::getBounds();
-}
-
-awt::Point SAL_CALL AccessibleChartElement::getLocation()
-{
-    return AccessibleBase::getLocation();
-}
-
-awt::Point SAL_CALL AccessibleChartElement::getLocationOnScreen()
-{
-    return AccessibleBase::getLocationOnScreen();
-}
-
-awt::Size SAL_CALL AccessibleChartElement::getSize()
-{
-    return AccessibleBase::getSize();
-}
-
-void SAL_CALL AccessibleChartElement::grabFocus()
-{
-    return AccessibleBase::grabFocus();
-}
-
-sal_Int32 SAL_CALL AccessibleChartElement::getForeground()
-{
-    return AccessibleBase::getForeground();
-}
-
-sal_Int32 SAL_CALL AccessibleChartElement::getBackground()
-{
-    return AccessibleBase::getBackground();
-}
-
 } // namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/accessibility/AccessibleChartElement.hxx 
b/chart2/source/controller/accessibility/AccessibleChartElement.hxx
index a307561943fa..64b39f97b86a 100644
--- a/chart2/source/controller/accessibility/AccessibleChartElement.hxx
+++ b/chart2/source/controller/accessibility/AccessibleChartElement.hxx
@@ -19,7 +19,6 @@
 #pragma once
 
 #include <AccessibleBase.hxx>
-#include <com/sun/star/accessibility/XAccessibleExtendedComponent.hpp>
 
 namespace com::sun::star::accessibility { class XAccessible; }
 
@@ -41,16 +40,7 @@ class AccessibleTextHelper;
     </ul>
  */
 
-namespace impl
-{
-typedef ::cppu::ImplInheritanceHelper<
-        AccessibleBase,
-        css::accessibility::XAccessibleExtendedComponent
-        > AccessibleChartElement_Base;
-}
-
-class AccessibleChartElement :
-    public impl::AccessibleChartElement_Base
+class AccessibleChartElement : public AccessibleBase
 {
 public:
     AccessibleChartElement( const AccessibleElementInfo & rAccInfo,
@@ -68,24 +58,8 @@ public:
     virtual OUString SAL_CALL getAccessibleDescription() override;
 
     // ________ XAccessibleExtendedComponent ________
-    virtual OUString SAL_CALL getTitledBorderText() override;
     virtual OUString SAL_CALL getToolTipText() override;
 
-    // the following interface is implemented in AccessibleBase, however it is
-    // also a (non-virtual) base class of XAccessibleExtendedComponent Thus
-    // these methods have to be overridden and forward to AccessibleBase
-
-    // ________ XAccessibleComponent ________
-    virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) 
override;
-    virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL 
getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
-    virtual css::awt::Rectangle SAL_CALL getBounds() override;
-    virtual css::awt::Point SAL_CALL getLocation() override;
-    virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
-    virtual css::awt::Size SAL_CALL getSize() override;
-    virtual void SAL_CALL grabFocus() override;
-    virtual sal_Int32 SAL_CALL getForeground() override;
-    virtual sal_Int32 SAL_CALL getBackground() override;
-
     // ________ XServiceInfo ________
     virtual OUString SAL_CALL getImplementationName() override;
 
diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.cxx 
b/chart2/source/controller/accessibility/AccessibleChartShape.cxx
index c37580a7d2c1..0c366b4c6899 100644
--- a/chart2/source/controller/accessibility/AccessibleChartShape.cxx
+++ b/chart2/source/controller/accessibility/AccessibleChartShape.cxx
@@ -35,7 +35,7 @@ namespace chart
 
 AccessibleChartShape::AccessibleChartShape(
         const AccessibleElementInfo& rAccInfo )
-    :impl::AccessibleChartShape_Base( rAccInfo, true/*bMayHaveChildren*/, 
false/*bAlwaysTransparent*/ )
+    :AccessibleBase(rAccInfo, true/*bMayHaveChildren*/, 
false/*bAlwaysTransparent*/)
 {
     if ( !rAccInfo.m_aOID.isAdditionalShape() )
         return;
@@ -189,11 +189,6 @@ awt::Size AccessibleChartShape::getSize()
     return aSize;
 }
 
-void AccessibleChartShape::grabFocus()
-{
-    return AccessibleBase::grabFocus();
-}
-
 sal_Int32 AccessibleChartShape::getForeground()
 {
     sal_Int32 nColor(0);
diff --git a/chart2/source/controller/accessibility/AccessibleChartShape.hxx 
b/chart2/source/controller/accessibility/AccessibleChartShape.hxx
index 3f8975921e68..8ae07b51a8bf 100644
--- a/chart2/source/controller/accessibility/AccessibleChartShape.hxx
+++ b/chart2/source/controller/accessibility/AccessibleChartShape.hxx
@@ -20,7 +20,6 @@
 
 #include <AccessibleBase.hxx>
 
-#include <com/sun/star/accessibility/XAccessibleExtendedComponent.hpp>
 #include <cppuhelper/implbase.hxx>
 #include <svx/AccessibleShapeTreeInfo.hxx>
 
@@ -32,15 +31,7 @@ class AccessibleShape;
 namespace chart
 {
 
-namespace impl
-{
-typedef ::cppu::ImplInheritanceHelper<
-    AccessibleBase,
-    css::accessibility::XAccessibleExtendedComponent > 
AccessibleChartShape_Base;
-}
-
-class AccessibleChartShape :
-    public impl::AccessibleChartShape_Base
+class AccessibleChartShape : public AccessibleBase
 {
 public:
     explicit AccessibleChartShape( const AccessibleElementInfo& rAccInfo );
@@ -64,7 +55,6 @@ public:
     virtual css::awt::Point SAL_CALL getLocation() override;
     virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
     virtual css::awt::Size SAL_CALL getSize() override;
-    virtual void SAL_CALL grabFocus() override;
     virtual sal_Int32 SAL_CALL getForeground() override;
     virtual sal_Int32 SAL_CALL getBackground() override;
 
diff --git a/chart2/source/controller/inc/AccessibleBase.hxx 
b/chart2/source/controller/inc/AccessibleBase.hxx
index 2b0560b6d0b5..71947a30d9f5 100644
--- a/chart2/source/controller/inc/AccessibleBase.hxx
+++ b/chart2/source/controller/inc/AccessibleBase.hxx
@@ -25,6 +25,7 @@
 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
+#include <com/sun/star/accessibility/XAccessibleExtendedComponent.hpp>
 #include <comphelper/accessibleeventnotifier.hxx>
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/compbase.hxx>
@@ -77,8 +78,8 @@ namespace impl
 typedef ::cppu::WeakComponentImplHelper<
         css::accessibility::XAccessible,
         css::accessibility::XAccessibleContext,
-        css::accessibility::XAccessibleComponent,
         css::accessibility::XAccessibleEventBroadcaster,
+        css::accessibility::XAccessibleExtendedComponent,
         css::lang::XServiceInfo
         > AccessibleBase_Base;
 }
@@ -246,7 +247,6 @@ protected:
         const css::awt::Point& aPoint ) override;
     virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL
         getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
-    // has to be defined in derived classes
     virtual css::awt::Rectangle SAL_CALL getBounds() override;
     virtual css::awt::Point SAL_CALL getLocation() override;
     virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
@@ -255,6 +255,10 @@ protected:
     virtual sal_Int32 SAL_CALL getForeground() override;
     virtual sal_Int32 SAL_CALL getBackground() override;
 
+    // XAccessibleExtendedComponent
+    virtual OUString SAL_CALL getTitledBorderText() override;
+    virtual OUString SAL_CALL getToolTipText() override;
+
     // ________ XServiceInfo ________
     virtual OUString SAL_CALL getImplementationName() override;
     virtual sal_Bool SAL_CALL supportsService(

Reply via email to