From fdd9eb8eeb016e25f8f6be093c561c4523f001c6 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 3 Nov 2021 15:10:33 +0000 Subject: [PATCH] X11: Correctly reset drag and drop state when drag has ended --- .../native/x11/juce_linux_X11_DragAndDrop.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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;