diff --git a/modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp b/modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp index 911defdfb8..3a5c9f27af 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_X11_DragAndDrop.cpp @@ -273,6 +273,8 @@ public: { if (auto* peer = getPeerFor (windowH)) peer->handleDragExit (dragInfo); + + resetDragAndDrop(); } void handleDragAndDropSelection (const XEvent& evt) @@ -339,6 +341,8 @@ public: if (completionCallback != nullptr) completionCallback(); + + dragging = false; } bool externalDragInit (::Window window, bool text, const String& str, std::function&& cb) @@ -566,12 +570,23 @@ private: ComponentPeer::DragInfo dragInfoCopy (dragInfo); sendDragAndDropFinish(); + resetDragAndDrop(); if (! dragInfoCopy.isEmpty()) if (auto* peer = getPeerFor (windowH)) peer->handleDragDrop (dragInfoCopy); } + void resetDragAndDrop() + { + dragInfo.clear(); + dragInfo.position = Point (-1, -1); + dragAndDropCurrentMimeType = 0; + dragAndDropSourceWindow = 0; + srcMimeTypeAtomList.clear(); + finishAfterDropDataReceived = false; + } + //============================================================================== ::Window windowH = 0, targetWindow = 0, dragAndDropSourceWindow = 0;