From 12b0a90c5554fa04b0177e2f7ac6f8208b01d034 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 1 May 2019 11:34:09 +0100 Subject: [PATCH] Linux: Fixed drag and drop when dragging in the same window that started the operation --- .../native/juce_linux_X11_Windowing.cpp | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp index 401512bb1c..42826ba5f7 100644 --- a/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp @@ -3034,21 +3034,10 @@ private: if (targetWindow == None) return; - GetXProperty prop (display, targetWindow, atoms->XdndAware, - 0, 2, false, AnyPropertyType); + dragState->xdndVersion = getDnDVersionForWindow (targetWindow); - if (prop.success - && prop.data != None - && prop.actualFormat == 32 - && prop.numItems == 1) - { - dragState->xdndVersion = jmin ((int) prop.data[0], (int) atoms->DndVersion); - } - else - { - dragState->xdndVersion = -1; + if (dragState->xdndVersion == -1) return; - } sendExternalDragAndDropEnter (targetWindow); dragState->targetWindow = targetWindow; @@ -3253,6 +3242,17 @@ private: return dndAwarePropFound; } + int getDnDVersionForWindow (Window targetWindow) + { + GetXProperty prop (display, targetWindow, atoms->XdndAware, + 0, 2, false, AnyPropertyType); + + if (prop.success && prop.data != None && prop.actualFormat == 32 && prop.numItems == 1) + return jmin ((int) prop.data[0], (int) atoms->DndVersion); + + return -1; + } + Window externalFindDragTargetWindow (Window targetWindow) { if (targetWindow == None) @@ -3297,7 +3297,11 @@ private: dragState->allowedTypes.size()); dragState->dragging = true; + dragState->xdndVersion = getDnDVersionForWindow (dragState->targetWindow); + + sendExternalDragAndDropEnter (dragState->targetWindow); handleExternalDragMotionNotify(); + return true; }