vcl/unx/gtk3/gtk3gtkframe.cxx |   18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

New commits:
commit 896b7e69a3182a0142a323ba5f76a2d8a811091a
Author:     Caolán McNamara <[email protected]>
AuthorDate: Tue Jul 17 21:29:46 2018 +0100
Commit:     Xisco Faulí <[email protected]>
CommitDate: Thu Jul 19 17:56:03 2018 +0200

    Resolves: tdf#118302 drag n drop to same tab should cancel dnd
    
    dropComplete is used to do this, follow the mac pattern here to
    propogate this in the drag and drop from self to self case.
    
    Maybe this also affects tdf#105320 ?
    
    Change-Id: I2b8f8b0e0486f6ee45a65918fae2537750a75f2d
    Reviewed-on: https://gerrit.libreoffice.org/57590
    Tested-by: Jenkins
    Reviewed-by: Xisco Faulí <[email protected]>

diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 6a443526e8db..c1c560b3f9ce 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -3422,6 +3422,9 @@ namespace
     }
 }
 
+static bool g_DropSuccessSet = false;
+static bool g_DropSuccess = false;
+
 class GtkDropTargetDropContext : public 
cppu::WeakImplHelper<css::datatransfer::dnd::XDropTargetDropContext>
 {
     GdkDragContext *m_pContext;
@@ -3447,6 +3450,11 @@ public:
     virtual void SAL_CALL dropComplete(sal_Bool bSuccess) override
     {
         gtk_drag_finish(m_pContext, bSuccess, false, m_nTime);
+        if (GtkDragSource::g_ActiveDragSource)
+        {
+            g_DropSuccessSet = true;
+            g_DropSuccess = bSuccess;
+        }
     }
 };
 
@@ -4341,9 +4349,12 @@ void GtkDragSource::startDrag(const 
datatransfer::dnd::DragGestureEvent& rEvent,
         // For LibreOffice internal D&D we provide the Transferable without Gtk
         // intermediaries as a shortcut, see tdf#100097 for how dbaccess 
depends on this
         g_ActiveDragSource = this;
+        g_DropSuccessSet = false;
+        g_DropSuccess = false;
 
         m_pFrame->startDrag(nDragButton, rEvent.DragOriginX, 
rEvent.DragOriginY,
                             VclToGdk(sourceActions), pTargetList);
+
         gtk_target_list_unref(pTargetList);
         for (auto &a : aGtkTargets)
             g_free(a.target);
@@ -4428,7 +4439,12 @@ void GtkDragSource::dragEnd(GdkDragContext* context)
     {
         datatransfer::dnd::DragSourceDropEvent aEv;
         aEv.DropAction = 
GdkToVcl(gdk_drag_context_get_selected_action(context));
-        aEv.DropSuccess = true;
+        // an internal drop can accept the drop but fail with dropComplete( 
false )
+        // this is different than the GTK API
+        if (g_DropSuccessSet)
+            aEv.DropSuccess = g_DropSuccess;
+        else
+            aEv.DropSuccess = true;
         auto xListener = m_xListener;
         m_xListener.clear();
         xListener->dragDropEnd(aEv);
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to