26 #include <factory.hxx>
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>
54 class 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(
115 OUString GenericClipboard::getImplementationName()
117 return "com.sun.star.datatransfer.VCLGenericClipboard";
122 return getSupportedServiceNames_static();
125 sal_Bool GenericClipboard::supportsService(
const OUString& ServiceName )
135 void 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 );
159 OUString GenericClipboard::getName()
164 sal_Int8 GenericClipboard::getRenderingCapabilities()
171 std::unique_lock aGuard(m_aMutex);
178 std::unique_lock aGuard(m_aMutex);
185 extern "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" };
241 sal_Bool GenericDragSource::isDragImageSupported()
246 sal_Int32 GenericDragSource::getDefaultCursor(
sal_Int8 )
251 void 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" };
356 sal_Bool GenericDropTarget::isActive()
361 void GenericDropTarget::setActive(
sal_Bool )
365 sal_Int8 GenericDropTarget::getDefaultActions()
370 void 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);
430 if (!m_clipboard.is()) {
438 return css::uno::Reference<css::uno::XInterface>();
447 return ImplCreateDragSource(pSysEnv);
452 return css::uno::Reference<css::uno::XInterface>();
460 return ImplCreateDropTarget(pSysEnv);
virtual css::uno::Reference< css::uno::XInterface > CreateClipboard(const css::uno::Sequence< css::uno::Any > &i_rArguments)
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
OUString DragSource_getImplementationName()
std::vector< Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners
Reference< css::datatransfer::XTransferable > m_aContents
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
virtual css::uno::Reference< css::uno::XInterface > ImplCreateDropTarget(const SystemEnvData *)
ImplSVData * ImplGetSVData()
Sequence< OUString > DropTarget_getSupportedServiceNames()
Reference< XInterface > DragSource_createInstance(const Reference< XMultiServiceFactory > &)
css::uno::Reference< css::uno::XInterface > CreateDragSource(const SystemEnvData *=nullptr)
virtual css::uno::Reference< css::uno::XInterface > ImplCreateDragSource(const SystemEnvData *)
Sequence< OUString > DragSource_getSupportedServiceNames()
css::uno::Reference< css::datatransfer::XTransferable > m_xTrans
static bool IsHeadlessModeEnabled()
Determines if headless mode is enabled.
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * vcl_SystemClipboard_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &args)
OUString DropTarget_getImplementationName()
void setActive(bool bActive)
#define DBG_TESTSOLARMUTEX()
css::uno::Reference< css::uno::XInterface > CreateDropTarget(const SystemEnvData *=nullptr)
Reference< XInterface > DropTarget_createInstance(const Reference< XMultiServiceFactory > &)
Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner