summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5Clipboard.cxx
diff options
context:
space:
mode:
authorKatarina Behrens <Katarina.Behrens@cib.de>2018-09-14 14:53:40 +0200
committerKatarina Behrens <Katarina.Behrens@cib.de>2018-10-04 10:19:33 +0200
commitde40fe552e51e1d634c2401afef305ba4af91799 (patch)
treee828d8977b7fa8b58aef1dfa18c111181036789e /vcl/qt5/Qt5Clipboard.cxx
parentf317a3de7473de5e6366ba4f2a4aa0ca25cdfdc1 (diff)
Clipboard support for qt5, first cut
this adds just enough of basic UNO ifaces to have SID_PASTE enabled. It can't actually paste anything yet. Change-Id: I82e8ef37e11e9df21d27f08d4d199f3e5924ed84 Reviewed-on: https://gerrit.libreoffice.org/60494 Tested-by: Jenkins Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
Diffstat (limited to 'vcl/qt5/Qt5Clipboard.cxx')
-rw-r--r--vcl/qt5/Qt5Clipboard.cxx142
1 files changed, 142 insertions, 0 deletions
diff --git a/vcl/qt5/Qt5Clipboard.cxx b/vcl/qt5/Qt5Clipboard.cxx
new file mode 100644
index 000000000000..ac2daae520c8
--- /dev/null
+++ b/vcl/qt5/Qt5Clipboard.cxx
@@ -0,0 +1,142 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <comphelper/solarmutex.hxx>
+#include <comphelper/sequence.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <vcl/svapp.hxx>
+
+#include <Qt5Clipboard.hxx>
+
+std::vector<css::datatransfer::DataFlavor> Qt5Transferable::getTransferDataFlavorsAsVector()
+{
+ std::vector<css::datatransfer::DataFlavor> aVector;
+
+ // FIXME: this is fake
+ css::datatransfer::DataFlavor aFlavor;
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ aVector.push_back(aFlavor);
+
+ return aVector;
+}
+
+css::uno::Sequence<css::datatransfer::DataFlavor> SAL_CALL Qt5Transferable::getTransferDataFlavors()
+{
+ return comphelper::containerToSequence(getTransferDataFlavorsAsVector());
+}
+
+sal_Bool SAL_CALL
+Qt5Transferable::isDataFlavorSupported(const css::datatransfer::DataFlavor& /*rFlavor*/)
+{
+ const std::vector<css::datatransfer::DataFlavor> aAll = getTransferDataFlavorsAsVector();
+
+ return !aAll.empty(); //FIXME
+}
+
+/*
+ * XTransferable
+ */
+
+css::uno::Any SAL_CALL
+Qt5Transferable::getTransferData(const css::datatransfer::DataFlavor& /*rFlavor*/)
+{
+ css::uno::Any aRet;
+ Sequence<sal_Int8> aSeq(0, 4); //FIXME
+ aRet <<= aSeq;
+ return aRet;
+}
+
+VclQt5Clipboard::VclQt5Clipboard()
+ : cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard,
+ datatransfer::clipboard::XFlushableClipboard, XServiceInfo>(
+ m_aMutex)
+{
+}
+
+void VclQt5Clipboard::flushClipboard()
+{
+ SolarMutexGuard aGuard;
+ return;
+}
+
+VclQt5Clipboard::~VclQt5Clipboard() {}
+
+OUString VclQt5Clipboard::getImplementationName()
+{
+ return OUString("com.sun.star.datatransfer.VclQt5Clipboard");
+}
+
+Sequence<OUString> VclQt5Clipboard::getSupportedServiceNames()
+{
+ Sequence<OUString> aRet{ "com.sun.star.datatransfer.clipboard.SystemClipboard" };
+ return aRet;
+}
+
+sal_Bool VclQt5Clipboard::supportsService(const OUString& ServiceName)
+{
+ return cppu::supportsService(this, ServiceName);
+}
+
+Reference<css::datatransfer::XTransferable> VclQt5Clipboard::getContents()
+{
+ if (!m_aContents.is())
+ m_aContents = new Qt5Transferable();
+
+ return m_aContents;
+}
+
+void VclQt5Clipboard::setContents(
+ const Reference<css::datatransfer::XTransferable>& xTrans,
+ const Reference<css::datatransfer::clipboard::XClipboardOwner>& xClipboardOwner)
+{
+ osl::ClearableMutexGuard aGuard(m_aMutex);
+ Reference<datatransfer::clipboard::XClipboardOwner> xOldOwner(m_aOwner);
+ Reference<datatransfer::XTransferable> xOldContents(m_aContents);
+ m_aContents = xTrans;
+ m_aOwner = xClipboardOwner;
+
+ std::vector<Reference<datatransfer::clipboard::XClipboardListener>> aListeners(m_aListeners);
+ datatransfer::clipboard::ClipboardEvent aEv;
+
+ aEv.Contents = getContents();
+
+ aGuard.clear();
+
+ if (xOldOwner.is() && xOldOwner != xClipboardOwner)
+ xOldOwner->lostOwnership(this, xOldContents);
+ for (auto const& listener : aListeners)
+ {
+ listener->changedContents(aEv);
+ }
+}
+
+OUString VclQt5Clipboard::getName() { return OUString("CLIPBOARD"); }
+
+sal_Int8 VclQt5Clipboard::getRenderingCapabilities() { return 0; }
+
+void VclQt5Clipboard::addClipboardListener(
+ const Reference<datatransfer::clipboard::XClipboardListener>& listener)
+{
+ osl::ClearableMutexGuard aGuard(m_aMutex);
+
+ m_aListeners.push_back(listener);
+}
+
+void VclQt5Clipboard::removeClipboardListener(
+ const Reference<datatransfer::clipboard::XClipboardListener>& listener)
+{
+ osl::ClearableMutexGuard aGuard(m_aMutex);
+
+ m_aListeners.erase(std::remove(m_aListeners.begin(), m_aListeners.end(), listener),
+ m_aListeners.end());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */