11#include <unordered_map>
18using namespace css::uno;
27 osl::MutexGuard aGuard(
gMutex);
32 SAL_INFO(
"lok",
"Got clip: " << it->second.get() <<
" from " << nViewId);
37 SAL_INFO(
"lok",
"Created clip: " << xClip.get() <<
" for viewId " << nViewId);
43 osl::MutexGuard aGuard(
gMutex);
48 SAL_INFO(
"lok",
"Released all clipboards on doc destroy\n");
55 SAL_INFO(
"lok",
"Releasing clip: " << it->second.get() <<
" for destroyed " << nViewId);
68 :
cppu::WeakComponentImplHelper<css::datatransfer::clipboard::XSystemClipboard,
78 Sequence<OUString> aRet{
"com.sun.star.datatransfer.clipboard.SystemClipboard" };
97 const Reference<css::datatransfer::XTransferable>& xTrans,
98 const Reference<css::datatransfer::clipboard::XClipboardOwner>& xClipboardOwner)
100 osl::ClearableMutexGuard aGuard(
m_aMutex);
101 Reference<datatransfer::clipboard::XClipboardOwner> xOldOwner(
m_aOwner);
107 datatransfer::clipboard::ClipboardEvent aEv;
113 if (xOldOwner.is() && xOldOwner != xClipboardOwner)
114 xOldOwner->lostOwnership(
this, xOldContents);
117 listener->changedContents(aEv);
122 const Reference<datatransfer::clipboard::XClipboardListener>& listener)
124 osl::ClearableMutexGuard aGuard(
m_aMutex);
129 const Reference<datatransfer::clipboard::XClipboardListener>& listener)
131 osl::ClearableMutexGuard aGuard(
m_aMutex);
136 const css::uno::Sequence<sal_Int8>& aSequence)
139 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(1);
145 auto pText =
reinterpret_cast<const char*
>(aSequence.getConstArray());
146 aContent <<= OUString(pText, aSequence.getLength(), RTL_TEXTENCODING_UTF8);
149 aContent <<= aSequence;
157 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(1);
160 aContent <<= OUString();
173 else if (
aMimeType ==
"application/x-libreoffice-tsvc")
178 rFlavor.HumanPresentableName =
aMimeType;
182 const size_t* pInSizes,
const char** pInStreams)
185 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(nInCount);
187 for (
size_t i = 0;
i < nInCount; ++
i)
193 aContent <<= OUString(pInStreams[
i], pInSizes[
i], RTL_TEXTENCODING_UTF8);
195 aContent <<= css::uno::Sequence<sal_Int8>(
196 reinterpret_cast<const sal_Int8*
>(pInStreams[
i]), pInSizes[
i]);
209 SAL_WARN(
"lok",
"Horror type mismatch!");
224 [&rFlavor](
const datatransfer::DataFlavor&
i) {
225 return i.MimeType == rFlavor.MimeType &&
i.DataType == rFlavor.DataType;
static rtl::Reference< LOKClipboard > getClipboardForCurView()
Fetch clipboard from the global pool.
static void releaseClipboardForView(int nViewId)
Release a clipboard before its document dies, nViewId of -1 clears all.
css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments(const css::uno::Sequence< css::uno::Any > &) override
A clipboard implementation for LibreOfficeKit.
OUString SAL_CALL getImplementationName() override
static Sequence< OUString > getSupportedServiceNames_static()
void SAL_CALL setContents(const css::uno::Reference< css::datatransfer::XTransferable > &xTransferable, const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner > &xClipboardOwner) override
std::vector< css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners
void SAL_CALL addClipboardListener(const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > &listener) override
void SAL_CALL removeClipboardListener(const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > &listener) override
css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner
css::uno::Reference< css::datatransfer::XTransferable > SAL_CALL getContents() override
Sequence< OUString > SAL_CALL getSupportedServiceNames() override
sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
css::uno::Reference< css::datatransfer::XTransferable > m_xTransferable
Represents the contents of LOKClipboard.
LOKTransferable()
Use to ensure we have some dummy content on the clipboard to allow a 1st 'paste'.
css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() override
sal_Bool SAL_CALL isDataFlavorSupported(const css::datatransfer::DataFlavor &rFlavor) override
static void initFlavourFromMime(css::datatransfer::DataFlavor &rFlavor, OUString aMimeType)
css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor &rFlavor) override
css::uno::Sequence< css::datatransfer::DataFlavor > m_aFlavors
std::vector< css::uno::Any > m_aContent
static int getView(const SfxViewShell *pViewShell=nullptr)
css::uno::Type const & get()
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
static vcl::DeleteOnDeinit< std::unordered_map< int, rtl::Reference< LOKClipboard > > > gClipboards
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
const sal_Unicode *const aMimeType[]