From a5b4f6e456bfb735385e8d3d6945ea8f3be1ba94 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Wed, 27 Jan 2016 10:16:39 +0000 Subject: Resolves: tdf#93054 gtk3: implement drag and drop Change-Id: Ib644ea36b8a9e68e023e465ef159b9a4890e5d37 --- vcl/inc/unx/gtk/gtkinst.hxx | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'vcl/inc/unx/gtk/gtkinst.hxx') diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index a649f620e223..93a041b7982a 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,8 @@ struct VclToGtkHelper { std::vector aInfoToFlavor; std::vector FormatsToGtk(const css::uno::Sequence &rFormats); + void setSelectionData(const css::uno::Reference &rTrans, + GtkSelectionData *selection_data, guint info); private: GtkTargetEntry makeGtkTargetEntry(const css::datatransfer::DataFlavor& rFlavor); }; @@ -123,6 +126,48 @@ public: void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde); void fire_dragExit(const css::datatransfer::dnd::DropTargetEvent& dte); }; + +class GtkDragSource : public cppu::WeakComponentImplHelper +{ + osl::Mutex m_aMutex; + GtkSalFrame* m_pFrame; + css::uno::Reference m_xListener; + css::uno::Reference m_xTrans; + VclToGtkHelper m_aConversionHelper; +public: + GtkDragSource() : WeakComponentImplHelper( m_aMutex ) {} + virtual ~GtkDragSource(); + + // XDragSource + virtual sal_Bool SAL_CALL isDragImageSupported() throw(std::exception) override; + virtual sal_Int32 SAL_CALL getDefaultCursor(sal_Int8 dragAction) throw(std::exception) override; + virtual void SAL_CALL startDrag( + const css::datatransfer::dnd::DragGestureEvent& trigger, sal_Int8 sourceActions, sal_Int32 cursor, sal_Int32 image, + const css::uno::Reference< css::datatransfer::XTransferable >& transferable, + const css::uno::Reference< css::datatransfer::dnd::XDragSourceListener >& listener) throw(std::exception) override; + + // XInitialization + virtual void SAL_CALL initialize(const css::uno::Sequence& rArguments) + throw (css::uno::Exception, std::exception) override; + void deinitialize(); + + OUString SAL_CALL getImplementationName() + throw (css::uno::RuntimeException, std::exception) override; + + sal_Bool SAL_CALL supportsService(OUString const & ServiceName) + throw (css::uno::RuntimeException, std::exception) override; + + css::uno::Sequence SAL_CALL getSupportedServiceNames() + throw (css::uno::RuntimeException, std::exception) override; + + void dragFailed(); + void dragDelete(); + void dragEnd(GdkDragContext* context); + void dragDataGet(GtkSelectionData *data, guint info); +}; + #endif class GtkSalTimer; @@ -175,6 +220,7 @@ public: #if GTK_CHECK_VERSION(3,0,0) virtual css::uno::Reference< css::uno::XInterface > CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) override; + virtual css::uno::Reference< css::uno::XInterface > CreateDragSource() override; virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget() override; #endif -- cgit