8035147: [macosx] Drag and Drop tests are failing with -Xchech:jni

Reviewed-by: serb, azvegint
This commit is contained in:
Petr Pchelko 2014-02-18 16:30:57 +04:00
parent 9d1b732ccb
commit d6399044d7
4 changed files with 30 additions and 26 deletions

View File

@ -141,7 +141,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
// Create native dragging source:
final long nativeDragSource = createNativeDragSource(component, nativeViewPtr, transferable, triggerEvent,
(int) (dragOrigin.getX()), (int) (dragOrigin.getY()), extModifiers,
clickCount, timestamp, fDragCImage, dragImageOffset.x, dragImageOffset.y,
clickCount, timestamp, fDragCImage != null ? fDragCImage.ptr : 0L, dragImageOffset.x, dragImageOffset.y,
getDragSourceContext().getSourceActions(), formats, formatMap);
if (nativeDragSource == 0)
@ -484,7 +484,7 @@ public final class CDragSourceContextPeer extends SunDragSourceContextPeer {
// Native support:
private native long createNativeDragSource(Component component, long nativePeer, Transferable transferable,
InputEvent triggerEvent, int dragPosX, int dragPosY, int extModifiers, int clickCount, long timestamp,
CImage nsDragImage, int dragImageOffsetX, int dragImageOffsetY,
long nsDragImagePtr, int dragImageOffsetX, int dragImageOffsetY,
int sourceActions, long[] formats, Map formatMap);
private native void doDragging(long nativeDragSource);

View File

@ -70,7 +70,7 @@
modifiers:(jint)extModifiers
clickCount:(jint)clickCount
timeStamp:(jlong)timeStamp
dragImage:(jobject)jDragImage
dragImage:(jlong)nsDragImagePtr
dragImageOffsetX:(jint)jDragImageOffsetX
dragImageOffsetY:(jint)jDragImageOffsetY
sourceActions:(jint)jSourceActions

View File

@ -97,7 +97,7 @@ static BOOL sNeedsEnter;
modifiers:(jint)extModifiers
clickCount:(jint)clickCount
timeStamp:(jlong)timeStamp
dragImage:(jobject)jDragImage
dragImage:(jlong)nsDragImagePtr
dragImageOffsetX:(jint)jDragImageOffsetX
dragImageOffsetY:(jint)jDragImageOffsetY
sourceActions:(jint)jSourceActions
@ -112,26 +112,21 @@ static BOOL sNeedsEnter;
// Construct the object if we have a valid model for it:
if (control != nil) {
JNIEnv *env = [ThreadUtilities getJNIEnv];
fComponent = JNFNewGlobalRef(env, jComponent);
fDragSourceContextPeer = JNFNewGlobalRef(env, jDragSourceContextPeer);
fTransferable = JNFNewGlobalRef(env, jTransferable);
fTriggerEvent = JNFNewGlobalRef(env, jTrigger);
if (jDragImage) {
JNF_MEMBER_CACHE(nsImagePtr, CImageClass, "ptr", "J");
jlong imgPtr = JNFGetLongField(env, jDragImage, nsImagePtr);
fDragImage = (NSImage*) jlong_to_ptr(imgPtr); // Double-casting prevents compiler 'd$|//
fComponent = jComponent;
fDragSourceContextPeer = jDragSourceContextPeer;
fTransferable = jTransferable;
fTriggerEvent = jTrigger;
if (nsDragImagePtr) {
fDragImage = (NSImage*) jlong_to_ptr(nsDragImagePtr);
[fDragImage retain];
}
fDragImageOffset = NSMakePoint(jDragImageOffsetX, jDragImageOffsetY);
fSourceActions = jSourceActions;
fFormats = JNFNewGlobalRef(env, jFormats);
fFormatMap = JNFNewGlobalRef(env, jFormatMap);
fFormats = jFormats;
fFormatMap = jFormatMap;
fTriggerEventTimeStamp = timeStamp;
fDragPos = NSMakePoint(dragPosX, dragPosY);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -40,30 +40,39 @@
JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CDragSourceContextPeer_createNativeDragSource
(JNIEnv *env, jobject jthis, jobject jcomponent, jlong jnativepeer, jobject jtransferable,
jobject jtrigger, jint jdragposx, jint jdragposy, jint jextmodifiers, jint jclickcount, jlong jtimestamp,
jobject jnsdragimage, jint jdragimageoffsetx, jint jdragimageoffsety,
jlong nsdragimageptr, jint jdragimageoffsetx, jint jdragimageoffsety,
jint jsourceactions, jlongArray jformats, jobject jformatmap)
{
id controlObj = (id) jlong_to_ptr(jnativepeer);
__block CDragSource* dragSource = nil;
JNF_COCOA_ENTER(env);
// Global references are disposed when the DragSource is removed
jobject gComponent = JNFNewGlobalRef(env, jcomponent);
jobject gDragSourceContextPeer = JNFNewGlobalRef(env, jthis);
jobject gTransferable = JNFNewGlobalRef(env, jtransferable);
jobject gTriggerEvent = JNFNewGlobalRef(env, jtrigger);
jlongArray gFormats = JNFNewGlobalRef(env, jformats);
jobject gFormatMap = JNFNewGlobalRef(env, jformatmap);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
dragSource = [[CDragSource alloc] init:jthis
component:jcomponent
dragSource = [[CDragSource alloc] init:gDragSourceContextPeer
component:gComponent
control:controlObj
transferable:jtransferable
triggerEvent:jtrigger
transferable:gTransferable
triggerEvent:gTriggerEvent
dragPosX:jdragposx
dragPosY:jdragposy
modifiers:jextmodifiers
clickCount:jclickcount
timeStamp:jtimestamp
dragImage:jnsdragimage
dragImage:nsdragimageptr
dragImageOffsetX:jdragimageoffsetx
dragImageOffsetY:jdragimageoffsety
sourceActions:jsourceactions
formats:jformats
formatMap:jformatmap];
formats:gFormats
formatMap:gFormatMap];
}];
JNF_COCOA_EXIT(env);