--- old/src/macosx/native/sun/awt/CDropTarget.m 2013-04-03 18:24:58.000000000 +0400 +++ new/src/macosx/native/sun/awt/CDropTarget.m 2013-04-03 18:24:58.000000000 +0400 @@ -81,9 +81,8 @@ fComponent = JNFNewGlobalRef(env, jcomponent); fDropTarget = JNFNewGlobalRef(env, jdropTarget); - AWTView *awtView = [((NSWindow *) control) contentView]; - fView = [awtView retain]; - [awtView setDropTarget:self]; + fView = [((AWTView *) control) retain]; + [fView setDropTarget:self]; } else { @@ -177,6 +176,10 @@ { DLog2(@"[CDropTarget dealloc]: %@\n", self); + if(sCurrentDropTarget == self) { + sCurrentDropTarget = nil; + } + [fView release]; fView = nil; @@ -490,7 +493,10 @@ JNF_MEMBER_CACHE(handleEnterMessageMethod, jc_CDropTargetContextPeer, "handleEnterMessage", "(Ljava/awt/Component;IIII[JJ)I"); if (sDraggingError == FALSE) { // Double-casting self gets rid of 'different size' compiler warning: - actions = JNFCallIntMethod(env, fDropTargetContextPeer, handleEnterMessageMethod, fComponent, (jint) javaLocation.x, (jint) javaLocation.y, dropAction, actions, formats, ptr_to_jlong(self)); // AWT_THREADING Safe (CToolkitThreadBlockedHandler) + // AWT_THREADING Safe (CToolkitThreadBlockedHandler) + actions = JNFCallIntMethod(env, fDropTargetContextPeer, handleEnterMessageMethod, + fComponent, (jint) javaLocation.x, (jint) javaLocation.y, + dropAction, actions, formats, ptr_to_jlong(self)); } if (sDraggingError == FALSE) { @@ -510,11 +516,6 @@ // Remember the dragOp for no-op'd update messages: sUpdateOperation = dragOp; } - - // If we are in the same process as the sender, make the sender post the appropriate message - if (sender) { - [[CDragSource currentDragSource] postDragEnter]; - } } // 9-11-02 Note: the native event thread would not handle an exception gracefully: @@ -608,11 +609,9 @@ JNF_MEMBER_CACHE(handleExitMessageMethod, jc_CDropTargetContextPeer, "handleExitMessage", "(Ljava/awt/Component;J)V"); if (sDraggingError == FALSE) { DLog3(@" - dragExit: loc native %f, %f\n", sDraggingLocation.x, sDraggingLocation.y); - JNFCallVoidMethod(env, fDropTargetContextPeer, handleExitMessageMethod, fComponent, ptr_to_jlong(self)); // AWT_THREADING Safe (CToolkitThreadBlockedHandler) - // If we are in the same process as the sender, make the sender post the appropriate message - if (sender) { - [[CDragSource currentDragSource] postDragExit]; - } + // AWT_THREADING Safe (CToolkitThreadBlockedHandler) + JNFCallVoidMethod(env, fDropTargetContextPeer, + handleExitMessageMethod, fComponent, ptr_to_jlong(self)); } // 5-27-03 Note: [Radar 3270455]