[Libreoffice-commits] core.git: vcl/inc vcl/qt5

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Oct 19 12:05:30 UTC 2018


 vcl/inc/qt5/Qt5DragAndDrop.hxx |    2 ++
 vcl/qt5/Qt5DragAndDrop.cxx     |   26 ++++++++++++++++++++++++++
 vcl/qt5/Qt5Frame.cxx           |    8 ++++++++
 3 files changed, 36 insertions(+)

New commits:
commit a261016b9817443878396c745a72e8d2eb644ded
Author:     Katarina Behrens <Katarina.Behrens at cib.de>
AuthorDate: Thu Oct 18 13:13:29 2018 +0200
Commit:     Katarina Behrens <Katarina.Behrens at cib.de>
CommitDate: Fri Oct 19 14:03:56 2018 +0200

    Make repeated drag'n'drop possible
    
    Change-Id: If87ceeb8ddc4b2aada8ea0c963385a291622fef6
    Reviewed-on: https://gerrit.libreoffice.org/61932
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
    Tested-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/vcl/inc/qt5/Qt5DragAndDrop.hxx b/vcl/inc/qt5/Qt5DragAndDrop.hxx
index d1116ddfee96..568b64236868 100644
--- a/vcl/inc/qt5/Qt5DragAndDrop.hxx
+++ b/vcl/inc/qt5/Qt5DragAndDrop.hxx
@@ -57,6 +57,7 @@ public:
     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
 
     void dragFailed();
+    void fire_dragEnd();
     css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const
     {
         return m_xTrans;
@@ -108,6 +109,7 @@ public:
     css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
 
     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);
 };
 
diff --git a/vcl/qt5/Qt5DragAndDrop.cxx b/vcl/qt5/Qt5DragAndDrop.cxx
index 569c24f2bdac..6a68273e23be 100644
--- a/vcl/qt5/Qt5DragAndDrop.cxx
+++ b/vcl/qt5/Qt5DragAndDrop.cxx
@@ -86,6 +86,19 @@ void Qt5DragSource::dragFailed()
     }
 }
 
+void Qt5DragSource::fire_dragEnd()
+{
+    if (m_xListener.is())
+    {
+        datatransfer::dnd::DragSourceDropEvent aEv;
+        aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_MOVE;
+        aEv.DropSuccess = true; // FIXME: what if drop didn't work out?
+        auto xListener = m_xListener;
+        m_xListener.clear();
+        xListener->dragDropEnd(aEv);
+    }
+}
+
 OUString SAL_CALL Qt5DragSource::getImplementationName()
 {
     return OUString("com.sun.star.datatransfer.dnd.VclQt5DragSource");
@@ -201,6 +214,19 @@ void Qt5DropTarget::fire_dragEnter(const css::datatransfer::dnd::DropTargetDragE
     }
 }
 
+void Qt5DropTarget::fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& 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->dragOver(dtde);
+    }
+}
+
 void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde)
 {
     osl::ClearableGuard<osl::Mutex> aGuard(m_aMutex);
diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index a58e7b18d4b4..66272a9f34f6 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -899,6 +899,8 @@ void Qt5Frame::draggingStarted(const int x, const int y)
         m_pDropTarget->fire_dragEnter(aEvent);
         m_bInDrag = true;
     }
+    else
+        m_pDropTarget->fire_dragOver(aEvent);
 }
 
 void Qt5Frame::dropping(const int x, const int y)
@@ -918,6 +920,12 @@ void Qt5Frame::dropping(const int x, const int y)
     aEvent.Transferable = xTransferable;
 
     m_pDropTarget->fire_drop(aEvent);
+    m_bInDrag = false;
+
+    if (m_pDragSource)
+    {
+        m_pDragSource->fire_dragEnd();
+    }
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list