toolkit/inc/controls/table/AccessibleGridControl.hxx | 84 +--------- toolkit/inc/controls/table/AccessibleGridControlTableCell.hxx | 22 -- toolkit/source/controls/table/AccessibleGridControl.cxx | 67 +------ toolkit/source/controls/table/AccessibleGridControlTableCell.cxx | 34 ---- toolkit/source/controls/table/tablecontrol_impl.cxx | 30 +-- toolkit/source/controls/table/tablecontrol_impl.hxx | 4 6 files changed, 53 insertions(+), 188 deletions(-)
New commits: commit cf8a59f258d10d1bc9b2eb27dbea91d26e2a1b84 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 28 10:55:54 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Wed Jan 29 08:25:57 2025 +0100 uno grid a11y: Use cppu::ImplInheritanceHelper Change-Id: I363a3836ee46f1243c6d61c323910bcac70c0da6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180834 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/toolkit/inc/controls/table/AccessibleGridControlTableCell.hxx b/toolkit/inc/controls/table/AccessibleGridControlTableCell.hxx index 57d5118cb87e..334b1ffdaba9 100644 --- a/toolkit/inc/controls/table/AccessibleGridControlTableCell.hxx +++ b/toolkit/inc/controls/table/AccessibleGridControlTableCell.hxx @@ -61,13 +61,12 @@ namespace accessibility AccessibleGridControlCell& operator=( const AccessibleGridControlCell& ) = delete; }; - typedef ::cppu::ImplHelper2 < css::accessibility::XAccessibleText - , css::accessibility::XAccessible - > AccessibleTextHelper_BASE; // implementation of a table cell of GridControl - class AccessibleGridControlTableCell final :public AccessibleGridControlCell - ,public AccessibleTextHelper_BASE - ,public ::comphelper::OCommonAccessibleText + class AccessibleGridControlTableCell final + : public cppu::ImplInheritanceHelper<AccessibleGridControlCell, + css::accessibility::XAccessibleText, + css::accessibility::XAccessible>, + public ::comphelper::OCommonAccessibleText { private: // OCommonAccessibleText @@ -82,17 +81,6 @@ namespace accessibility sal_Int32 _nRowId, sal_uInt16 _nColId); - // XInterface ------------------------------------------------------------- - - /** Queries for a new interface. */ - css::uno::Any SAL_CALL queryInterface( const css::uno::Type& rType ) override; - - /** Acquires the object (calls acquire() on base class). */ - virtual void SAL_CALL acquire() noexcept override; - - /** Releases the object (calls release() on base class). */ - virtual void SAL_CALL release() noexcept override; - /** @return The index of this object among the parent's children. */ virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override; diff --git a/toolkit/source/controls/table/AccessibleGridControlTableCell.cxx b/toolkit/source/controls/table/AccessibleGridControlTableCell.cxx index 0d80a6977a29..1145a79b2f7c 100644 --- a/toolkit/source/controls/table/AccessibleGridControlTableCell.cxx +++ b/toolkit/source/controls/table/AccessibleGridControlTableCell.cxx @@ -96,38 +96,14 @@ namespace accessibility nEndIndex = 0; } - AccessibleGridControlTableCell::AccessibleGridControlTableCell(const css::uno::Reference<XAccessible >& _rxParent, - svt::table::TableControl& _rTable, - sal_Int32 _nRowPos, - sal_uInt16 _nColPos) - :AccessibleGridControlCell(_rxParent, _rTable, _nRowPos, _nColPos, AccessibleTableControlObjType::TABLECELL) + AccessibleGridControlTableCell::AccessibleGridControlTableCell( + const css::uno::Reference<XAccessible>& _rxParent, svt::table::TableControl& _rTable, + sal_Int32 _nRowPos, sal_uInt16 _nColPos) + : ImplInheritanceHelper(_rxParent, _rTable, _nRowPos, _nColPos, + AccessibleTableControlObjType::TABLECELL) { } - // XInterface - - /** Queries for a new interface. */ - css::uno::Any SAL_CALL AccessibleGridControlTableCell::queryInterface( - const css::uno::Type& rType ) - { - Any aRet = AccessibleGridControlCell::queryInterface(rType); - if ( !aRet.hasValue() ) - aRet = AccessibleTextHelper_BASE::queryInterface(rType); - return aRet; - } - - /** Acquires the object (calls acquire() on base class). */ - void SAL_CALL AccessibleGridControlTableCell::acquire() noexcept - { - AccessibleGridControlCell::acquire(); - } - - /** Releases the object (calls release() on base class). */ - void SAL_CALL AccessibleGridControlTableCell::release() noexcept - { - AccessibleGridControlCell::release(); - } - css::awt::Rectangle SAL_CALL AccessibleGridControlTableCell::getCharacterBounds( sal_Int32 nIndex ) { SolarMutexGuard aSolarGuard; commit 7ebcd51ea2959c6c01ba2529a83509d3dcd04745 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 28 10:33:29 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Wed Jan 29 08:25:50 2025 +0100 uno grid a11y: Drop method only declared, but not implemented Implementation was dropped in commit ce52b490ddb7924c6b5b14fee4077182a3c7dd02 Author: Michael Weghorn <m.wegh...@posteo.de> Date: Mon Jan 27 15:13:10 2025 +0100 toolkit a11y: Simplify AccessibleGridControl::getAccessibleAtPoint Change-Id: Id6038b57648be5549645c5f77ebbfc4d387a5dd9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180833 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/toolkit/inc/controls/table/AccessibleGridControl.hxx b/toolkit/inc/controls/table/AccessibleGridControl.hxx index 8b343a3c0e59..8d7b8133eb5a 100644 --- a/toolkit/inc/controls/table/AccessibleGridControl.hxx +++ b/toolkit/inc/controls/table/AccessibleGridControl.hxx @@ -114,13 +114,6 @@ private: // internal helper methods ------------------------------------------------ - /** This method returns one of the children that are always present: - Data table, row and column header bar or corner control. - @attention This method requires locked mutex's and a living object. - @return The XAccessible interface of the specified child. */ - css::uno::Reference< css::accessibility::XAccessible > - implGetFixedChild( sal_Int64 nChildIndex ); - /** The data table child. */ rtl::Reference<AccessibleGridControlTable> m_xTable; commit 393222247a85c2621ce71986a3e8ce558da7b711 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 28 10:17:45 2025 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Wed Jan 29 08:25:42 2025 +0100 uno grid a11y: Merge AccessibleGridControl{,Access} So far, AccessibleGridControlAccess was implementing the XAccessible interface, and its XAccessible::getAccessibleContext implementation was returning a AccessibleGridControl instance that implements XAccessibleContext. Drop that separation and let AccessibleGridControl also implement the XAccessible interface directly and return itself in AccessibleGridControl::getAccessibleContext. TableControl_Impl::getAccessible now creates an AccessibleGridControl accordingly. No change in behavior intended or seen when testing with the grid in the sample doc attachment 198647 from tdf#164783 when testing with Orca and Accerciser with the gtk3 and qt6 VCL plugins. Change-Id: Iabc4cd11e7b6b6e121c65a6813a28e218c34b4e1 Change-Id: I8bfdf64f436a831251f155d0e1238e4d82d1fa58 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180832 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/toolkit/inc/controls/table/AccessibleGridControl.hxx b/toolkit/inc/controls/table/AccessibleGridControl.hxx index c1f1a649d2a3..8b343a3c0e59 100644 --- a/toolkit/inc/controls/table/AccessibleGridControl.hxx +++ b/toolkit/inc/controls/table/AccessibleGridControl.hxx @@ -32,22 +32,20 @@ namespace accessibility { /** This class represents the complete accessible Grid Control object. */ -class AccessibleGridControl final : public AccessibleGridControlBase + class AccessibleGridControl final + : public cppu::ImplInheritanceHelper<AccessibleGridControlBase, + css::accessibility::XAccessible> { - friend class AccessibleGridControlAccess; - - AccessibleGridControl( - const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, - const css::uno::Reference< css::accessibility::XAccessible >& _rxCreator, - svt::table::TableControl& _rTable - ); - virtual ~AccessibleGridControl() override = default; /** Cleans up members. */ using AccessibleGridControlBase::disposing; virtual void SAL_CALL disposing() override; + // XAccessible + virtual css::uno::Reference<css::accessibility::XAccessibleContext> + SAL_CALL getAccessibleContext() override; + // XAccessibleContext ----------------------------------------------------- /** @return The count of visible children. */ @@ -79,6 +77,10 @@ class AccessibleGridControl final : public AccessibleGridControlBase virtual OUString SAL_CALL getImplementationName() override; public: + AccessibleGridControl( + const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, + svt::table::TableControl& _rTable); + // helper functions /** commitCellEvent commit the event at all listeners of the table @@ -119,9 +121,6 @@ private: css::uno::Reference< css::accessibility::XAccessible > implGetFixedChild( sal_Int64 nChildIndex ); - /// the css::accessibility::XAccessible which created the AccessibleGridControl - css::uno::WeakReference< css::accessibility::XAccessible > m_aCreator; - /** The data table child. */ rtl::Reference<AccessibleGridControlTable> m_xTable; @@ -135,60 +134,6 @@ private: inline sal_Int64 implGetAccessibleChildCount(); }; - -/** the XAccessible which creates/returns an AccessibleGridControl - - <p>The instance holds its XAccessibleContext with a hard reference, while - the context holds this instance weak.</p> -*/ - -class AccessibleGridControlAccess final - : public cppu::WeakImplHelper<css::accessibility::XAccessible> -{ -private: - css::uno::Reference< css::accessibility::XAccessible > m_xParent; - VclPtr<svt::table::TableControl> m_xTable; - rtl::Reference<AccessibleGridControl> m_xContext; - -public: - AccessibleGridControlAccess( - css::uno::Reference< css::accessibility::XAccessible > _xParent, - svt::table::TableControl& _rTable - ); - - // XAccessible - virtual css::uno::Reference< css::accessibility::XAccessibleContext > - SAL_CALL getAccessibleContext() override; - - void DisposeAccessImpl(); - - void commitCellEvent(sal_Int16 nEventId, const css::uno::Any& rNewValue, - const css::uno::Any& rOldValue) - { - if (m_xContext.is()) - m_xContext->commitCellEvent( nEventId, rNewValue, rOldValue ); - } - - void commitTableEvent(sal_Int16 nEventId, const css::uno::Any& rNewValue, - const css::uno::Any& rOldValue) - { - if (m_xContext.is()) - m_xContext->commitTableEvent( nEventId, rNewValue, rOldValue ); - } - - void commitEvent(sal_Int16 nEventId, const css::uno::Any& rNewValue) - { - if (m_xContext.is()) - m_xContext->commitEvent( nEventId, rNewValue, css::uno::Any() ); - } - -private: - virtual ~AccessibleGridControlAccess() override; - AccessibleGridControlAccess( const AccessibleGridControlAccess& ) = delete; - AccessibleGridControlAccess& operator=( const AccessibleGridControlAccess& ) = delete; -}; - - } // namespace accessibility diff --git a/toolkit/source/controls/table/AccessibleGridControl.cxx b/toolkit/source/controls/table/AccessibleGridControl.cxx index 0e0a9dab1af5..1ae662be97d7 100644 --- a/toolkit/source/controls/table/AccessibleGridControl.cxx +++ b/toolkit/source/controls/table/AccessibleGridControl.cxx @@ -38,10 +38,9 @@ using namespace ::com::sun::star::accessibility; using namespace ::vcl; AccessibleGridControl::AccessibleGridControl( - const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, const css::uno::Reference< css::accessibility::XAccessible >& _rxCreator, - svt::table::TableControl& _rTable ) - : AccessibleGridControlBase(_rxParent, _rTable, AccessibleTableControlObjType::GRIDCONTROL), - m_aCreator(_rxCreator) + const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, + svt::table::TableControl& _rTable) + : ImplInheritanceHelper(_rxParent, _rTable, AccessibleTableControlObjType::GRIDCONTROL) { } @@ -50,8 +49,6 @@ void SAL_CALL AccessibleGridControl::disposing() { SolarMutexGuard g; - m_aCreator.clear(); - if ( m_xTable.is() ) { m_xTable->dispose(); @@ -75,6 +72,14 @@ sal_Int64 AccessibleGridControl::implGetAccessibleChildCount() return m_aTable.GetAccessibleControlCount(); } +css::uno::Reference<css::accessibility::XAccessibleContext> + SAL_CALL AccessibleGridControl::getAccessibleContext() +{ + SolarMutexGuard aSolarGuard; + ensureAlive(); + return this; +} + // css::accessibility::XAccessibleContext --------------------------------------------------------- @@ -101,8 +106,8 @@ AccessibleGridControl::getAccessibleChild( sal_Int64 nChildIndex ) { if(!m_xColumnHeaderBar.is()) { - m_xColumnHeaderBar = new AccessibleGridControlHeader(m_aCreator, m_aTable, - AccessibleTableControlObjType::COLUMNHEADERBAR); + m_xColumnHeaderBar = new AccessibleGridControlHeader( + this, m_aTable, AccessibleTableControlObjType::COLUMNHEADERBAR); } xChild = m_xColumnHeaderBar.get(); } @@ -110,8 +115,8 @@ AccessibleGridControl::getAccessibleChild( sal_Int64 nChildIndex ) { if(!m_xRowHeaderBar.is()) { - m_xRowHeaderBar = new AccessibleGridControlHeader(m_aCreator, m_aTable, - AccessibleTableControlObjType::ROWHEADERBAR); + m_xRowHeaderBar = new AccessibleGridControlHeader( + this, m_aTable, AccessibleTableControlObjType::ROWHEADERBAR); } xChild = m_xRowHeaderBar.get(); } @@ -119,7 +124,7 @@ AccessibleGridControl::getAccessibleChild( sal_Int64 nChildIndex ) { if(!m_xTable.is()) { - m_xTable = new AccessibleGridControlTable(m_aCreator, m_aTable); + m_xTable = new AccessibleGridControlTable(this, m_aTable); } xChild = m_xTable.get(); } @@ -222,46 +227,6 @@ void AccessibleGridControl::commitTableEvent(sal_Int16 _nEventId,const Any& _rNe m_xTable->commitEvent(_nEventId,_rNewValue,_rOldValue); } -// = AccessibleGridControlAccess - - -AccessibleGridControlAccess::AccessibleGridControlAccess( - css::uno::Reference<css::accessibility::XAccessible> xParent, svt::table::TableControl& rTable ) - : m_xParent(std::move( xParent )) - , m_xTable(& rTable) -{ -} - - -AccessibleGridControlAccess::~AccessibleGridControlAccess() -{ -} - - -void AccessibleGridControlAccess::DisposeAccessImpl() -{ - SolarMutexGuard g; - - m_xTable.clear(); - if (m_xContext.is()) - { - m_xContext->dispose(); - m_xContext.clear(); - } -} - - -css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL AccessibleGridControlAccess::getAccessibleContext() -{ - SolarMutexGuard g; - - if (!m_xContext.is() && m_xTable) - m_xContext = new AccessibleGridControl(m_xParent, this, *m_xTable); - - return m_xContext; -} - - } // namespace accessibility /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/toolkit/source/controls/table/tablecontrol_impl.cxx b/toolkit/source/controls/table/tablecontrol_impl.cxx index 30decac8f104..1900de551ddc 100644 --- a/toolkit/source/controls/table/tablecontrol_impl.cxx +++ b/toolkit/source/controls/table/tablecontrol_impl.cxx @@ -2268,15 +2268,15 @@ namespace svt::table void TableControl_Impl::commitCellEvent( sal_Int16 const i_eventID, const Any& i_newValue, const Any& i_oldValue ) { - if (m_pAccessibleTable) - m_pAccessibleTable->commitCellEvent( i_eventID, i_newValue, i_oldValue ); + if (m_xAccessibleTable.is()) + m_xAccessibleTable->commitCellEvent(i_eventID, i_newValue, i_oldValue); } void TableControl_Impl::commitTableEvent( sal_Int16 const i_eventID, const Any& i_newValue, const Any& i_oldValue ) { - if (m_pAccessibleTable) - m_pAccessibleTable->commitTableEvent( i_eventID, i_newValue, i_oldValue ); + if (m_xAccessibleTable.is()) + m_xAccessibleTable->commitTableEvent(i_eventID, i_newValue, i_oldValue); } @@ -2338,37 +2338,35 @@ namespace svt::table impl_ni_ScrollColumns( _pScrollbar->GetDelta() ); } - const rtl::Reference<accessibility::AccessibleGridControlAccess>& + const rtl::Reference<accessibility::AccessibleGridControl>& TableControl_Impl::getAccessible(vcl::Window& i_parentWindow) { - if (m_pAccessibleTable) - return m_pAccessibleTable; + if (m_xAccessibleTable.is()) + return m_xAccessibleTable; DBG_TESTSOLARMUTEX(); Reference<XAccessible> const xAccParent = i_parentWindow.GetAccessible(); if (xAccParent.is()) { - m_pAccessibleTable = new accessibility::AccessibleGridControlAccess( - xAccParent, m_rAntiImpl - ); + m_xAccessibleTable = new accessibility::AccessibleGridControl(xAccParent, m_rAntiImpl); } - return m_pAccessibleTable; + return m_xAccessibleTable; } void TableControl_Impl::disposeAccessible() { - if ( m_pAccessibleTable ) - m_pAccessibleTable->DisposeAccessImpl(); - m_pAccessibleTable = nullptr; + if (m_xAccessibleTable.is()) + m_xAccessibleTable->dispose(); + m_xAccessibleTable.clear(); } void TableControl_Impl::impl_commitAccessibleEvent( sal_Int16 const i_eventID, Any const & i_newValue ) { - if (m_pAccessibleTable) - m_pAccessibleTable->commitEvent( i_eventID, i_newValue ); + if (m_xAccessibleTable.is()) + m_xAccessibleTable->commitEvent(i_eventID, i_newValue, css::uno::Any()); } diff --git a/toolkit/source/controls/table/tablecontrol_impl.hxx b/toolkit/source/controls/table/tablecontrol_impl.hxx index d55591477223..13f1f244fc46 100644 --- a/toolkit/source/controls/table/tablecontrol_impl.hxx +++ b/toolkit/source/controls/table/tablecontrol_impl.hxx @@ -129,7 +129,7 @@ namespace svt::table RowPos m_nAnchor; bool m_bUpdatingColWidths; - rtl::Reference<accessibility::AccessibleGridControlAccess> m_pAccessibleTable; + rtl::Reference<accessibility::AccessibleGridControl> m_xAccessibleTable; public: void setModel( const PTableModel& _pModel ); @@ -289,7 +289,7 @@ namespace svt::table tools::Rectangle calcCellRect( sal_Int32 nRow, sal_Int32 nCol ) const; // A11Y - const rtl::Reference<accessibility::AccessibleGridControlAccess>& + const rtl::Reference<accessibility::AccessibleGridControl>& getAccessible(vcl::Window& i_parentWindow); void disposeAccessible();