basctl/source/accessibility/accessibledialogwindow.cxx | 9 +--- chart2/source/controller/main/ChartController.cxx | 6 --- include/vcl/window.hxx | 2 + sc/source/ui/view/gridwin5.cxx | 2 - sc/source/ui/view/preview.cxx | 2 - sd/source/ui/accessibility/AccessibleSlideSorterView.cxx | 6 --- sd/source/ui/view/drviews5.cxx | 2 - sd/source/ui/view/outlnvsh.cxx | 2 - svtools/source/control/accessibletabbar.cxx | 6 --- svtools/source/control/ruler.cxx | 4 -- sw/source/core/access/accdoc.cxx | 2 - vcl/source/accessibility/accessiblemenucomponent.cxx | 6 --- vcl/source/accessibility/vclxaccessiblecomponent.cxx | 6 --- vcl/source/control/ivctrl.cxx | 14 ++----- vcl/source/treelist/iconview.cxx | 11 ++--- vcl/source/treelist/svtabbx.cxx | 29 ++++----------- vcl/source/treelist/treelistbox.cxx | 16 ++------ vcl/source/window/accessibility.cxx | 8 ++++ 18 files changed, 45 insertions(+), 88 deletions(-)
New commits: commit 5ef30632ede4258f0c45194259567849cc172dab Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Mon Mar 3 17:05:16 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Mar 4 08:42:54 2025 +0100 tdf#163989 a11y: Introduce Window::GetAccessibleParent Add new method Window::GetAccessibleParent that for now uses the existing logic duplicated in multiple places to get the accessible for the window returned by `Window::GetAccessibleParentWindow()`. Deduplicate code by using the newly introduced method instead. No change in behavior intended by this change, but this also prepares for an upcoming commit that will allow explicitly setting a parent. Change-Id: I0ac5e370d34994c1ede864204d4d41019f7b9336 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182441 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/basctl/source/accessibility/accessibledialogwindow.cxx b/basctl/source/accessibility/accessibledialogwindow.cxx index d648340beb69..be36c4e4485b 100644 --- a/basctl/source/accessibility/accessibledialogwindow.cxx +++ b/basctl/source/accessibility/accessibledialogwindow.cxx @@ -566,15 +566,10 @@ Reference< XAccessible > AccessibleDialogWindow::getAccessibleParent( ) { OExternalLockGuard aGuard( this ); - Reference< XAccessible > xParent; if ( m_pDialogWindow ) - { - vcl::Window* pParent = m_pDialogWindow->GetAccessibleParentWindow(); - if ( pParent ) - xParent = pParent->GetAccessible(); - } + return m_pDialogWindow->GetAccessibleParent(); - return xParent; + return nullptr; } diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index 5c58f4a525eb..20f5a7209a18 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -1560,11 +1560,7 @@ void ChartController::impl_initializeAccessible( AccessibleChartView& rAccChartV SolarMutexGuard aGuard; auto pChartWindow(GetChartWindow()); if( pChartWindow ) - { - vcl::Window* pParentWin( pChartWindow->GetAccessibleParentWindow()); - if( pParentWin ) - xParent.set( pParentWin->GetAccessible()); - } + xParent.set(pChartWindow->GetAccessibleParent()); } rAccChartView.initialize(*this, getChartModel(), m_xChartView, xParent, m_xViewWindow); diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 27b8857887c0..38e3f0eaf9a1 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -1131,6 +1131,8 @@ public: sal_uInt16 GetAccessibleChildWindowCount(); vcl::Window* GetAccessibleChildWindow( sal_uInt16 n ); + css::uno::Reference<css::accessibility::XAccessible> GetAccessibleParent() const; + void SetAccessibleRole( sal_uInt16 nRole ); sal_uInt16 GetAccessibleRole() const; diff --git a/sc/source/ui/view/gridwin5.cxx b/sc/source/ui/view/gridwin5.cxx index 5d6a8d78bfd8..ad1987f59382 100644 --- a/sc/source/ui/view/gridwin5.cxx +++ b/sc/source/ui/view/gridwin5.cxx @@ -405,7 +405,7 @@ css::uno::Reference< css::accessibility::XAccessible > } rtl::Reference<ScAccessibleDocument> pAccessibleDocument = - new ScAccessibleDocument(GetAccessibleParentWindow()->GetAccessible(), + new ScAccessibleDocument(GetAccessibleParent(), mrViewData.GetViewShell(), eWhich); pAccessibleDocument->PreInit(); diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx index 4a96b4c61d6f..c7316a64c006 100644 --- a/sc/source/ui/view/preview.cxx +++ b/sc/source/ui/view/preview.cxx @@ -1522,7 +1522,7 @@ css::uno::Reference<css::accessibility::XAccessible> ScPreview::CreateAccessible } rtl::Reference<ScAccessibleDocumentPagePreview> pAccessible = - new ScAccessibleDocumentPagePreview( GetAccessibleParentWindow()->GetAccessible(), pViewShell ); + new ScAccessibleDocumentPagePreview(GetAccessibleParent(), pViewShell ); xAcc = pAccessible; SetAccessible(xAcc); diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx index 34a3d9413c86..6b5a89ea91ff 100644 --- a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx +++ b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx @@ -191,11 +191,7 @@ Reference<XAccessible > SAL_CALL AccessibleSlideSorterView::getAccessibleParent( Reference<XAccessible> xParent; if (mpContentWindow != nullptr) - { - vcl::Window* pParent = mpContentWindow->GetAccessibleParentWindow(); - if (pParent != nullptr) - xParent = pParent->GetAccessible(); - } + xParent = mpContentWindow->GetAccessibleParent(); return xParent; } diff --git a/sd/source/ui/view/drviews5.cxx b/sd/source/ui/view/drviews5.cxx index d240ee6a0c97..aecdd6064a18 100644 --- a/sd/source/ui/view/drviews5.cxx +++ b/sd/source/ui/view/drviews5.cxx @@ -596,7 +596,7 @@ css::uno::Reference<css::accessibility::XAccessible> pWindow, this, GetViewShellBase().GetController(), - pWindow->GetAccessibleParentWindow()->GetAccessible()); + pWindow->GetAccessibleParent()); pDocumentView->Init(); return pDocumentView; } diff --git a/sd/source/ui/view/outlnvsh.cxx b/sd/source/ui/view/outlnvsh.cxx index d2ee997ad100..87782fc5603d 100644 --- a/sd/source/ui/view/outlnvsh.cxx +++ b/sd/source/ui/view/outlnvsh.cxx @@ -1832,7 +1832,7 @@ css::uno::Reference<css::accessibility::XAccessible> pWindow, this, GetViewShell()->GetController(), - pWindow->GetAccessibleParentWindow()->GetAccessible()); + pWindow->GetAccessibleParent()); pDocumentView->Init(); return pDocumentView; } diff --git a/svtools/source/control/accessibletabbar.cxx b/svtools/source/control/accessibletabbar.cxx index 92bab62c0143..cad39ef7e4a7 100644 --- a/svtools/source/control/accessibletabbar.cxx +++ b/svtools/source/control/accessibletabbar.cxx @@ -253,11 +253,7 @@ namespace accessibility Reference< XAccessible > xParent; if ( m_pTabBar ) - { - vcl::Window* pParent = m_pTabBar->GetAccessibleParentWindow(); - if ( pParent ) - xParent = pParent->GetAccessible(); - } + xParent = m_pTabBar->GetAccessibleParent(); return xParent; } diff --git a/svtools/source/control/ruler.cxx b/svtools/source/control/ruler.cxx index 3d69a3f81a96..d33e48548f11 100644 --- a/svtools/source/control/ruler.cxx +++ b/svtools/source/control/ruler.cxx @@ -2757,9 +2757,7 @@ void Ruler::DrawTicks() uno::Reference< XAccessible > Ruler::CreateAccessible() { - vcl::Window* pParent = GetAccessibleParentWindow(); - assert(pParent && "Ruler::CreateAccessible(): No Parent!"); - uno::Reference< XAccessible > xAccParent = pParent->GetAccessible(); + uno::Reference<XAccessible> xAccParent = GetAccessibleParent(); if( xAccParent.is() ) { OUString aStr; diff --git a/sw/source/core/access/accdoc.cxx b/sw/source/core/access/accdoc.cxx index 30c2a500cad9..ab252606c9c9 100644 --- a/sw/source/core/access/accdoc.cxx +++ b/sw/source/core/access/accdoc.cxx @@ -65,7 +65,7 @@ SwAccessibleDocumentBase::SwAccessibleDocumentBase( std::shared_ptr<SwAccessibleMap> const& pMap) : SwAccessibleContext(pMap, AccessibleRole::DOCUMENT_TEXT, pMap->GetShell()->GetLayout()) - , mxParent(pMap->GetShell()->GetWin()->GetAccessibleParentWindow()->GetAccessible()) + , mxParent(pMap->GetShell()->GetWin()->GetAccessibleParent()) , mpChildWin(nullptr) { } diff --git a/vcl/source/accessibility/accessiblemenucomponent.cxx b/vcl/source/accessibility/accessiblemenucomponent.cxx index 4163d096011e..c8ca74a26292 100644 --- a/vcl/source/accessibility/accessiblemenucomponent.cxx +++ b/vcl/source/accessibility/accessiblemenucomponent.cxx @@ -151,11 +151,7 @@ Reference< XAccessible > OAccessibleMenuComponent::getAccessibleParent( ) { vcl::Window* pWindow = m_pMenu->GetWindow(); if ( pWindow ) - { - vcl::Window* pParent = pWindow->GetAccessibleParentWindow(); - if ( pParent ) - xParent = pParent->GetAccessible(); - } + xParent = pWindow->GetAccessibleParent(); } return xParent; diff --git a/vcl/source/accessibility/vclxaccessiblecomponent.cxx b/vcl/source/accessibility/vclxaccessiblecomponent.cxx index f624af50cccc..f16a06a3c569 100644 --- a/vcl/source/accessibility/vclxaccessiblecomponent.cxx +++ b/vcl/source/accessibility/vclxaccessiblecomponent.cxx @@ -538,11 +538,7 @@ uno::Reference< accessibility::XAccessible > VCLXAccessibleComponent::getAccessi uno::Reference< accessibility::XAccessible > xAcc; if ( GetWindow() ) - { - vcl::Window* pParent = GetWindow()->GetAccessibleParentWindow(); - if ( pParent ) - xAcc = pParent->GetAccessible(); - } + xAcc = GetWindow()->GetAccessibleParent(); return xAcc; } diff --git a/vcl/source/control/ivctrl.cxx b/vcl/source/control/ivctrl.cxx index 383cbb31dad3..c3190c262c97 100644 --- a/vcl/source/control/ivctrl.cxx +++ b/vcl/source/control/ivctrl.cxx @@ -327,18 +327,12 @@ void SvtIconChoiceCtrl::CallImplEventListeners(VclEventId nEvent, void* pData) } css::uno::Reference< XAccessible > SvtIconChoiceCtrl::CreateAccessible() { - vcl::Window* pParent = GetAccessibleParentWindow(); - DBG_ASSERT( pParent, "SvTreeListBox::CreateAccessible - accessible parent not found" ); - css::uno::Reference< XAccessible > xAccessible; - if ( pParent ) + css::uno::Reference< XAccessible > xAccParent = GetAccessibleParent(); + if ( xAccParent.is() ) { - css::uno::Reference< XAccessible > xAccParent = pParent->GetAccessible(); - if ( xAccParent.is() ) - { - css::uno::Reference< css::awt::XVclWindowPeer > xHoldAlive(GetComponentInterface()); - xAccessible = AccessibleFactory::createAccessibleIconChoiceCtrl(*this, xAccParent); - } + css::uno::Reference< css::awt::XVclWindowPeer > xHoldAlive(GetComponentInterface()); + xAccessible = AccessibleFactory::createAccessibleIconChoiceCtrl(*this, xAccParent); } return xAccessible; } diff --git a/vcl/source/treelist/iconview.cxx b/vcl/source/treelist/iconview.cxx index 6a25976566de..93e07ae32126 100644 --- a/vcl/source/treelist/iconview.cxx +++ b/vcl/source/treelist/iconview.cxx @@ -226,14 +226,11 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, tools::Long nX, tools::Long n css::uno::Reference<css::accessibility::XAccessible> IconView::CreateAccessible() { - if (vcl::Window* pParent = GetAccessibleParentWindow()) + if (auto xAccParent = GetAccessibleParent()) { - if (auto xAccParent = pParent->GetAccessible()) - { - // need to be done here to get the vclxwindow later on in the accessible - css::uno::Reference<css::awt::XVclWindowPeer> xHoldAlive(GetComponentInterface()); - return AccessibleFactory::createAccessibleIconView(*this, xAccParent); - } + // need to be done here to get the vclxwindow later on in the accessible + css::uno::Reference<css::awt::XVclWindowPeer> xHoldAlive(GetComponentInterface()); + return AccessibleFactory::createAccessibleIconView(*this, xAccParent); } return {}; } diff --git a/vcl/source/treelist/svtabbx.cxx b/vcl/source/treelist/svtabbx.cxx index 897dd6581163..23b4dbe00864 100644 --- a/vcl/source/treelist/svtabbx.cxx +++ b/vcl/source/treelist/svtabbx.cxx @@ -627,17 +627,12 @@ IMPL_LINK_NOARG(SvHeaderTabListBox, ScrollHdl_Impl, SvTreeListBox*, void) IMPL_LINK_NOARG(SvHeaderTabListBox, CreateAccessibleHdl_Impl, HeaderBar*, void) { - vcl::Window* pParent = m_xHeaderBar->GetAccessibleParentWindow(); - DBG_ASSERT( pParent, "SvHeaderTabListBox..CreateAccessibleHdl_Impl - accessible parent not found" ); - if ( pParent ) + css::uno::Reference< XAccessible > xAccParent = m_xHeaderBar->GetAccessibleParent(); + if ( xAccParent.is() ) { - css::uno::Reference< XAccessible > xAccParent = pParent->GetAccessible(); - if ( xAccParent.is() ) - { - Reference<XAccessible> xAccessible = new AccessibleBrowseBoxHeaderBar( - xAccParent, *this, AccessibleBrowseBoxObjType::ColumnHeaderBar); - m_xHeaderBar->SetAccessible(xAccessible); - } + Reference<XAccessible> xAccessible = new AccessibleBrowseBoxHeaderBar( + xAccParent, *this, AccessibleBrowseBoxObjType::ColumnHeaderBar); + m_xHeaderBar->SetAccessible(xAccessible); } } @@ -1108,20 +1103,14 @@ vcl::Window* SvHeaderTabListBox::GetWindowInstance() Reference< XAccessible > SvHeaderTabListBox::CreateAccessible() { - vcl::Window* pParent = GetAccessibleParentWindow(); - DBG_ASSERT( pParent, "SvHeaderTabListBox::::CreateAccessible - accessible parent not found" ); - if (m_xAccessible.is()) return m_xAccessible; - if (pParent) + Reference< XAccessible > xAccParent = GetAccessibleParent(); + if ( xAccParent.is() ) { - Reference< XAccessible > xAccParent = pParent->GetAccessible(); - if ( xAccParent.is() ) - { - m_xAccessible = new AccessibleTabListBox(xAccParent, *this); - return m_xAccessible; - } + m_xAccessible = new AccessibleTabListBox(xAccParent, *this); + return m_xAccessible; } return nullptr; } diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx index 40db47113318..440e09730fc8 100644 --- a/vcl/source/treelist/treelistbox.cxx +++ b/vcl/source/treelist/treelistbox.cxx @@ -3446,19 +3446,13 @@ void SvTreeListBox::InitSettings() css::uno::Reference< XAccessible > SvTreeListBox::CreateAccessible() { - vcl::Window* pParent = GetAccessibleParentWindow(); - DBG_ASSERT( pParent, "SvTreeListBox::CreateAccessible - accessible parent not found" ); - css::uno::Reference< XAccessible > xAccessible; - if ( pParent ) + css::uno::Reference<XAccessible> xAccParent = GetAccessibleParent(); + if ( xAccParent.is() ) { - css::uno::Reference< XAccessible > xAccParent = pParent->GetAccessible(); - if ( xAccParent.is() ) - { - // need to be done here to get the vclxwindow later on in the accessible - css::uno::Reference< css::awt::XVclWindowPeer > xHoldAlive(GetComponentInterface()); - xAccessible = AccessibleFactory::createAccessibleTreeListBox( *this, xAccParent ); - } + // need to be done here to get the vclxwindow later on in the accessible + css::uno::Reference< css::awt::XVclWindowPeer > xHoldAlive(GetComponentInterface()); + xAccessible = AccessibleFactory::createAccessibleTreeListBox( *this, xAccParent ); } return xAccessible; } diff --git a/vcl/source/window/accessibility.cxx b/vcl/source/window/accessibility.cxx index 4c01650b5b58..e145b2a2cda5 100644 --- a/vcl/source/window/accessibility.cxx +++ b/vcl/source/window/accessibility.cxx @@ -215,6 +215,14 @@ vcl::Window* Window::GetAccessibleChildWindow( sal_uInt16 n ) return pChild; } +css::uno::Reference<css::accessibility::XAccessible> Window::GetAccessibleParent() const +{ + if (vcl::Window* pAccessibleParentWin = GetAccessibleParentWindow()) + return pAccessibleParentWin->GetAccessible(); + + return nullptr; +} + void Window::SetAccessibleRole( sal_uInt16 nRole ) { if ( !mpWindowImpl->mpAccessibleInfos )