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; }