From 12de7e1139ab3f280a5080c5ff057a75353a8f58 Mon Sep 17 00:00:00 2001 From: duncanmcqueen Date: Wed, 14 Oct 2026 08:26:59 -0500 Subject: [PATCH] DragSource: make a new drag context for each drag startDrag() made the drag source context peer and the context only when its fields were null, so every later drag reused the context of the first drag, with its trigger event and its Transferable. Make a new peer and a new context for each drag. Co-Authored-By: Claude Opus 5.5 Signed-off-by: duncanmcqueen --- java/awt/dnd/DragSource.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/java/awt/dnd/DragSource.java b/java/awt/dnd/DragSource.java index af8b376684..bd8d4133d9 100644 --- a/java/awt/dnd/DragSource.java +++ b/java/awt/dnd/DragSource.java @@ -144,15 +144,11 @@ public void startDrag(DragGestureEvent trigger, Cursor dragCursor, { flavorMap = map; - if (peer == null) - peer = Toolkit.getDefaultToolkit().createDragSourceContextPeer(trigger); - - if (context == null) - context = createDragSourceContext(peer, trigger, - dragCursor, - dragImage, - imageOffset, trans, - dsl); + // Each drag gets its own peer and context; reusing the first ones + // would drag the first Transferable again. + peer = Toolkit.getDefaultToolkit().createDragSourceContextPeer(trigger); + context = createDragSourceContext(peer, trigger, dragCursor, + dragImage, imageOffset, trans, dsl); if (peer == null) throw new InvalidDnDOperationException();