30#include <com/sun/star/lang/IllegalArgumentException.hpp>
31#include <com/sun/star/lang/XMultiServiceFactory.hpp>
32#include <com/sun/star/lang/XServiceInfo.hpp>
33#include <com/sun/star/lang/XSingleServiceFactory.hpp>
34#include <com/sun/star/lang/XInitialization.hpp>
35#include <com/sun/star/datatransfer/XTransferable.hpp>
36#include <com/sun/star/datatransfer/clipboard/XClipboardListener.hpp>
37#include <com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp>
38#include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
39#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
40#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
54class GenericClipboard :
56 datatransfer::clipboard::XSystemClipboard,
62 std::vector< Reference< css::datatransfer::clipboard::XClipboardListener > >
m_aListeners;
85 virtual void SAL_CALL setContents(
89 virtual OUString SAL_CALL getName()
override;
95 virtual sal_Int8 SAL_CALL getRenderingCapabilities()
override;
100 virtual void SAL_CALL addClipboardListener(
103 virtual void SAL_CALL removeClipboardListener(
115OUString GenericClipboard::getImplementationName()
117 return "com.sun.star.datatransfer.VCLGenericClipboard";
122 return getSupportedServiceNames_static();
125sal_Bool GenericClipboard::supportsService(
const OUString& ServiceName )
135void GenericClipboard::setContents(
139 std::unique_lock aGuard( m_aMutex );
146 datatransfer::clipboard::ClipboardEvent aEv;
151 if( xOldOwner.is() && xOldOwner != xClipboardOwner )
152 xOldOwner->lostOwnership(
this, xOldContents );
153 for (
auto const& listener : aListeners)
155 listener->changedContents( aEv );
159OUString GenericClipboard::getName()
164sal_Int8 GenericClipboard::getRenderingCapabilities()
171 std::unique_lock aGuard(m_aMutex);
178 std::unique_lock aGuard(m_aMutex);
185extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
187 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const& args)
192 xClipboard->acquire();
193 return xClipboard.get();
202 datatransfer::dnd::XDragSource,
204 css::lang::XServiceInfo
207 css::uno::Reference<css::datatransfer::XTransferable>
m_xTrans;
209 GenericDragSource() {}
212 virtual sal_Bool SAL_CALL isDragImageSupported()
override;
213 virtual sal_Int32 SAL_CALL getDefaultCursor(
sal_Int8 dragAction )
override;
214 virtual void SAL_CALL startDrag(
215 const datatransfer::dnd::DragGestureEvent& trigger,
216 sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image,
222 virtual void SAL_CALL initialize(
const Sequence< Any >& arguments )
override;
225 {
return "com.sun.star.datatransfer.dnd.VclGenericDragSource"; }
231 {
return getSupportedServiceNames_static(); }
235 return {
"com.sun.star.datatransfer.dnd.GenericDragSource" };
241sal_Bool GenericDragSource::isDragImageSupported()
246sal_Int32 GenericDragSource::getDefaultCursor(
sal_Int8 )
251void GenericDragSource::startDrag(
const datatransfer::dnd::DragGestureEvent&,
262 datatransfer::dnd::DragSourceDropEvent aEv;
263 aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_COPY;
264 aEv.DropSuccess =
false;
265 listener->dragDropEnd( aEv );
275 return {
"com.sun.star.datatransfer.dnd.OleDragSource" };
277 return {
"com.sun.star.datatransfer.dnd.X11DragSource" };
279 return {
"com.sun.star.datatransfer.dnd.VclGenericDragSource" };
286 return "com.sun.star.comp.datatransfer.dnd.OleDragSource_V1";
288 return "com.sun.star.datatransfer.dnd.XdndSupport";
290 return "com.sun.star.datatransfer.dnd.VclGenericDragSource";
308 datatransfer::dnd::XDropTarget,
310 css::lang::XServiceInfo
314 GenericDropTarget() {}
317 virtual void SAL_CALL initialize(
const Sequence< Any >& args )
override;
324 virtual sal_Int8 SAL_CALL getDefaultActions()
override;
325 virtual void SAL_CALL setDefaultActions(
sal_Int8 actions )
override;
328 {
return "com.sun.star.datatransfer.dnd.VclGenericDropTarget"; }
334 {
return getSupportedServiceNames_static(); }
338 return {
"com.sun.star.datatransfer.dnd.GenericDropTarget" };
356sal_Bool GenericDropTarget::isActive()
361void GenericDropTarget::setActive(
sal_Bool )
365sal_Int8 GenericDropTarget::getDefaultActions()
370void GenericDropTarget::setDefaultActions(
sal_Int8)
377 return {
"com.sun.star.datatransfer.dnd.OleDropTarget" };
379 return {
"com.sun.star.datatransfer.dnd.X11DropTarget" };
381 return GenericDropTarget::getSupportedServiceNames_static();
389 "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"
391 "com.sun.star.datatransfer.dnd.XdndDropTarget"
393 "com.sun.star.datatransfer.dnd.VclGenericDropTarget"
412 if (arguments.hasElements()) {
413 throw css::lang::IllegalArgumentException(
414 "non-empty SalInstance::CreateClipboard arguments", {}, -1);
438 return css::uno::Reference<css::uno::XInterface>();
452 return css::uno::Reference<css::uno::XInterface>();
static bool IsHeadlessModeEnabled()
Determines if headless mode is enabled.
virtual css::uno::Reference< css::uno::XInterface > CreateClipboard(const css::uno::Sequence< css::uno::Any > &i_rArguments)
static bool IsRunningUnitTest()
css::uno::Reference< css::uno::XInterface > CreateDropTarget(const SystemEnvData *=nullptr)
virtual css::uno::Reference< css::uno::XInterface > ImplCreateDropTarget(const SystemEnvData *)
virtual css::uno::Reference< css::uno::XInterface > ImplCreateDragSource(const SystemEnvData *)
css::uno::Reference< css::uno::XInterface > CreateDragSource(const SystemEnvData *=nullptr)
css::uno::Reference< css::uno::XInterface > m_clipboard
#define DBG_TESTSOLARMUTEX()
Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner
css::uno::Reference< css::datatransfer::XTransferable > m_xTrans
Reference< css::datatransfer::XTransferable > m_aContents
std::vector< Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners
void setActive(bool bActive)
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
OUString DragSource_getImplementationName()
Reference< XInterface > DragSource_createInstance(const Reference< XMultiServiceFactory > &)
Sequence< OUString > DropTarget_getSupportedServiceNames()
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * vcl_SystemClipboard_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &args)
Sequence< OUString > DragSource_getSupportedServiceNames()
Reference< XInterface > DropTarget_createInstance(const Reference< XMultiServiceFactory > &)
OUString DropTarget_getImplementationName()
ImplSVData * ImplGetSVData()