vcl/source/components/dtranscomp.cxx | 51 +++++------------------------------ 1 file changed, 8 insertions(+), 43 deletions(-)
New commits: commit 5dd321ed7ed949430cbe69e3fb7aba08e8985aef Author: Michael Weghorn <[email protected]> AuthorDate: Fri Feb 27 16:43:19 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Feb 28 09:33:55 2026 +0100 vcl: Let GenericClipboard subclass ClipboardBase Use existing helper class as base to deduplicate the logic a bit. This implies that `m_aMutex` now comes from that base class and is an osl::Mutex, so adjust its use accordingly. Change-Id: Ief870ec876147a287e00c337d3d60c2d2ff4a7ba Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200645 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/source/components/dtranscomp.cxx b/vcl/source/components/dtranscomp.cxx index c288ad413c8f..27e634d39ba6 100644 --- a/vcl/source/components/dtranscomp.cxx +++ b/vcl/source/components/dtranscomp.cxx @@ -26,6 +26,7 @@ #include <tools/debug.hxx> #include <vcl/svapp.hxx> +#include <ClipboardBase.hxx> #include <ClipboardSelectionType.hxx> #include <svdata.hxx> #include <salinst.hxx> @@ -55,28 +56,21 @@ namespace vcl namespace { // generic implementation to satisfy SalInstance -class GenericClipboard : - public comphelper::WeakComponentImplHelper< - datatransfer::clipboard::XSystemClipboard, - XServiceInfo - > +class GenericClipboard : public ClipboardBase { Reference< css::datatransfer::XTransferable > m_aContents; Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner; std::vector< Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners; public: - GenericClipboard() + : ClipboardBase(ClipboardSelectionType::Clipboard) {} /* * XServiceInfo */ - virtual OUString SAL_CALL getImplementationName() override; - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; - virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() override; /* * XClipboard @@ -88,14 +82,6 @@ public: const Reference< css::datatransfer::XTransferable >& xTrans, const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) override; - virtual OUString SAL_CALL getName() override; - - /* - * XClipboardEx - */ - - virtual sal_Int8 SAL_CALL getRenderingCapabilities() override; - /* * XClipboardNotifier */ @@ -113,20 +99,9 @@ OUString GenericClipboard::getImplementationName() return u"com.sun.star.datatransfer.VCLGenericClipboard"_ustr; } -Sequence< OUString > GenericClipboard::getSupportedServiceNames() -{ - Sequence<OUString> aRet { u"com.sun.star.datatransfer.clipboard.SystemClipboard"_ustr }; - return aRet; -} - -sal_Bool GenericClipboard::supportsService( const OUString& ServiceName ) -{ - return cppu::supportsService(this, ServiceName); -} - Reference< css::datatransfer::XTransferable > GenericClipboard::getContents() { - std::unique_lock aGuard(m_aMutex); + osl::MutexGuard aGuard(m_aMutex); return m_aContents; } @@ -134,7 +109,7 @@ void GenericClipboard::setContents( const Reference< css::datatransfer::XTransferable >& xTrans, const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) { - std::unique_lock aGuard( m_aMutex ); + osl::ClearableMutexGuard aGuard(m_aMutex); Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner ); Reference< datatransfer::XTransferable > xOldContents( m_aContents ); m_aContents = xTrans; @@ -144,7 +119,7 @@ void GenericClipboard::setContents( datatransfer::clipboard::ClipboardEvent aEv; aEv.Contents = m_aContents; - aGuard.unlock(); + aGuard.clear(); if( xOldOwner.is() && xOldOwner != xClipboardOwner ) xOldOwner->lostOwnership( this, xOldContents ); @@ -154,26 +129,16 @@ void GenericClipboard::setContents( } } -OUString GenericClipboard::getName() -{ - return u"CLIPBOARD"_ustr; -} - -sal_Int8 GenericClipboard::getRenderingCapabilities() -{ - return 0; -} - void GenericClipboard::addClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener ) { - std::unique_lock aGuard(m_aMutex); + osl::MutexGuard aGuard(m_aMutex); m_aListeners.push_back( listener ); } void GenericClipboard::removeClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener ) { - std::unique_lock aGuard(m_aMutex); + osl::MutexGuard aGuard(m_aMutex); std::erase(m_aListeners, listener); }
