From e0fce78cbf1d4da7faf2ea642b1eafb404454ecd Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Tue, 16 Jun 2026 12:04:07 +0200 Subject: [PATCH] svtools a11y: Return OAccessible in BrowseBox::getAccessible* Return the more concrete OAccessible class instead of the abstract XAccessible UNO interface. Change-Id: I6e8b74c9bc06a72ab316ba97d76172529e9ab85b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/206729 Reviewed-by: Michael Weghorn Tested-by: Jenkins --- include/svtools/brwbox.hxx | 7 ++-- svtools/source/brwbox/brwbox1.cxx | 66 ++++++++++++------------------- svtools/source/brwbox/brwbox3.cxx | 19 ++++----- 3 files changed, 39 insertions(+), 53 deletions(-) diff --git a/include/svtools/brwbox.hxx b/include/svtools/brwbox.hxx index ddd438aa54b7..5ce2ccf530cb 100644 --- a/include/svtools/brwbox.hxx +++ b/include/svtools/brwbox.hxx @@ -381,17 +381,16 @@ private: SAL_DLLPRIVATE void SetToggledSelectedColumn(sal_uInt16 _nSelectedColumnId); /// @see AccessibleBrowseBox::getHeaderBar - css::uno::Reference + rtl::Reference getAccessibleHeaderBar(AccessibleBrowseBoxObjType _eObjType); - css::uno::Reference + rtl::Reference getAccessibleHeaderCell(BrowseBox::THeaderCellMap& _raHeaderCells, sal_Int32 _nPos, AccessibleBrowseBoxObjType _eType, const css::uno::Reference& _rParent); /// @see AccessibleBrowseBox::getTable - css::uno::Reference - getAccessibleTable(); + rtl::Reference getAccessibleTable(); protected: bool m_bNavigationBar; diff --git a/svtools/source/brwbox/brwbox1.cxx b/svtools/source/brwbox/brwbox1.cxx index e398a7da5e2e..b6486261ff91 100644 --- a/svtools/source/brwbox/brwbox1.cxx +++ b/svtools/source/brwbox/brwbox1.cxx @@ -824,18 +824,15 @@ void BrowseBox::RemoveColumns() // all columns should be removed, so we remove the column header bar and append it again // to avoid to notify every column remove - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(), - Any(getAccessibleHeaderBar(AccessibleBrowseBoxObjType::ColumnHeaderBar)) - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, Any(), + Any(css::uno::Reference( + getAccessibleHeaderBar(AccessibleBrowseBoxObjType::ColumnHeaderBar)))); // and now append it again - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(getAccessibleHeaderBar(AccessibleBrowseBoxObjType::ColumnHeaderBar)), - Any() - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, + Any(css::uno::Reference( + getAccessibleHeaderBar(AccessibleBrowseBoxObjType::ColumnHeaderBar))), + Any()); // notify a table model change commitTableEvent( @@ -1144,18 +1141,15 @@ void BrowseBox::Clear() if ( nOldRowCount == nRowCount ) return; - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(), - Any(getAccessibleHeaderBar( AccessibleBrowseBoxObjType::RowHeaderBar)) - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, Any(), + Any(css::uno::Reference( + getAccessibleHeaderBar(AccessibleBrowseBoxObjType::RowHeaderBar)))); // and now append it again - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(getAccessibleHeaderBar(AccessibleBrowseBoxObjType::RowHeaderBar)), - Any() - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, + Any(css::uno::Reference( + getAccessibleHeaderBar(AccessibleBrowseBoxObjType::RowHeaderBar))), + Any()); // notify a table model change commitTableEvent( @@ -1387,30 +1381,22 @@ void BrowseBox::RowRemoved( sal_Int32 nRow, sal_Int32 nNumRows, bool bDoPaint ) { // all columns should be removed, so we remove the column header bar and append it again // to avoid to notify every column remove - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(), - Any(getAccessibleHeaderBar(AccessibleBrowseBoxObjType::RowHeaderBar)) - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, Any(), + Any(css::uno::Reference(getAccessibleHeaderBar( + AccessibleBrowseBoxObjType::RowHeaderBar)))); // and now append it again - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(getAccessibleHeaderBar(AccessibleBrowseBoxObjType::RowHeaderBar)), - Any() - ); - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(), - Any(getAccessibleTable()) - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, + Any(css::uno::Reference(getAccessibleHeaderBar( + AccessibleBrowseBoxObjType::RowHeaderBar))), + Any()); + commitBrowseBoxEvent(AccessibleEventId::CHILD, Any(), + Any(css::uno::Reference(getAccessibleTable()))); // and now append it again - commitBrowseBoxEvent( - AccessibleEventId::CHILD, - Any(getAccessibleTable()), - Any() - ); + commitBrowseBoxEvent(AccessibleEventId::CHILD, + Any(css::uno::Reference(getAccessibleTable())), + Any()); } else { diff --git a/svtools/source/brwbox/brwbox3.cxx b/svtools/source/brwbox/brwbox3.cxx index e6a5508458d8..b1f6b56ef5f2 100644 --- a/svtools/source/brwbox/brwbox3.cxx +++ b/svtools/source/brwbox/brwbox3.cxx @@ -34,12 +34,12 @@ using namespace ::com::sun::star::uno; using ::com::sun::star::accessibility::XAccessible; using namespace ::com::sun::star::accessibility; -Reference BrowseBox::getAccessibleHeaderCell(BrowseBox::THeaderCellMap& _raHeaderCells, - sal_Int32 _nPos, - AccessibleBrowseBoxObjType _eType, - const Reference& _rParent) +rtl::Reference +BrowseBox::getAccessibleHeaderCell(BrowseBox::THeaderCellMap& _raHeaderCells, sal_Int32 _nPos, + AccessibleBrowseBoxObjType _eType, + const Reference& _rParent) { - Reference xRet; + rtl::Reference pRet; BrowseBox::THeaderCellMap::iterator aFind = _raHeaderCells.find(_nPos); if (aFind == _raHeaderCells.end()) { @@ -48,18 +48,19 @@ Reference BrowseBox::getAccessibleHeaderCell(BrowseBox::THeaderCell aFind = _raHeaderCells.emplace(_nPos, pAccessible).first; } if (aFind != _raHeaderCells.end()) - xRet = aFind->second; - return xRet; + pRet = aFind->second; + return pRet; } -Reference BrowseBox::getAccessibleHeaderBar(AccessibleBrowseBoxObjType _eObjType) +rtl::Reference +BrowseBox::getAccessibleHeaderBar(AccessibleBrowseBoxObjType _eObjType) { if (m_xAccessible && m_xAccessible->isAlive()) return m_xAccessible->getHeaderBar(_eObjType); return nullptr; } -Reference BrowseBox::getAccessibleTable() +rtl::Reference BrowseBox::getAccessibleTable() { if (m_xAccessible && m_xAccessible->isAlive()) return m_xAccessible->getTable();