diff --git a/vcl/inc/ClipboardBase.hxx b/vcl/inc/ClipboardBase.hxx index 6bfd66cacaca..9ce51d613bf7 100644 --- a/vcl/inc/ClipboardBase.hxx +++ b/vcl/inc/ClipboardBase.hxx @@ -9,6 +9,8 @@ #pragma once +#include "ClipboardSelectionType.hxx" + #include #include #include @@ -21,17 +23,24 @@ class VCL_DLLPUBLIC ClipboardBase : public cppu::WeakComponentImplHelper { + const ClipboardSelectionType m_eSelectionType; + protected: osl::Mutex m_aMutex; - ClipboardBase(); + explicit ClipboardBase(ClipboardSelectionType eSelectionType); virtual ~ClipboardBase() override; + ClipboardSelectionType GetSelectionType() { return m_eSelectionType; } + public: // XServiceInfo virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override; virtual css::uno::Sequence SAL_CALL getSupportedServiceNames() override; + // XClipboard + virtual OUString SAL_CALL getName() override; + // XClipboardEx virtual sal_Int8 SAL_CALL getRenderingCapabilities() override; }; diff --git a/vcl/inc/qt5/QtClipboard.hxx b/vcl/inc/qt5/QtClipboard.hxx index c4331e0bf1b9..51c4045a680c 100644 --- a/vcl/inc/qt5/QtClipboard.hxx +++ b/vcl/inc/qt5/QtClipboard.hxx @@ -59,7 +59,7 @@ signals: void clearClipboard(); public: - explicit QtClipboard(const QClipboard::Mode eMode); + explicit QtClipboard(ClipboardSelectionType eSelection); static bool isSupported(const QClipboard::Mode eMode); @@ -72,7 +72,6 @@ public: const css::uno::Reference& xTrans, const css::uno::Reference& xClipboardOwner) override; - virtual OUString SAL_CALL getName() override; // XFlushableClipboard virtual void SAL_CALL flushClipboard() override; diff --git a/vcl/qt5/QtClipboard.cxx b/vcl/qt5/QtClipboard.cxx index 85aecf496129..dac6e4d57cba 100644 --- a/vcl/qt5/QtClipboard.cxx +++ b/vcl/qt5/QtClipboard.cxx @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -29,9 +30,9 @@ #include #endif -QtClipboard::QtClipboard(const QClipboard::Mode eMode) - : ImplInheritanceHelper() - , m_eClipboardMode(eMode) +QtClipboard::QtClipboard(ClipboardSelectionType eSelectionType) + : ImplInheritanceHelper(eSelectionType) + , m_eClipboardMode(toQClipboardMode(eSelectionType)) , m_bOwnClipboardChange(false) , m_bDoClear(false) { @@ -234,20 +235,6 @@ OUString QtClipboard::getImplementationName() return u"com.sun.star.datatransfer.QtClipboard"_ustr; } -OUString QtClipboard::getName() -{ - switch (m_eClipboardMode) - { - case QClipboard::Clipboard: - return u"CLIPBOARD"_ustr; - case QClipboard::Selection: - return u"PRIMARY"_ustr; - default: - assert(false && "unexpected clipboard mode"); - return OUString(); - } -} - void QtClipboard::addClipboardListener( const css::uno::Reference& listener) { diff --git a/vcl/qt5/QtInstance.cxx b/vcl/qt5/QtInstance.cxx index 82a46a256227..5c70ff8feedd 100644 --- a/vcl/qt5/QtInstance.cxx +++ b/vcl/qt5/QtInstance.cxx @@ -660,10 +660,9 @@ QtInstance::CreateClipboard(ClipboardSelectionType eSelection) rtl::Reference pClipboard = EmscriptenLightweightRunInMainThread([&eSelection] { assert(QApplication::clipboard()->thread() == qApp->thread()); - const QClipboard::Mode eClipboardMode = toQClipboardMode(eSelection); - if (QtClipboard::isSupported(eClipboardMode)) - return rtl::Reference(new QtClipboard(eClipboardMode)); - SAL_WARN("vcl.qt", "Ignoring unsupported clipboard mode: '" << eClipboardMode << "'"); + if (QtClipboard::isSupported(toQClipboardMode(eSelection))) + return rtl::Reference(new QtClipboard(eSelection)); + SAL_WARN("vcl.qt", "Ignoring unsupported selection type"); return rtl::Reference(); }); if (pClipboard.is()) diff --git a/vcl/source/app/ClipboardBase.cxx b/vcl/source/app/ClipboardBase.cxx index 636d88962e72..f5797c9e20dd 100644 --- a/vcl/source/app/ClipboardBase.cxx +++ b/vcl/source/app/ClipboardBase.cxx @@ -11,9 +11,10 @@ #include -ClipboardBase::ClipboardBase() +ClipboardBase::ClipboardBase(ClipboardSelectionType eSelectionType) : cppu::WeakComponentImplHelper(m_aMutex) + , m_eSelectionType(eSelectionType) { } @@ -29,6 +30,20 @@ sal_Bool ClipboardBase::supportsService(const OUString& ServiceName) return cppu::supportsService(this, ServiceName); } +OUString ClipboardBase::getName() +{ + switch (m_eSelectionType) + { + case ClipboardSelectionType::Clipboard: + return u"CLIPBOARD"_ustr; + case ClipboardSelectionType::Primary: + return u"PRIMARY"_ustr; + default: + assert(false && "unhandled clipboard selection type"); + return OUString(); + } +} + sal_Int8 ClipboardBase::getRenderingCapabilities() { return 0; } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 6a0f894bd454..0a6cbb6c580c 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -950,7 +950,6 @@ class VclGtkClipboard : public cppu::ImplInheritanceHelper { - ClipboardSelectionType m_eSelection; gulong m_nOwnerChangedSignalId; ImplSVEvent* m_pSetClipboardEvent; Reference m_aContents; @@ -989,8 +988,6 @@ public: const Reference< css::datatransfer::XTransferable >& xTrans, const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner ) override; - virtual OUString SAL_CALL getName() override; - /* * XFlushableClipboard */ @@ -1027,7 +1024,7 @@ Reference< css::datatransfer::XTransferable > VclGtkClipboard::getContents() { //tdf#93887 This is the system clipboard/selection. We fetch it when we are not //the owner of the clipboard and have not already fetched it. - m_aContents = new GtkClipboardTransferable(m_eSelection); + m_aContents = new GtkClipboardTransferable(GetSelectionType()); #if GTK_CHECK_VERSION(4, 0, 0) if (m_pClipboardContent) transerable_content_set_transferable(m_pClipboardContent, m_aContents.get()); @@ -1367,14 +1364,13 @@ void VclToGtkHelper::setSelectionData(const Reference > aListeners( m_aListeners ); datatransfer::clipboard::ClipboardEvent aEv; - GdkClipboard* clipboard = clipboard_get(m_eSelection); + GdkClipboard* clipboard = clipboard_get(GetSelectionType()); if (!m_aGtkTargets.empty()) { #if GTK_CHECK_VERSION(4, 0, 0) @@ -1564,12 +1560,6 @@ void VclGtkClipboard::setContents( } } -OUString VclGtkClipboard::getName() -{ - return (m_eSelection == ClipboardSelectionType::Clipboard) ? u"CLIPBOARD"_ustr - : u"PRIMARY"_ustr; -} - void VclGtkClipboard::addClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener ) { osl::Guard aGuard( m_aMutex );