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 )

Reply via email to