--- old/src/share/classes/java/awt/dnd/DropTarget.java 2013-08-21 16:02:30.443984200 +0400 +++ new/src/share/classes/java/awt/dnd/DropTarget.java 2013-08-21 16:02:30.277974700 +0400 @@ -351,6 +351,8 @@ * @see #isActive */ public synchronized void dragEnter(DropTargetDragEvent dtde) { + isDraggingInside = true; + if (!active) return; if (dtListener != null) { @@ -421,6 +423,8 @@ * @see #isActive */ public synchronized void dragExit(DropTargetEvent dte) { + isDraggingInside = false; + if (!active) return; if (dtListener != null && active) dtListener.dragExit(dte); @@ -444,6 +448,8 @@ * @see #isActive */ public synchronized void drop(DropTargetDropEvent dtde) { + isDraggingInside = false; + clearAutoscroll(); if (dtListener != null && active) @@ -532,6 +538,10 @@ if (nativePeer != null) ((DropTargetPeer)nativePeer).removeDropTarget(this); + if (isDraggingInside) { + dragExit(new DropTargetEvent(getDropTargetContext())); + } + componentPeer = nativePeer = null; } @@ -855,4 +865,9 @@ */ private transient FlavorMap flavorMap; + + /* + * If the dragging is currently inside this drop target + */ + private transient boolean isDraggingInside; }