diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2018-10-18 01:01:14 +0200 |
---|---|---|
committer | Katarina Behrens <Katarina.Behrens@cib.de> | 2018-10-19 11:34:02 +0200 |
commit | 0fa25c261ad1bac1303f8a35d89261365bb5d849 (patch) | |
tree | bc26f6d6f8143da7678f519c01398eb1164e3f6a /vcl/qt5 | |
parent | c8d158c05c2d5be5d387b93d03526bf13a1c767d (diff) |
Now that initiating drag works, let's also accept drops
Change-Id: Iab328edd799dd4ce04312db4e640f86a8f7fda77
Reviewed-on: https://gerrit.libreoffice.org/61897
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
Tested-by: Katarina Behrens <Katarina.Behrens@cib.de>
Diffstat (limited to 'vcl/qt5')
-rw-r--r-- | vcl/qt5/Qt5DragAndDrop.cxx | 13 | ||||
-rw-r--r-- | vcl/qt5/Qt5Frame.cxx | 19 | ||||
-rw-r--r-- | vcl/qt5/Qt5Widget.cxx | 3 |
3 files changed, 35 insertions, 0 deletions
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<osl::Mutex> aGuard(m_aMutex); + std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> 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<css::datatransfer::dnd::XDropTarget*>(m_pDropTarget); + aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDropContext*>(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<css::datatransfer::XTransferable> 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); } |