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();