src/macosx/native/sun/awt/CDropTarget.m
Print this page
@@ -79,13 +79,12 @@
if (control != nil) {
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
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 {
// This would be an error.
[self release];
@@ -175,10 +174,14 @@
- (void)dealloc
{
DLog2(@"[CDropTarget dealloc]: %@\n", self);
+ if(sCurrentDropTarget == self) {
+ sCurrentDropTarget = nil;
+ }
+
[fView release];
fView = nil;
[super dealloc];
}
@@ -488,11 +491,14 @@
jlongArray formats = sDraggingFormats;
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) {
// Initialize drag operation:
sDragOperation = NSDragOperationNone;
@@ -508,15 +514,10 @@
[DnDUtilities mapJavaDragOperationToNS:dropAction] : NSDragOperationGeneric);
// 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:
//if (sDraggingError == TRUE)
// [NSException raise:NSGenericException format:@"[CDropTarget draggingEntered] failed."];
@@ -606,15 +607,13 @@
if (sDraggingExited == FALSE && sDraggingError == FALSE) {
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]
// -draggingExited: can be called both by the AppKit and by -performDragOperation: but shouldn't execute
// twice per drop since cleanup code like that in swing/plaf/basic/BasicDropTargetListener would throw NPEs.