include/toolkit/awt/vclxwindows.hxx                    |    3 --
 include/vcl/accessiblefactory.hxx                      |    6 -----
 include/vcl/toolkit/button.hxx                         |    6 +++++
 toolkit/source/awt/vclxwindows.cxx                     |   18 -----------------
 vcl/inc/accessibility/vclxaccessiblebutton.hxx         |   15 +++++++-------
 vcl/inc/accessibility/vclxaccessiblecheckbox.hxx       |   13 +++++++-----
 vcl/inc/accessibility/vclxaccessibleradiobutton.hxx    |   13 +++++++-----
 vcl/source/accessibility/acc_factory.cxx               |   15 --------------
 vcl/source/accessibility/vclxaccessiblebutton.cxx      |    7 ++++++
 vcl/source/accessibility/vclxaccessiblecheckbox.cxx    |    7 ++++++
 vcl/source/accessibility/vclxaccessibleradiobutton.cxx |    8 +++++++
 vcl/source/control/button.cxx                          |   18 +++++++++++++++++
 12 files changed, 70 insertions(+), 59 deletions(-)

New commits:
commit e59f294c0227ee1b67d22cbc34f59f182b8b3a84
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu May 22 13:27:11 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Mon May 26 07:33:09 2025 +0200

    vcl a11y: Let RadioButton create its accessible directly
    
    This is the RadioButton equivalent of
    
        Change-Id: If6fa82008f3347c4f95538ab181eaa50c7d9636b
        Author: Michael Weghorn <[email protected]>
        Date:   Thu May 22 12:30:12 2025 +0200
    
            vcl a11y: Let PushButton create its accessible directly
    
    , see that commit's message for more background.
    
    Change-Id: I0bfe50d36250074e21df42ff046a97095b198b71
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185672
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/toolkit/awt/vclxwindows.hxx 
b/include/toolkit/awt/vclxwindows.hxx
index 13bd296c0f3c..3747cff5ab14 100644
--- a/include/toolkit/awt/vclxwindows.hxx
+++ b/include/toolkit/awt/vclxwindows.hxx
@@ -192,7 +192,6 @@ private:
 
     void            ImplClickedOrToggled( bool bToggled );
     void            ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent 
) override;
-    virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
CreateAccessibleContext() override;
 
 public:
                     VCLXRadioButton();
diff --git a/include/vcl/accessiblefactory.hxx 
b/include/vcl/accessiblefactory.hxx
index beb9ee295484..27b6d35ac6ac 100644
--- a/include/vcl/accessiblefactory.hxx
+++ b/include/vcl/accessiblefactory.hxx
@@ -62,8 +62,6 @@ class VCL_DLLPUBLIC AccessibleFactory
 public:
     AccessibleFactory() = delete;
 
-    static css::uno::Reference<css::accessibility::XAccessibleContext>
-    createAccessibleContext(RadioButton* pRadioButton);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
     createAccessibleContext(ListBox* pListBox);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
diff --git a/include/vcl/toolkit/button.hxx b/include/vcl/toolkit/button.hxx
index 513321c46c0a..19dd68386bee 100644
--- a/include/vcl/toolkit/button.hxx
+++ b/include/vcl/toolkit/button.hxx
@@ -436,6 +436,8 @@ public:
     virtual         ~RadioButton() override;
     virtual void    dispose() override;
 
+    virtual css::uno::Reference<css::accessibility::XAccessible> 
CreateAccessible() override;
+
     virtual void    MouseButtonDown( const MouseEvent& rMEvt ) override;
     virtual void    Tracking( const TrackingEvent& rTEvt ) override;
     virtual void    KeyInput( const KeyEvent& rKEvt ) override;
diff --git a/toolkit/source/awt/vclxwindows.cxx 
b/toolkit/source/awt/vclxwindows.cxx
index 2247f060fb55..87a943de80da 100644
--- a/toolkit/source/awt/vclxwindows.cxx
+++ b/toolkit/source/awt/vclxwindows.cxx
@@ -1056,12 +1056,6 @@ VCLXRadioButton::VCLXRadioButton() : maItemListeners( 
*this ), maActionListeners
 {
 }
 
