23 #include <osl/mutex.hxx>
27 #include <factory.hxx>
31 #include <com/sun/star/lang/IllegalArgumentException.hpp>
32 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
33 #include <com/sun/star/lang/XServiceInfo.hpp>
34 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
35 #include <com/sun/star/lang/XInitialization.hpp>
36 #include <com/sun/star/datatransfer/XTransferable.hpp>
37 #include <com/sun/star/datatransfer/clipboard/XClipboardListener.hpp>
38 #include <com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp>
39 #include <com/sun/star/datatransfer/dnd/XDragSource.hpp>
40 #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
41 #include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
55 class GenericClipboard :
56 public cppu::WeakComponentImplHelper<
57 datatransfer::clipboard::XSystemClipboard,
64 std::vector< Reference< css::datatransfer::clipboard::XClipboardListener > >
m_aListeners;
68 GenericClipboard() :
cppu::WeakComponentImplHelper<
90 virtual void SAL_CALL setContents(
94 virtual OUString SAL_CALL getName()
override;
100 virtual sal_Int8 SAL_CALL getRenderingCapabilities()
override;
105 virtual void SAL_CALL addClipboardListener(
108 virtual void SAL_CALL removeClipboardListener(
120 OUString GenericClipboard::getImplementationName()
122 return "com.sun.star.datatransfer.VCLGenericClipboard";
127 return getSupportedServiceNames_static();
130 sal_Bool GenericClipboard::supportsService(
const OUString& ServiceName )
140 void GenericClipboard::setContents(
144 osl::ClearableMutexGuard aGuard(
m_aMutex );
151 datatransfer::clipboard::ClipboardEvent aEv;
156 if( xOldOwner.is() && xOldOwner != xClipboardOwner )
157 xOldOwner->lostOwnership(
this, xOldContents );
158 for (
auto const& listener : aListeners)
160 listener->changedContents( aEv );
164 OUString GenericClipboard::getName()
169 sal_Int8 GenericClipboard::getRenderingCapabilities()
190 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
192 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const& args)
197 xClipboard->acquire();
198 return xClipboard.get();
206 class GenericDragSource :
public cppu::WeakComponentImplHelper<
207 datatransfer::dnd::XDragSource,
209 css::lang::XServiceInfo
214 GenericDragSource() : WeakComponentImplHelper( m_aMutex ) {}
217 virtual sal_Bool SAL_CALL isDragImageSupported()
override;
218 virtual sal_Int32 SAL_CALL getDefaultCursor(
sal_Int8 dragAction )
override;
219 virtual void SAL_CALL startDrag(
220 const datatransfer::dnd::DragGestureEvent& trigger,
221 sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image,
227 virtual void SAL_CALL initialize(
const Sequence< Any >& arguments )
override;
230 {
return "com.sun.star.datatransfer.dnd.VclGenericDragSource"; }
236 {
return getSupportedServiceNames_static(); }
240 return {
"com.sun.star.datatransfer.dnd.GenericDragSource" };
246 sal_Bool GenericDragSource::isDragImageSupported()
251 sal_Int32 GenericDragSource::getDefaultCursor(
sal_Int8 )
256 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";
307 class GenericDropTarget :
public cppu::WeakComponentImplHelper<
308 datatransfer::dnd::XDropTarget,
310 css::lang::XServiceInfo
315 GenericDropTarget() : WeakComponentImplHelper( m_aMutex )
319 virtual void SAL_CALL initialize(
const Sequence< Any >& args )
override;
326 virtual sal_Int8 SAL_CALL getDefaultActions()
override;
327 virtual void SAL_CALL setDefaultActions(
sal_Int8 actions )
override;
330 {
return "com.sun.star.datatransfer.dnd.VclGenericDropTarget"; }
336 {
return getSupportedServiceNames_static(); }
340 return {
"com.sun.star.datatransfer.dnd.GenericDropTarget" };
358 sal_Bool GenericDropTarget::isActive()
363 void GenericDropTarget::setActive(
sal_Bool )
367 sal_Int8 GenericDropTarget::getDefaultActions()
372 void GenericDropTarget::setDefaultActions(
sal_Int8)
379 return {
"com.sun.star.datatransfer.dnd.OleDropTarget" };
381 return {
"com.sun.star.datatransfer.dnd.X11DropTarget" };
383 return GenericDropTarget::getSupportedServiceNames_static();
391 "com.sun.star.comp.datatransfer.dnd.OleDropTarget_V1"
393 "com.sun.star.datatransfer.dnd.XdndDropTarget"
395 "com.sun.star.datatransfer.dnd.VclGenericDropTarget"
414 if (arguments.hasElements()) {
415 throw css::lang::IllegalArgumentException(
416 "non-empty SalInstance::CreateClipboard arguments", {}, -1);
428 if (!m_clipboard.is()) {
exports com.sun.star.datatransfer. clipboard
virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget()
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
virtual css::uno::Reference< css::uno::XInterface > CreateDragSource()
Reference< css::datatransfer::XTransferable > m_aContents
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
exports com.sun.star. datatransfer
ImplSVData * ImplGetSVData()
Sequence< OUString > DropTarget_getSupportedServiceNames()
Reference< XInterface > DragSource_createInstance(const Reference< XMultiServiceFactory > &)
Sequence< OUString > DragSource_getSupportedServiceNames()
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()
Reference< XInterface > DropTarget_createInstance(const Reference< XMultiServiceFactory > &)
Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner