1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Linux: Fixed drag and drop when dragging in the same window that started the operation

This commit is contained in:
ed 2019-05-01 11:34:09 +01:00
parent 4e0adb2af8
commit 12b0a90c55

View file

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