-css::uno::Reference< css::accessibility::XAccessibleContext > 
VCLXRadioButton::CreateAccessibleContext()
-{
-    VclPtr<RadioButton> pRadioButton = GetAs<RadioButton>();
-    return AccessibleFactory::createAccessibleContext(pRadioButton);
-}
-
 void VCLXRadioButton::dispose()
 {
     SolarMutexGuard aGuard;
diff --git a/vcl/inc/accessibility/vclxaccessibleradiobutton.hxx 
b/vcl/inc/accessibility/vclxaccessibleradiobutton.hxx
index 34158f283a82..320a2453ab5f 100644
--- a/vcl/inc/accessibility/vclxaccessibleradiobutton.hxx
+++ b/vcl/inc/accessibility/vclxaccessibleradiobutton.hxx
@@ -27,11 +27,10 @@
 #include <cppuhelper/implbase.hxx>
 #include <vcl/toolkit/button.hxx>
 
-
-class VCLXAccessibleRadioButton final : public cppu::ImplInheritanceHelper<
-                                            VCLXAccessibleTextComponent,
-                                            
css::accessibility::XAccessibleAction,
-                                            
css::accessibility::XAccessibleValue>
+class VCLXAccessibleRadioButton final
+    : public cppu::ImplInheritanceHelper<
+          VCLXAccessibleTextComponent, css::accessibility::XAccessible,
+          css::accessibility::XAccessibleAction, 
css::accessibility::XAccessibleValue>
 {
     virtual ~VCLXAccessibleRadioButton() override = default;
 
@@ -47,6 +46,10 @@ public:
     virtual OUString SAL_CALL getImplementationName() override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
+    // XAccessible
+    virtual 
css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+        SAL_CALL getAccessibleContext() override;
+
     // XAccessibleAction
     virtual sal_Int32 SAL_CALL getAccessibleActionCount( ) override;
     virtual sal_Bool SAL_CALL doAccessibleAction ( sal_Int32 nIndex ) override;
diff --git a/vcl/source/accessibility/acc_factory.cxx 
b/vcl/source/accessibility/acc_factory.cxx
index 43aad6347966..db1bbc8519d5 100644
--- a/vcl/source/accessibility/acc_factory.cxx
+++ b/vcl/source/accessibility/acc_factory.cxx
@@ -63,11 +63,6 @@ bool hasFloatingChild(vcl::Window *pWindow)
 }
 };
 
-Reference<XAccessibleContext> 
AccessibleFactory::createAccessibleContext(RadioButton* pRadioButton)
-{
-    return new VCLXAccessibleRadioButton(pRadioButton);
-}
-
 Reference< XAccessibleContext > 
AccessibleFactory::createAccessibleContext(ListBox* pListBox)
 {
     bool bIsDropDownBox = false;
diff --git a/vcl/source/accessibility/vclxaccessibleradiobutton.cxx 
b/vcl/source/accessibility/vclxaccessibleradiobutton.cxx
index 1deac0fbe3f9..20bcf81c35bc 100644
--- a/vcl/source/accessibility/vclxaccessibleradiobutton.cxx
+++ b/vcl/source/accessibility/vclxaccessibleradiobutton.cxx
@@ -117,6 +117,14 @@ Sequence< OUString > 
VCLXAccessibleRadioButton::getSupportedServiceNames()
     return { u"com.sun.star.awt.AccessibleRadioButton"_ustr };
 }
 
+// XAccessible
+
+css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+VCLXAccessibleRadioButton::getAccessibleContext()
+{
+    OExternalLockGuard aGuard(this);
+    return this;
+}
 
 // XAccessibleAction
 
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 99c675f9f250..6099686b8419 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -38,6 +38,7 @@
 
 #include <accessibility/vclxaccessiblebutton.hxx>
 #include <accessibility/vclxaccessiblecheckbox.hxx>
+#include <accessibility/vclxaccessibleradiobutton.hxx>
 #include <bitmaps.hlst>
 #include <svdata.hxx>
 #include <window.h>
@@ -2433,6 +2434,11 @@ void RadioButton::dispose()
     Button::dispose();
 }
 
