accessibility/inc/extended/AccessibleBrowseBox.hxx | 10 +--------- accessibility/inc/extended/AccessibleGridControl.hxx | 10 +--------- accessibility/source/helper/acc_factory.cxx | 8 ++++---- include/vcl/accessiblefactory.hxx | 5 +++-- include/vcl/accessibletable.hxx | 15 +++------------ include/vcl/accessibletableprovider.hxx | 16 +++------------- svtools/source/brwbox/brwbox3.cxx | 8 ++------ svtools/source/brwbox/brwimpl.hxx | 4 ++-- toolkit/source/controls/table/tablecontrol_impl.cxx | 14 +++++--------- toolkit/source/controls/table/tablecontrol_impl.hxx | 6 ++---- vcl/source/helper/svtaccessiblefactory.cxx | 6 ++++-- 11 files changed, 30 insertions(+), 72 deletions(-)
New commits: commit 129e395935bf7330a1fe84986dd78502af36e07e Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Aug 30 12:29:48 2023 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Aug 30 17:49:35 2023 +0200 make IAccessibleBrowseBox extend cppu::WeakImplHelper i.e. push this up from the implementation class AccessibleBrowseBoxAccess to the interface class. Which means we don't need the getMyself helper method, and make the memory management simpler. Change-Id: Icecb83834bb3f5304908bbd3682b3d2ea06dbfe0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156285 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/accessibility/inc/extended/AccessibleBrowseBox.hxx b/accessibility/inc/extended/AccessibleBrowseBox.hxx index 6605ff02be8b..b7e912df6e92 100644 --- a/accessibility/inc/extended/AccessibleBrowseBox.hxx +++ b/accessibility/inc/extended/AccessibleBrowseBox.hxx @@ -21,7 +21,6 @@ #pragma once #include <extended/AccessibleBrowseBoxBase.hxx> -#include <cppuhelper/implbase.hxx> #include <cppuhelper/weakref.hxx> #include <vcl/accessibletableprovider.hxx> #include <mutex> @@ -192,9 +191,7 @@ private: The instance holds its XAccessibleContext with a hard reference, while the context holds this instance weak. */ -class AccessibleBrowseBoxAccess final : - public cppu::WeakImplHelper<css::accessibility::XAccessible>, - public ::vcl::IAccessibleBrowseBox +class AccessibleBrowseBoxAccess final : public ::vcl::IAccessibleBrowseBox { private: std::mutex m_aMutex; @@ -221,11 +218,6 @@ private: SAL_CALL getAccessibleContext() override; // IAccessibleBrowseBox - virtual css::uno::Reference< css::accessibility::XAccessible > - getMyself() override - { - return this; - } void dispose() override; virtual bool isAlive() const override { diff --git a/accessibility/source/helper/acc_factory.cxx b/accessibility/source/helper/acc_factory.cxx index 364c8a3c8211..fb0468fe6d65 100644 --- a/accessibility/source/helper/acc_factory.cxx +++ b/accessibility/source/helper/acc_factory.cxx @@ -122,7 +122,7 @@ public: SvHeaderTabListBox& rBox ) const override; - virtual vcl::IAccessibleBrowseBox* + virtual rtl::Reference<vcl::IAccessibleBrowseBox> createAccessibleBrowseBox( const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, vcl::IAccessibleTableProvider& _rBrowseBox @@ -374,7 +374,7 @@ vcl::IAccessibleTabListBox* AccessibleFactory::createAccessibleTabListBox( return new AccessibleTabListBox( rxParent, rBox ); } -vcl::IAccessibleBrowseBox* AccessibleFactory::createAccessibleBrowseBox( +rtl::Reference<vcl::IAccessibleBrowseBox> AccessibleFactory::createAccessibleBrowseBox( const Reference< XAccessible >& _rxParent, vcl::IAccessibleTableProvider& _rBrowseBox ) const { return new AccessibleBrowseBoxAccess( _rxParent, _rBrowseBox ); diff --git a/include/vcl/accessiblefactory.hxx b/include/vcl/accessiblefactory.hxx index fe29e3b034e8..fde375c79875 100644 --- a/include/vcl/accessiblefactory.hxx +++ b/include/vcl/accessiblefactory.hxx @@ -88,7 +88,7 @@ namespace vcl SvTreeListBox& _rListBox, const css::uno::Reference< css::accessibility::XAccessible >& _xParent ) const = 0; - virtual vcl::IAccessibleBrowseBox* + virtual rtl::Reference<vcl::IAccessibleBrowseBox> createAccessibleBrowseBox( const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, vcl::IAccessibleTableProvider& _rBrowseBox diff --git a/include/vcl/accessibletableprovider.hxx b/include/vcl/accessibletableprovider.hxx index a58576031422..30eafea49646 100644 --- a/include/vcl/accessibletableprovider.hxx +++ b/include/vcl/accessibletableprovider.hxx @@ -22,8 +22,8 @@ #include <vcl/AccessibleBrowseBoxObjType.hxx> #include <vcl/window.hxx> - -namespace com::sun::star::accessibility { class XAccessible; } +#include <cppuhelper/implbase.hxx> +#include <com/sun/star/accessibility/XAccessible.hpp> namespace vcl { @@ -158,19 +158,9 @@ protected: /** interface for an implementation of a browse box's Accessible component */ -class IAccessibleBrowseBox +class IAccessibleBrowseBox : public cppu::WeakImplHelper<css::accessibility::XAccessible> { public: - /** returns the XAccessible object itself - - The reference returned here can be used to control the life time of the - IAccessibleTableImplementation object. - - The returned reference is guaranteed to not be <NULL/>. - */ - virtual css::uno::Reference< css::accessibility::XAccessible > - getMyself() = 0; - /** disposes the accessible implementation, so that it becomes defunc */ virtual void dispose() = 0; diff --git a/svtools/source/brwbox/brwbox3.cxx b/svtools/source/brwbox/brwbox3.cxx index 4a5a8531e6ac..32ab1807ac69 100644 --- a/svtools/source/brwbox/brwbox3.cxx +++ b/svtools/source/brwbox/brwbox3.cxx @@ -97,11 +97,7 @@ Reference< XAccessible > BrowseBox::CreateAccessible() } } - Reference< XAccessible > xAccessible; - if ( m_pImpl->m_pAccessible ) - xAccessible = m_pImpl->m_pAccessible->getMyself(); - - return xAccessible; + return m_pImpl->m_pAccessible; } @@ -427,7 +423,7 @@ void BrowseBox::commitBrowseBoxEvent( sal_Int16 _nEventId, const Any& _rNewValue bool BrowseBox::isAccessibleAlive( ) const { - return ( nullptr != m_pImpl->m_pAccessible ) && m_pImpl->m_pAccessible->isAlive(); + return m_pImpl->m_pAccessible && m_pImpl->m_pAccessible->isAlive(); } // IAccessibleTableProvider diff --git a/svtools/source/brwbox/brwimpl.hxx b/svtools/source/brwbox/brwimpl.hxx index e822d7ef52c2..8c7017675a3f 100644 --- a/svtools/source/brwbox/brwimpl.hxx +++ b/svtools/source/brwbox/brwimpl.hxx @@ -55,12 +55,12 @@ namespace svt public: vcl::AccessibleFactoryAccess m_aFactoryAccess; - vcl::IAccessibleBrowseBox* m_pAccessible; + rtl::Reference<vcl::IAccessibleBrowseBox> m_pAccessible; THeaderCellMap m_aColHeaderCellMap; THeaderCellMap m_aRowHeaderCellMap; public: - BrowseBoxImpl() : m_pAccessible(nullptr) + BrowseBoxImpl() { } diff --git a/vcl/source/helper/svtaccessiblefactory.cxx b/vcl/source/helper/svtaccessiblefactory.cxx index 8877457641c0..278c9552b61d 100644 --- a/vcl/source/helper/svtaccessiblefactory.cxx +++ b/vcl/source/helper/svtaccessiblefactory.cxx @@ -23,6 +23,7 @@ #include <vcl/svtaccessiblefactory.hxx> #include <vcl/accessiblefactory.hxx> #include <vcl/accessibletable.hxx> +#include <vcl/accessibletableprovider.hxx> #include <tools/svlibrary.h> #include <tools/debug.hxx> @@ -92,7 +93,7 @@ namespace vcl return nullptr; } - virtual vcl::IAccessibleBrowseBox* + virtual rtl::Reference<vcl::IAccessibleBrowseBox> createAccessibleBrowseBox( const css::uno::Reference< css::accessibility::XAccessible >& /*_rxParent*/, vcl::IAccessibleTableProvider& /*_rBrowseBox*/ commit 3c58ea89f4bbf7ec9a0ea88a8b753209ff68af64 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Aug 30 12:19:15 2023 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Aug 30 17:49:26 2023 +0200 make IAccessibleTableControl extend cppu::WeakImplHelper i.e. push this up from the implementation class AccessibleGridControlAccess to the interface class. Which means we don't need the getMyself helper method, and make the memory management simpler. Change-Id: Iced5f259638531a74ce86876d1a295e105530474 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156284 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/accessibility/inc/extended/AccessibleGridControl.hxx b/accessibility/inc/extended/AccessibleGridControl.hxx index 7df6b82c3453..a1f7815ce167 100644 --- a/accessibility/inc/extended/AccessibleGridControl.hxx +++ b/accessibility/inc/extended/AccessibleGridControl.hxx @@ -21,7 +21,6 @@ #include <extended/AccessibleGridControlBase.hxx> #include <extended/AccessibleGridControlTable.hxx> -#include <cppuhelper/implbase.hxx> #include <cppuhelper/weakref.hxx> #include <rtl/ref.hxx> #include <vcl/accessibletable.hxx> @@ -160,9 +159,7 @@ private: the context holds this instance weak.</p> */ -class AccessibleGridControlAccess final : - public ::cppu::WeakImplHelper< css::accessibility::XAccessible > - ,public ::vcl::table::IAccessibleTableControl +class AccessibleGridControlAccess final : public ::vcl::table::IAccessibleTableControl { private: css::uno::Reference< css::accessibility::XAccessible > m_xParent; @@ -186,11 +183,6 @@ private: SAL_CALL getAccessibleContext() override; // IAccessibleTable - virtual css::uno::Reference< css::accessibility::XAccessible > - getMyself() override - { - return this; - } void DisposeAccessImpl() override; virtual bool isAlive() const override { diff --git a/accessibility/source/helper/acc_factory.cxx b/accessibility/source/helper/acc_factory.cxx index 10cc27f007c6..364c8a3c8211 100644 --- a/accessibility/source/helper/acc_factory.cxx +++ b/accessibility/source/helper/acc_factory.cxx @@ -128,7 +128,7 @@ public: vcl::IAccessibleTableProvider& _rBrowseBox ) const override; - virtual IAccessibleTableControl* + virtual rtl::Reference<IAccessibleTableControl> createAccessibleTableControl( const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, IAccessibleTable& _rTable @@ -380,7 +380,7 @@ vcl::IAccessibleBrowseBox* AccessibleFactory::createAccessibleBrowseBox( return new AccessibleBrowseBoxAccess( _rxParent, _rBrowseBox ); } -IAccessibleTableControl* AccessibleFactory::createAccessibleTableControl( +rtl::Reference<IAccessibleTableControl> AccessibleFactory::createAccessibleTableControl( const Reference< XAccessible >& _rxParent, IAccessibleTable& _rTable ) const { return new AccessibleGridControlAccess( _rxParent, _rTable ); diff --git a/include/vcl/accessiblefactory.hxx b/include/vcl/accessiblefactory.hxx index a13e4dabc135..fe29e3b034e8 100644 --- a/include/vcl/accessiblefactory.hxx +++ b/include/vcl/accessiblefactory.hxx @@ -26,6 +26,7 @@ #include <salhelper/simplereferenceobject.hxx> #include <tools/gen.hxx> +#include <rtl/ref.hxx> namespace com::sun::star { namespace accessibility { @@ -92,7 +93,7 @@ namespace vcl const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, vcl::IAccessibleTableProvider& _rBrowseBox ) const = 0; - virtual table::IAccessibleTableControl* + virtual rtl::Reference<table::IAccessibleTableControl> createAccessibleTableControl( const css::uno::Reference< css::accessibility::XAccessible >& _rxParent, table::IAccessibleTable& _rTable diff --git a/include/vcl/accessibletable.hxx b/include/vcl/accessibletable.hxx index e662675c7dd1..66f5a1e5c050 100644 --- a/include/vcl/accessibletable.hxx +++ b/include/vcl/accessibletable.hxx @@ -21,10 +21,10 @@ #define INCLUDED_VCL_ACCESSIBLETABLE_HXX #include <tools/gen.hxx> - #include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <cppuhelper/implbase.hxx> -namespace com::sun::star::accessibility { class XAccessible; } namespace vcl { class Window; } namespace vcl::table @@ -108,18 +108,9 @@ protected: /** interface for an implementation of a table control's Accessible component */ -class IAccessibleTableControl +class IAccessibleTableControl : public ::cppu::WeakImplHelper< css::accessibility::XAccessible > { public: - /** returns the XAccessible object itself - - The reference returned here can be used to control the life time of the - IAccessibleTableImplementation object. - - The returned reference is guaranteed to not be <NULL/>. - */ - virtual css::uno::Reference< css::accessibility::XAccessible > - getMyself() = 0; /** disposes the accessible implementation, so that it becomes defunc */ diff --git a/toolkit/source/controls/table/tablecontrol_impl.cxx b/toolkit/source/controls/table/tablecontrol_impl.cxx index 1b9b82b2bcb3..99c7b815ca97 100644 --- a/toolkit/source/controls/table/tablecontrol_impl.cxx +++ b/toolkit/source/controls/table/tablecontrol_impl.cxx @@ -237,7 +237,6 @@ namespace svt::table ,m_pTableFunctionSet ( new TableFunctionSet( this ) ) ,m_nAnchor ( -1 ) ,m_bUpdatingColWidths ( false ) - ,m_pAccessibleTable ( nullptr ) { m_pSelEngine.reset( new SelectionEngine( m_pDataWindow.get(), m_pTableFunctionSet.get() ) ); m_pSelEngine->SetSelectionMode(SelectionMode::Single); @@ -2369,10 +2368,10 @@ namespace svt::table } - Reference< XAccessible > TableControl_Impl::getAccessible( vcl::Window& i_parentWindow ) + rtl::Reference<vcl::table::IAccessibleTableControl> TableControl_Impl::getAccessible( vcl::Window& i_parentWindow ) { - if (m_xAccessible.is()) - return m_xAccessible; + if (m_pAccessibleTable) + return m_pAccessibleTable; DBG_TESTSOLARMUTEX(); if ( m_pAccessibleTable == nullptr ) @@ -2386,9 +2385,7 @@ namespace svt::table } } - if ( m_pAccessibleTable ) - m_xAccessible = m_pAccessibleTable->getMyself(); - return m_xAccessible; + return m_pAccessibleTable; } @@ -2397,13 +2394,12 @@ namespace svt::table if ( m_pAccessibleTable ) m_pAccessibleTable->DisposeAccessImpl(); m_pAccessibleTable = nullptr; - m_xAccessible.clear(); } bool TableControl_Impl::impl_isAccessibleAlive() const { - return ( nullptr != m_pAccessibleTable ) && m_pAccessibleTable->isAlive(); + return m_pAccessibleTable && m_pAccessibleTable->isAlive(); } diff --git a/toolkit/source/controls/table/tablecontrol_impl.hxx b/toolkit/source/controls/table/tablecontrol_impl.hxx index 2a16d6231ef2..a9498958e796 100644 --- a/toolkit/source/controls/table/tablecontrol_impl.hxx +++ b/toolkit/source/controls/table/tablecontrol_impl.hxx @@ -132,9 +132,7 @@ namespace svt::table bool m_bUpdatingColWidths; vcl::AccessibleFactoryAccess m_aFactoryAccess; - vcl::table::IAccessibleTableControl* m_pAccessibleTable; - - css::uno::Reference<css::accessibility::XAccessible> m_xAccessible; + rtl::Reference<vcl::table::IAccessibleTableControl> m_pAccessibleTable; public: void setModel( const PTableModel& _pModel ); @@ -282,7 +280,7 @@ namespace svt::table tools::Rectangle calcCellRect( sal_Int32 nRow, sal_Int32 nCol ) const; // A11Y - css::uno::Reference< css::accessibility::XAccessible > + rtl::Reference<vcl::table::IAccessibleTableControl> getAccessible( vcl::Window& i_parentWindow ); void disposeAccessible(); diff --git a/vcl/source/helper/svtaccessiblefactory.cxx b/vcl/source/helper/svtaccessiblefactory.cxx index f6728732a2e7..8877457641c0 100644 --- a/vcl/source/helper/svtaccessiblefactory.cxx +++ b/vcl/source/helper/svtaccessiblefactory.cxx @@ -22,6 +22,7 @@ #include <vcl/svtaccessiblefactory.hxx> #include <vcl/accessiblefactory.hxx> +#include <vcl/accessibletable.hxx> #include <tools/svlibrary.h> #include <tools/debug.hxx> @@ -100,7 +101,7 @@ namespace vcl return nullptr; } - virtual table::IAccessibleTableControl* + virtual rtl::Reference<table::IAccessibleTableControl> createAccessibleTableControl( const css::uno::Reference< css::accessibility::XAccessible >& /*_rxParent*/, table::IAccessibleTable& /*_rTable*/