From 0fa25c261ad1bac1303f8a35d89261365bb5d849 Mon Sep 17 00:00:00 2001 From: Katarina Behrens Date: Thu, 18 Oct 2018 01:01:14 +0200 Subject: Now that initiating drag works, let's also accept drops Change-Id: Iab328edd799dd4ce04312db4e640f86a8f7fda77 Reviewed-on: https://gerrit.libreoffice.org/61897 Reviewed-by: Katarina Behrens Tested-by: Katarina Behrens --- vcl/inc/qt5/Qt5DragAndDrop.hxx | 1 + vcl/inc/qt5/Qt5Frame.hxx | 1 + vcl/qt5/Qt5DragAndDrop.cxx | 13 +++++++++++++ vcl/qt5/Qt5Frame.cxx | 19 +++++++++++++++++++ vcl/qt5/Qt5Widget.cxx | 3 +++ 5 files changed, 37 insertions(+) (limited to 'vcl') diff --git a/vcl/inc/qt5/Qt5DragAndDrop.hxx b/vcl/inc/qt5/Qt5DragAndDrop.hxx index 424a1ba638e4..d1116ddfee96 100644 --- a/vcl/inc/qt5/Qt5DragAndDrop.hxx +++ b/vcl/inc/qt5/Qt5DragAndDrop.hxx @@ -108,6 +108,7 @@ public: css::uno::Sequence SAL_CALL getSupportedServiceNames() override; void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde); + void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/qt5/Qt5Frame.hxx b/vcl/inc/qt5/Qt5Frame.hxx index 9ee9f50666e9..110fa9b279cf 100644 --- a/vcl/inc/qt5/Qt5Frame.hxx +++ b/vcl/inc/qt5/Qt5Frame.hxx @@ -135,6 +135,7 @@ public: virtual void registerDropTarget(Qt5DropTarget* pDropTarget); virtual void deregisterDropTarget(Qt5DropTarget const* pDropTarget); void draggingStarted(const int x, const int y); + void dropping(const int x, const int y); virtual void SetExtendedFrameStyle(SalExtStyle nExtStyle) override; virtual void Show(bool bVisible, bool bNoActivate = false) override; diff --git a/vcl/qt5/Qt5DragAndDrop.cxx b/vcl/qt5/Qt5DragAndDrop.cxx index ac9a0fdb6339..569c24f2bdac 100644 --- a/vcl/qt5/Qt5DragAndDrop.cxx +++ b/vcl/qt5/Qt5DragAndDrop.cxx @@ -201,6 +201,19 @@ void Qt5DropTarget::fire_dragEnter(const css::datatransfer::dnd::DropTargetDragE } } +void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde) +{ + osl::ClearableGuard aGuard(m_aMutex); + std::vector> aListeners( + m_aListeners); + aGuard.clear(); + + for (auto const& listener : aListeners) + { + listener->drop(dtde); + } +} + void Qt5DropTarget::acceptDrag(sal_Int8 /*dragOperation*/) { return; } void Qt5DropTarget::rejectDrag() { return; } diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx index bbf541dea312..a58e7b18d4b4 100644 --- a/vcl/qt5/Qt5Frame.cxx +++ b/vcl/qt5/Qt5Frame.cxx @@ -901,4 +901,23 @@ void Qt5Frame::draggingStarted(const int x, const int y) } } +void Qt5Frame::dropping(const int x, const int y) +{ + assert(m_pDropTarget); + + css::datatransfer::dnd::DropTargetDropEvent aEvent; + aEvent.Source = static_cast(m_pDropTarget); + aEvent.Context = static_cast(m_pDropTarget); + aEvent.LocationX = x; + aEvent.LocationY = y; + aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; //FIXME + aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; + + css::uno::Reference xTransferable; + xTransferable = m_pDragSource->GetTransferable(); + aEvent.Transferable = xTransferable; + + m_pDropTarget->fire_drop(aEvent); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx index 33b5faf8a9a2..a47aaca8b853 100644 --- a/vcl/qt5/Qt5Widget.cxx +++ b/vcl/qt5/Qt5Widget.cxx @@ -193,7 +193,10 @@ void Qt5Widget::dragMoveEvent(QDragMoveEvent* event) void Qt5Widget::dropEvent(QDropEvent* event) { + QPoint point = event->pos(); SAL_WARN("vcl.qt5", "dropevent"); + + m_pFrame->dropping(point.x(), point.y()); QWidget::dropEvent(event); } -- cgit v1.2.3