+css::uno::Reference<css::accessibility::XAccessible> 
RadioButton::CreateAccessible()
+{
+    return new VCLXAccessibleRadioButton(this);
+}
+
 void RadioButton::MouseButtonDown( const MouseEvent& rMEvt )
 {
     if ( rMEvt.IsLeft() && maMouseRect.Contains( rMEvt.GetPosPixel() ) )
commit 2a87fc4d06f8f53112dce3d98d7e166a895104f8
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu May 22 13:17:01 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Mon May 26 07:33:03 2025 +0200

    vcl a11y: Let CheckBox create its accessible directly
    
    This is the CheckBox equivalent of
    
        Change-Id: If6fa82008f3347c4f95538ab181eaa50c7d9636b
        Author: Michael Weghorn <[email protected]>
        Date:   Thu May 22 12:30:12 2025 +0200
    
            vcl a11y: Let PushButton create its accessible directly
    
    , see that commit's message for more background.
    
    Change-Id: I6b6ead743cde3489935a902fed9b63d78fd642f8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185671
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/toolkit/awt/vclxwindows.hxx 
b/include/toolkit/awt/vclxwindows.hxx
index 1b12bfa9c165..13bd296c0f3c 100644
--- a/include/toolkit/awt/vclxwindows.hxx
+++ b/include/toolkit/awt/vclxwindows.hxx
@@ -143,7 +143,6 @@ private:
     ItemListenerMultiplexer     maItemListeners;
 
     void    ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 
override;
-    virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
CreateAccessibleContext() override;
 
 public:
                     VCLXCheckBox();
diff --git a/include/vcl/accessiblefactory.hxx 
b/include/vcl/accessiblefactory.hxx
index 05802a27d0d2..beb9ee295484 100644
--- a/include/vcl/accessiblefactory.hxx
+++ b/include/vcl/accessiblefactory.hxx
@@ -62,8 +62,6 @@ class VCL_DLLPUBLIC AccessibleFactory
 public:
     AccessibleFactory() = delete;
 
-    static css::uno::Reference<css::accessibility::XAccessibleContext>
-    createAccessibleContext(CheckBox* pCheckBox);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
     createAccessibleContext(RadioButton* pRadioButton);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
diff --git a/include/vcl/toolkit/button.hxx b/include/vcl/toolkit/button.hxx
index 21938f96fae1..513321c46c0a 100644
--- a/include/vcl/toolkit/button.hxx
+++ b/include/vcl/toolkit/button.hxx
@@ -330,6 +330,8 @@ public:
 public:
     explicit        CheckBox( vcl::Window* pParent, WinBits nStyle = 0 );
 
+    virtual css::uno::Reference<css::accessibility::XAccessible> 
CreateAccessible() override;
+
     virtual void    MouseButtonDown( const MouseEvent& rMEvt ) override;
     virtual void    Tracking( const TrackingEvent& rTEvt ) override;
     virtual void    KeyInput( const KeyEvent& rKEvt ) override;
diff --git a/toolkit/source/awt/vclxwindows.cxx 
b/toolkit/source/awt/vclxwindows.cxx
index d4d5e786b76c..2247f060fb55 100644
--- a/toolkit/source/awt/vclxwindows.cxx
+++ b/toolkit/source/awt/vclxwindows.cxx
@@ -777,12 +777,6 @@ VCLXCheckBox::VCLXCheckBox() :  maActionListeners( *this 
), maItemListeners( *th
 {
 }
 
-css::uno::Reference< css::accessibility::XAccessibleContext > 
VCLXCheckBox::CreateAccessibleContext()
-{
-    VclPtr<CheckBox> pCheckBox = GetAs<CheckBox>();
-    return AccessibleFactory::createAccessibleContext(pCheckBox);
-}
-
 void VCLXCheckBox::dispose()
 {
     SolarMutexGuard aGuard;
diff --git a/vcl/inc/accessibility/vclxaccessiblecheckbox.hxx 
b/vcl/inc/accessibility/vclxaccessiblecheckbox.hxx
index fa72c12f8f33..3216e131a2aa 100644
--- a/vcl/inc/accessibility/vclxaccessiblecheckbox.hxx
+++ b/vcl/inc/accessibility/vclxaccessiblecheckbox.hxx
@@ -27,11 +27,10 @@
 #include <cppuhelper/implbase.hxx>
 #include <vcl/toolkit/button.hxx>
 
-
-class VCLXAccessibleCheckBox final : public cppu::ImplInheritanceHelper<
-                                         VCLXAccessibleTextComponent,
-                                         css::accessibility::XAccessibleAction,
-                                         css::accessibility::XAccessibleValue>
+class VCLXAccessibleCheckBox final
+    : public cppu::ImplInheritanceHelper<
+          VCLXAccessibleTextComponent, css::accessibility::XAccessible,
+          css::accessibility::XAccessibleAction, 
css::accessibility::XAccessibleValue>
 {
 private:
     bool    m_bChecked;
@@ -57,6 +56,10 @@ public:
     virtual OUString SAL_CALL getImplementationName() override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
+    // XAccessible
+    virtual 
css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+        SAL_CALL getAccessibleContext() override;
+
     // XAccessibleAction
     virtual sal_Int32 SAL_CALL getAccessibleActionCount( ) override;
     virtual sal_Bool SAL_CALL doAccessibleAction ( sal_Int32 nIndex ) override;
diff --git a/vcl/source/accessibility/acc_factory.cxx 
b/vcl/source/accessibility/acc_factory.cxx
index cd6b8d6451ea..43aad6347966 100644
--- a/vcl/source/accessibility/acc_factory.cxx
+++ b/vcl/source/accessibility/acc_factory.cxx
@@ -63,11 +63,6 @@ bool hasFloatingChild(vcl::Window *pWindow)
 }
 };
 
-Reference< XAccessibleContext > 
AccessibleFactory::createAccessibleContext(CheckBox* pCheckBox)
-{
-    return new VCLXAccessibleCheckBox(pCheckBox);
-}
-
 Reference<XAccessibleContext> 
AccessibleFactory::createAccessibleContext(RadioButton* pRadioButton)
 {
     return new VCLXAccessibleRadioButton(pRadioButton);
diff --git a/vcl/source/accessibility/vclxaccessiblecheckbox.cxx 
b/vcl/source/accessibility/vclxaccessiblecheckbox.cxx
index 6066e122ecdd..9c3bca2a48ea 100644
--- a/vcl/source/accessibility/vclxaccessiblecheckbox.cxx
+++ b/vcl/source/accessibility/vclxaccessiblecheckbox.cxx
@@ -145,6 +145,13 @@ Sequence< OUString > 
VCLXAccessibleCheckBox::getSupportedServiceNames()
     return { u"com.sun.star.awt.AccessibleCheckBox"_ustr };
 }
 
+// XAccessible
+css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+VCLXAccessibleCheckBox::getAccessibleContext()
+{
+    OExternalLockGuard aGuard(this);
+    return this;
+}
 
 // XAccessibleAction
 
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 04c4a141c558..99c675f9f250 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -37,6 +37,7 @@
 #include <vcl/uitest/uiobject.hxx>
 
 #include <accessibility/vclxaccessiblebutton.hxx>
+#include <accessibility/vclxaccessiblecheckbox.hxx>
 #include <bitmaps.hlst>
 #include <svdata.hxx>
 #include <window.h>
@@ -3258,6 +3259,11 @@ CheckBox::CheckBox( vcl::Window* pParent, WinBits nStyle 
) :
     ImplInit( pParent, nStyle );
 }
 
+css::uno::Reference<css::accessibility::XAccessible> 
CheckBox::CreateAccessible()
+{
+    return new VCLXAccessibleCheckBox(this);
+}
+
 void CheckBox::MouseButtonDown( const MouseEvent& rMEvt )
 {
     if ( rMEvt.IsLeft() && maMouseRect.Contains( rMEvt.GetPosPixel() ) )
commit f82aac71ede9c3f2dc059ca4c8b24f60e0841933
Author:     Michael Weghorn <[email protected]>
AuthorDate: Thu May 22 12:30:12 2025 +0200
Commit:     Michael Weghorn <[email protected]>
CommitDate: Mon May 26 07:32:55 2025 +0200

    vcl a11y: Let PushButton create its accessible directly
    
    So far, the VCLXButton was the XAccessible implementation
    for PushButton (and subclasses), which got returned in
    Window::CreateAccessible.
    
    VCLXButton's implementation of XAccessible::getAccessibleContext
    was then responsible for creating the XAccessibleContext,
    a VCLXAccessibleButton.
    
    Drop that separation between XAccessible and XAccessibleContext,
    let VCLXAccessibleButton also implement the XAccessible interface
    itself, and override Window::CreateAccessible in
    PushButton to create the VCLXAccessibleButton directly without
    requiring the VCLXButton and AccessibleFactory for this.
    
    This is one step towards unifying the approach for all vcl::Window
    subclasses (some were already creating their accessibles
    directly), makes responsibilities clearer (currently
    shared between vcl::Window and VCLXWindow) and prepares
    for more upcoming a11y changes (towards making
    VCLXAccessibleComponent/OAccessibleComponentHelper implement both,
    XAccessible and XAccessibleContext).
    
    Similar changes for other vcl::Window subclasses will follow.
    
    Internal code previously depending on the fact that a vcl::Window's
    VCLXWindow/XWindow was its XAccessible was adjusted previously in
    commits like
    
        commit b1f3e41f1015f0166dca1382c5fa1d1223f72fb8
        Author: Michael Weghorn <[email protected]>
        Date:   Wed May 21 11:03:56 2025 +0200
    
            sw a11y test: Don't rely on XWindow being XAccessible
    
    If this commit causes any issues, there might be
    another place requiring a similar change.
    
    According to the discussion in [1], there might be third-party
    code (unrelated to a11y except for using UNO a11y API) also
    relying on the assumption that the vcl::Window's XAccessible
    is its VCLXWindow, but the UNO a11y API is an internal
    implementation detail explicitly unpublished in
    
        commit 70626249cd247d9acdad417b8eaf252bae22c059
        Date:   Thu Nov 29 00:27:03 2012 +0100
    
            API CHANGE a11y unpublishing and add/removeListener rename.
    
    and has no stability guarantuee whatsoever and is therefore
    not meant to be used by external users. If any third-party
    code was relying on this implementation detail, it should be
    ported away from relying on UNO a11y API.
    
    If there were a desperate need to still be able to
    retrieve the XAccessibleContext via the VCLXWindow/XWindow
    (at least temporarily) somehow, a (temporary) workaround
    once this commit and corresponding upcoming commits are in place
    could be to let VCLXWindow still implement the XAccessible
    interface and return the XAccessibleContext from the window's
    actual XAccessible in VLCXWindow::getAccessibleContext.
    But in my opinion, code relying on that assumption should really
    be adjusted instead, also to avoid breaking again when unpublished
    UNO a11y API changes again in the future.
    
    [1] 
https://gerrit.libreoffice.org/c/core/+/185597/comments/48aae563_7c620891
    
    Change-Id: If6fa82008f3347c4f95538ab181eaa50c7d9636b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185670
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/toolkit/awt/vclxwindows.hxx 
b/include/toolkit/awt/vclxwindows.hxx
index 317286d598e6..1b12bfa9c165 100644
--- a/include/toolkit/awt/vclxwindows.hxx
+++ b/include/toolkit/awt/vclxwindows.hxx
@@ -98,7 +98,6 @@ private:
     ItemListenerMultiplexer     maItemListeners;
 
     void            ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent 
) override;
-    virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
CreateAccessibleContext() override;
 
 public:
                     VCLXButton();
diff --git a/include/vcl/accessiblefactory.hxx 
b/include/vcl/accessiblefactory.hxx
index 71fdc103197c..05802a27d0d2 100644
--- a/include/vcl/accessiblefactory.hxx
+++ b/include/vcl/accessiblefactory.hxx
@@ -62,8 +62,6 @@ class VCL_DLLPUBLIC AccessibleFactory
 public:
     AccessibleFactory() = delete;
 
-    static css::uno::Reference<css::accessibility::XAccessibleContext>
-    createAccessibleContext(PushButton* pButton);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
     createAccessibleContext(CheckBox* pCheckBox);
     static css::uno::Reference<css::accessibility::XAccessibleContext>
diff --git a/include/vcl/toolkit/button.hxx b/include/vcl/toolkit/button.hxx
index b28cd61e376d..21938f96fae1 100644
--- a/include/vcl/toolkit/button.hxx
+++ b/include/vcl/toolkit/button.hxx
@@ -130,6 +130,8 @@ public:
 
     explicit        PushButton( vcl::Window* pParent, WinBits nStyle = 0 );
 
+    virtual css::uno::Reference<css::accessibility::XAccessible> 
CreateAccessible() override;
+
     virtual void    MouseButtonDown( const MouseEvent& rMEvt ) override;
     virtual void    Tracking( const TrackingEvent& rTEvt ) override;
     virtual void    KeyInput( const KeyEvent& rKEvt ) override;
diff --git a/toolkit/source/awt/vclxwindows.cxx 
b/toolkit/source/awt/vclxwindows.cxx
index f2c183fb846f..d4d5e786b76c 100644
--- a/toolkit/source/awt/vclxwindows.cxx
+++ b/toolkit/source/awt/vclxwindows.cxx
@@ -381,12 +381,6 @@ VCLXButton::~VCLXButton()
 {
 }
 
-css::uno::Reference< css::accessibility::XAccessibleContext > 
VCLXButton::CreateAccessibleContext()
-{
-    VclPtr<PushButton> pButton = GetAs<PushButton>();
-    return AccessibleFactory::createAccessibleContext(pButton);
-}
-
 void VCLXButton::dispose()
 {
     SolarMutexGuard aGuard;
diff --git a/vcl/inc/accessibility/vclxaccessiblebutton.hxx 
b/vcl/inc/accessibility/vclxaccessiblebutton.hxx
index 124d3ef6073d..d84845c07fae 100644
--- a/vcl/inc/accessibility/vclxaccessiblebutton.hxx
+++ b/vcl/inc/accessibility/vclxaccessiblebutton.hxx
@@ -27,13 +27,10 @@
 #include <cppuhelper/implbase.hxx>
 #include <vcl/toolkit/button.hxx>
 
-
-
-
-class VCLXAccessibleButton final : public cppu::ImplInheritanceHelper<
-                                       VCLXAccessibleTextComponent,
-                                       css::accessibility::XAccessibleAction,
-                                       css::accessibility::XAccessibleValue>
+class VCLXAccessibleButton final
+    : public cppu::ImplInheritanceHelper<
+          VCLXAccessibleTextComponent, css::accessibility::XAccessible,
+          css::accessibility::XAccessibleAction, 
css::accessibility::XAccessibleValue>
 {
     virtual ~VCLXAccessibleButton() override = default;
 
@@ -48,6 +45,10 @@ public:
     virtual OUString SAL_CALL getImplementationName() override;
     virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
 
+    // XAccessible
+    virtual 
css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+        SAL_CALL getAccessibleContext() override;
+
     // XAccessibleContext
     virtual OUString SAL_CALL getAccessibleName(  ) override;
 
diff --git a/vcl/source/accessibility/acc_factory.cxx 
b/vcl/source/accessibility/acc_factory.cxx
index 6cdac506282e..cd6b8d6451ea 100644
--- a/vcl/source/accessibility/acc_factory.cxx
+++ b/vcl/source/accessibility/acc_factory.cxx
@@ -63,11 +63,6 @@ bool hasFloatingChild(vcl::Window *pWindow)
 }
 };
 
-Reference< XAccessibleContext > 
AccessibleFactory::createAccessibleContext(PushButton* pButton)
-{
-    return new VCLXAccessibleButton(pButton);
-}
-
 Reference< XAccessibleContext > 
AccessibleFactory::createAccessibleContext(CheckBox* pCheckBox)
 {
     return new VCLXAccessibleCheckBox(pCheckBox);
diff --git a/vcl/source/accessibility/vclxaccessiblebutton.cxx 
b/vcl/source/accessibility/vclxaccessiblebutton.cxx
index b60a131ba943..d4937fd793a0 100644
--- a/vcl/source/accessibility/vclxaccessiblebutton.cxx
+++ b/vcl/source/accessibility/vclxaccessiblebutton.cxx
@@ -112,6 +112,13 @@ Sequence< OUString > 
VCLXAccessibleButton::getSupportedServiceNames()
     return { u"com.sun.star.awt.AccessibleButton"_ustr };
 }
 
+// XAccessible
+css::uno::Reference<com::sun::star::accessibility::XAccessibleContext>
+VCLXAccessibleButton::getAccessibleContext()
+{
+    OExternalLockGuard aGuard(this);
+    return this;
+}
 
 // XAccessibleContext
 
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 07e211c198df..04c4a141c558 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -36,6 +36,7 @@
 #include <vcl/stdtext.hxx>
 #include <vcl/uitest/uiobject.hxx>
 
+#include <accessibility/vclxaccessiblebutton.hxx>
 #include <bitmaps.hlst>
 #include <svdata.hxx>
 #include <window.h>
@@ -1266,6 +1267,11 @@ PushButton::PushButton( vcl::Window* pParent, WinBits 
nStyle ) :
     ImplInit( pParent, nStyle );
 }
 
+css::uno::Reference<css::accessibility::XAccessible> 
PushButton::CreateAccessible()
+{
+    return new VCLXAccessibleButton(this);
+}
+
 void PushButton::MouseButtonDown( const MouseEvent& rMEvt )
 {
     if ( !(rMEvt.IsLeft() &&

Reply via email to