vcl/inc/qt5/Qt5DragAndDrop.hxx | 6 +++++- vcl/qt5/Qt5DragAndDrop.cxx | 34 ++++++++++++++++++++++++++++------ vcl/qt5/Qt5Frame.cxx | 7 ++++--- vcl/qt5/Qt5Widget.cxx | 3 --- 4 files changed, 37 insertions(+), 13 deletions(-)
New commits: commit 829c1d83b530224ee6003ee49975904f2cb46e24 Author: Katarina Behrens <katarina.behr...@cib.de> AuthorDate: Fri Nov 30 10:32:11 2018 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Dec 14 14:29:20 2018 +0100 tdf#120781: Proposed DnD operation is not always 'move' sometimes drop target doesn't accept drops, dragged objects must not disappear in such case Change-Id: I5de3c6c4afc305ea98bd15c7ff55e218364e9475 Reviewed-on: https://gerrit.libreoffice.org/64338 Tested-by: Jenkins Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> (cherry picked from commit 3ac46abde192324fc7e1cbf3f22b7280f15e77df) Reviewed-on: https://gerrit.libreoffice.org/65151 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/inc/qt5/Qt5DragAndDrop.hxx b/vcl/inc/qt5/Qt5DragAndDrop.hxx index 568b64236868..dc5b52678d0a 100644 --- a/vcl/inc/qt5/Qt5DragAndDrop.hxx +++ b/vcl/inc/qt5/Qt5DragAndDrop.hxx @@ -57,7 +57,7 @@ public: css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; void dragFailed(); - void fire_dragEnd(); + void fire_dragEnd(sal_Int8 nAction); css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const { return m_xTrans; @@ -72,6 +72,8 @@ class Qt5DropTarget { osl::Mutex m_aMutex; Qt5Frame* m_pFrame; + sal_Int8 mnDragAction; + sal_Int8 mnDropAction; bool m_bActive; sal_Int8 m_nDefaultActions; std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> m_aListeners; @@ -111,6 +113,8 @@ public: void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde); void fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde); void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde); + + sal_Int8 proposedDragAction() const { return mnDragAction; } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/Qt5DragAndDrop.cxx b/vcl/qt5/Qt5DragAndDrop.cxx index 6a68273e23be..280763812b72 100644 --- a/vcl/qt5/Qt5DragAndDrop.cxx +++ b/vcl/qt5/Qt5DragAndDrop.cxx @@ -86,12 +86,12 @@ void Qt5DragSource::dragFailed() } } -void Qt5DragSource::fire_dragEnd() +void Qt5DragSource::fire_dragEnd(sal_Int8 nAction) { if (m_xListener.is()) { datatransfer::dnd::DragSourceDropEvent aEv; - aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_MOVE; + aEv.DropAction = nAction; aEv.DropSuccess = true; // FIXME: what if drop didn't work out? auto xListener = m_xListener; m_xListener.clear(); @@ -168,6 +168,9 @@ void Qt5DropTarget::initialize(const Sequence<Any>& rArguments) static_cast<OWeakObject*>(this)); } + mnDragAction = datatransfer::dnd::DNDConstants::ACTION_NONE; + mnDropAction = datatransfer::dnd::DNDConstants::ACTION_NONE; + m_pFrame = reinterpret_cast<Qt5Frame*>(nFrame); m_pFrame->registerDropTarget(this); m_bActive = true; @@ -240,11 +243,30 @@ void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& } } -void Qt5DropTarget::acceptDrag(sal_Int8 /*dragOperation*/) { return; } -void Qt5DropTarget::rejectDrag() { return; } +void Qt5DropTarget::acceptDrag(sal_Int8 dragOperation) +{ + mnDragAction = dragOperation; + return; +} + +void Qt5DropTarget::rejectDrag() +{ + mnDragAction = 0; + return; +} + +void Qt5DropTarget::acceptDrop(sal_Int8 dropOperation) +{ + mnDropAction = dropOperation; + return; +} + +void Qt5DropTarget::rejectDrop() +{ + mnDropAction = 0; + return; +} -void Qt5DropTarget::acceptDrop(sal_Int8 /*dropOperation*/) { return; } -void Qt5DropTarget::rejectDrop() { return; } void Qt5DropTarget::dropComplete(sal_Bool /*success*/) { return; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx index ad043ebd3ab8..9304760a47c0 100644 --- a/vcl/qt5/Qt5Frame.cxx +++ b/vcl/qt5/Qt5Frame.cxx @@ -1049,7 +1049,7 @@ void Qt5Frame::draggingStarted(const int x, const int y) aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDragContext*>(m_pDropTarget); aEvent.LocationX = x; aEvent.LocationY = y; - aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; //FIXME + aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; css::uno::Reference<css::datatransfer::XTransferable> xTransferable; @@ -1077,7 +1077,8 @@ void Qt5Frame::dropping(const int x, const int y) 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.DropAction = m_pDropTarget->proposedDragAction() + | css::datatransfer::dnd::DNDConstants::ACTION_DEFAULT; aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; css::uno::Reference<css::datatransfer::XTransferable> xTransferable; @@ -1089,7 +1090,7 @@ void Qt5Frame::dropping(const int x, const int y) if (m_pDragSource) { - m_pDragSource->fire_dragEnd(); + m_pDragSource->fire_dragEnd(m_pDropTarget->proposedDragAction()); } } diff --git a/vcl/qt5/Qt5Widget.cxx b/vcl/qt5/Qt5Widget.cxx index 1c032e2a75ce..ea0258589ff7 100644 --- a/vcl/qt5/Qt5Widget.cxx +++ b/vcl/qt5/Qt5Widget.cxx @@ -197,7 +197,6 @@ void Qt5Widget::startDrag() void Qt5Widget::dragEnterEvent(QDragEnterEvent* event) { - SAL_WARN("vcl.qt5", "dragenterevent"); if (event->source() == this) event->accept(); } @@ -205,7 +204,6 @@ void Qt5Widget::dragEnterEvent(QDragEnterEvent* event) void Qt5Widget::dragMoveEvent(QDragMoveEvent* event) { QPoint point = event->pos(); - SAL_WARN("vcl.qt5", "dragmoveevent"); m_pFrame->draggingStarted(point.x(), point.y()); QWidget::dragMoveEvent(event); @@ -214,7 +212,6 @@ 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); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits