basctl/source/basicide/baside2.hxx                 |    2 
 basctl/source/basicide/baside2b.cxx                |   47 ++-------------------
 basctl/source/basicide/textwindowaccessibility.cxx |   14 +++---
 basctl/source/basicide/textwindowaccessibility.hxx |    8 ++-
 4 files changed, 20 insertions(+), 51 deletions(-)

New commits:
commit 92df695bf523a9e34b40811208c30affe4455342
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Wed Apr 30 16:27:55 2025 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Thu May 1 09:52:49 2025 +0200

    basicide a11y: Let Document implement XAccessible, drop TextWindowPeer
    
    No longer have TextWindowPeer as a custom VCLXWindow
    subclass that gets returned in
    EditorWindow::GetComponentInterface (called via
    vcl::Window::CreateAccessible) and is then responsible for
    creating an accessibility::Document object for its XAccessibleContext.
    
    Instead, let the Document class which already implements
    the XAccessibleContext interface also implement the
    XAccessible interface (and return self in its
    XAccessible::getAccessibleContext implementation)
    and create the new class when an XAccessible is
    requested via EditorWindow::CreateAccessible, i.e.
    override vcl::Window::CreateAccessible to avoid
    the VCLXWindow indirection altogether.
    
    No change in end user behavior expected or observed
    in a quick test with Basic IDE ("Tools" -> "Macros"
    -> "Edit Macros") when testing with Orca and Accerciser
    with the gtk3 and qt6 VCL plugins.
    
    Change-Id: Ie6f492b523dfd404c2ac7c3a149979105cc1d43f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184839
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>

diff --git a/basctl/source/basicide/baside2.hxx 
b/basctl/source/basicide/baside2.hxx
index c5b8f15aca17..060b3a7997dd 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -109,7 +109,7 @@ private:
 
     Color           m_aLineHighlightColor;
 
-    virtual css::uno::Reference< css::awt::XVclWindowPeer > 
GetComponentInterface(bool bCreate = true) override;
+    virtual css::uno::Reference<css::accessibility::XAccessible> 
CreateAccessible() override;
     CodeCompleteDataCache aCodeCompleteCache;
     VclPtr<CodeCompleteWindow> pCodeCompleteWnd;
     OUString GetActualSubName( sal_uInt32 nLine ); // gets the actual 
subroutine name according to line number
diff --git a/basctl/source/basicide/baside2b.cxx 
b/basctl/source/basicide/baside2b.cxx
index 2e5dd6c7daad..16a1e679ec5a 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -1680,35 +1680,6 @@ void BreakPointWindow::setBackgroundColor(Color aColor)
 
 namespace {
 
-class TextWindowPeer final : public VCLXWindow
-{
-public:
-    explicit TextWindowPeer(TextView& view);
-
-    TextWindowPeer(const TextWindowPeer&) = delete;
-    TextWindowPeer& operator=(const TextWindowPeer&) = delete;
-
-private:
-    virtual css::uno::Reference<css::accessibility::XAccessibleContext>
-    CreateAccessibleContext() override;
-
-    TextEngine& m_rEngine;
-    TextView& m_rView;
-};
-
-TextWindowPeer::TextWindowPeer(TextView& view)
-    : m_rEngine(*view.GetTextEngine())
-    , m_rView(view)
-{
-    SetWindow(view.GetWindow());
-}
-
-css::uno::Reference<css::accessibility::XAccessibleContext>
-TextWindowPeer::CreateAccessibleContext()
-{
-    return new ::accessibility::Document(GetWindow(), m_rEngine, m_rView);
-}
-
 struct WatchItem
 {
     OUString        maName;
@@ -2181,21 +2152,13 @@ void ComplexEditorWindow::SetLineNumberDisplay(bool b)
     Resize();
 }
 
-uno::Reference< awt::XVclWindowPeer >
-EditorWindow::GetComponentInterface(bool bCreate)
+css::uno::Reference<css::accessibility::XAccessible> 
EditorWindow::CreateAccessible()
 {
-    uno::Reference< awt::XVclWindowPeer > xPeer(
-        Window::GetComponentInterface(false));
-    if (!xPeer.is() && bCreate)
-    {
-        // Make sure edit engine and view are available:
-        if (!pEditEngine)
-            CreateEditEngine();
+    // Make sure edit engine and view are available:
+    if (!pEditEngine)
+        CreateEditEngine();
 
-        xPeer = new TextWindowPeer(*GetEditView());
-        SetComponentInterface(xPeer);
-    }
-    return xPeer;
+    return new ::accessibility::Document(this, *pEditView->GetTextEngine(), 
*pEditView);
 }
 
 static sal_uInt32 getCorrectedPropCount(SbxArray* p)
diff --git a/basctl/source/basicide/textwindowaccessibility.cxx 
b/basctl/source/basicide/textwindowaccessibility.cxx
index 633cb6c1069f..e9ee3ee30bf5 100644
--- a/basctl/source/basicide/textwindowaccessibility.cxx
+++ b/basctl/source/basicide/textwindowaccessibility.cxx
@@ -152,7 +152,7 @@ css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL
 Paragraph::getAccessibleParent()
 {
     ensureAlive();
-    return m_xDocument->getAccessible();
+    return m_xDocument;
 }
 
 // virtual
@@ -590,7 +590,7 @@ void Paragraph::implGetLineBoundary( const OUString& rText,
 
 Document::Document(vcl::Window* pWindow, ::TextEngine & rEngine,
                    ::TextView & rView)
-    : VCLXAccessibleComponent(pWindow),
+    : ImplInheritanceHelper(pWindow),
     m_rEngine(rEngine),
     m_rView(rView),
     m_aEngineListener(*this),
@@ -615,11 +615,13 @@ Document::Document(vcl::Window* pWindow, ::TextEngine & 
rEngine,
     m_aViewListener.startListening(*m_rView.GetWindow());
 }
 
-css::uno::Reference<css::accessibility::XAccessible> Document::getAccessible() 
const
+css::uno::Reference<css::accessibility::XAccessibleContext>
+    SAL_CALL Document::getAccessibleContext()
 {
-    if (vcl::Window* pWindow = GetWindow())
-        return pWindow->GetAccessible();
-    return nullptr;
+    SolarMutexGuard aGuard;
+    ensureAlive();
+
+    return this;
 }
 
 css::lang::Locale Document::retrieveLocale()
diff --git a/basctl/source/basicide/textwindowaccessibility.hxx 
b/basctl/source/basicide/textwindowaccessibility.hxx
index 7ee39ce81545..0f9ffd26a514 100644
--- a/basctl/source/basicide/textwindowaccessibility.hxx
+++ b/basctl/source/basicide/textwindowaccessibility.hxx
@@ -285,12 +285,16 @@ private:
 typedef std::unordered_map< OUString,
                          css::beans::PropertyValue > tPropValMap;
 
-class Document final : public ::VCLXAccessibleComponent, public ::SfxListener
+class Document final
+    : public cppu::ImplInheritanceHelper<VCLXAccessibleComponent, 
css::accessibility::XAccessible>,
+      public ::SfxListener
 {
 public:
     Document(vcl::Window* pWindow, ::TextEngine & rEngine, ::TextView & rView);
 
-    css::uno::Reference<css::accessibility::XAccessible> getAccessible() const;
+    // XAccessible
+    virtual css::uno::Reference<css::accessibility::XAccessibleContext>
+        SAL_CALL getAccessibleContext() override;
 
     css::lang::Locale retrieveLocale();
 

Reply via email to