11 #include <unordered_map>
28 osl::MutexGuard aGuard(gMutex);
33 SAL_INFO(
"lok",
"Got clip: " << it->second.get() <<
" from " << nViewId);
38 SAL_INFO(
"lok",
"Created clip: " << xClip.get() <<
" for viewId " << nViewId);
44 osl::MutexGuard aGuard(gMutex);
49 SAL_INFO(
"lok",
"Released all clipboards on doc destroy\n");
56 SAL_INFO(
"lok",
"Releasing clip: " << it->second.get() <<
" for destroyed " << nViewId);
62 uno::Reference<uno::XInterface>
65 return uno::Reference<uno::XInterface>(
74 uno::Reference<datatransfer::XTransferable> xTransferable(
new LOKTransferable());
75 setContents(xTransferable, uno::Reference<datatransfer::clipboard::XClipboardOwner>());
99 const Reference<css::datatransfer::XTransferable>& xTrans,
100 const Reference<css::datatransfer::clipboard::XClipboardOwner>& xClipboardOwner)
102 osl::ClearableMutexGuard aGuard(
m_aMutex);
103 Reference<datatransfer::clipboard::XClipboardOwner> xOldOwner(
m_aOwner);
109 datatransfer::clipboard::ClipboardEvent aEv;
115 if (xOldOwner.is() && xOldOwner != xClipboardOwner)
116 xOldOwner->lostOwnership(
this, xOldContents);
117 for (
auto const& listener : aListeners)
119 listener->changedContents(aEv);
124 const Reference<datatransfer::clipboard::XClipboardListener>& listener)
126 osl::ClearableMutexGuard aGuard(
m_aMutex);
131 const Reference<datatransfer::clipboard::XClipboardListener>& listener)
133 osl::ClearableMutexGuard aGuard(
m_aMutex);
138 const css::uno::Sequence<sal_Int8>& aSequence)
141 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(1);
147 auto pText =
reinterpret_cast<const char*
>(aSequence.getConstArray());
148 aContent <<= OUString(pText, aSequence.getLength(), RTL_TEXTENCODING_UTF8);
151 aContent <<= aSequence;
159 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(1);
162 aContent <<= OUString();
170 if (aMimeType.startsWith(
"text/plain"))
172 aMimeType =
"text/plain;charset=utf-16";
175 else if (aMimeType ==
"application/x-libreoffice-tsvc")
179 rFlavor.MimeType = aMimeType;
180 rFlavor.HumanPresentableName = aMimeType;
184 const size_t* pInSizes,
const char** pInStreams)
187 m_aFlavors = css::uno::Sequence<css::datatransfer::DataFlavor>(nInCount);
188 for (
size_t i = 0;
i < nInCount; ++
i)
194 aContent <<= OUString(pInStreams[i], pInSizes[i], RTL_TEXTENCODING_UTF8);
196 aContent <<= css::uno::Sequence<sal_Int8>(
197 reinterpret_cast<const sal_Int8*
>(pInStreams[i]), pInSizes[i]);
210 SAL_WARN(
"lok",
"Horror type mismatch!");
225 [&rFlavor](
const datatransfer::DataFlavor&
i) {
226 return i.MimeType == rFlavor.MimeType &&
i.DataType == rFlavor.DataType;
css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner
static void initFlavourFromMime(css::datatransfer::DataFlavor &rFlavor, OUString aMimeType)
exports com.sun.star.datatransfer. clipboard
Sequence< OUString > SAL_CALL getSupportedServiceNames() override
void SAL_CALL setContents(const css::uno::Reference< css::datatransfer::XTransferable > &xTransferable, const css::uno::Reference< css::datatransfer::clipboard::XClipboardOwner > &xClipboardOwner) override
static rtl::Reference< LOKClipboard > getClipboardForCurView()
Fetch clipboard from the global pool.
void SAL_CALL removeClipboardListener(const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > &listener) override
LOKTransferable()
Use to ensure we have some dummy content on the clipboard to allow a 1st 'paste'. ...
css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor &rFlavor) override
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
sal_Bool SAL_CALL isDataFlavorSupported(const css::datatransfer::DataFlavor &rFlavor) override
css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors() override
static Sequence< OUString > getSupportedServiceNames_static()
exports com.sun.star. datatransfer
css::uno::Reference< css::datatransfer::XTransferable > SAL_CALL getContents() override
void SAL_CALL addClipboardListener(const css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > &listener) override
sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
css::uno::Type const & get()
css::uno::Sequence< css::datatransfer::DataFlavor > m_aFlavors
std::vector< css::uno::Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners
A clipboard implementation for LibreOfficeKit.
#define SAL_INFO(area, stream)
static int getView(const SfxViewShell *pViewShell=nullptr)
css::uno::Reference< css::datatransfer::XTransferable > m_xTransferable
static void releaseClipboardForView(int nViewId)
Release a clipboard before its document dies, nViewId of -1 clears all.
#define SAL_WARN(area, stream)
std::vector< css::uno::Any > m_aContent
static vcl::DeleteOnDeinit< std::unordered_map< int, rtl::Reference< LOKClipboard > > > gClipboards(new std::unordered_map< int, rtl::Reference< LOKClipboard >>)
OUString SAL_CALL getImplementationName() override
Represents the contents of LOKClipboard.
css::uno::Reference< css::uno::XInterface > SAL_CALL createInstanceWithArguments(const css::uno::Sequence< css::uno::Any > &) override