src/macosx/native/sun/awt/CDragSourceContextPeer.m

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2011, 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * 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 * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 38,71 **** Ljava/awt/event/InputEvent;IIIIJIJIII[JLjava/util/Map;)J */ 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, jint jsourceactions, jlongArray jformats, jobject jformatmap) { id controlObj = (id) jlong_to_ptr(jnativepeer); __block CDragSource* dragSource = nil; JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ ! dragSource = [[CDragSource alloc] init:jthis ! component:jcomponent control:controlObj ! transferable:jtransferable ! triggerEvent:jtrigger dragPosX:jdragposx dragPosY:jdragposy modifiers:jextmodifiers clickCount:jclickcount timeStamp:jtimestamp ! dragImage:jnsdragimage dragImageOffsetX:jdragimageoffsetx dragImageOffsetY:jdragimageoffsety sourceActions:jsourceactions ! formats:jformats ! formatMap:jformatmap]; }]; JNF_COCOA_EXIT(env); if (dragSource) { CFRetain(dragSource); // GC --- 38,80 ---- Ljava/awt/event/InputEvent;IIIIJIJIII[JLjava/util/Map;)J */ 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, ! 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:gDragSourceContextPeer ! component:gComponent control:controlObj ! transferable:gTransferable ! triggerEvent:gTriggerEvent dragPosX:jdragposx dragPosY:jdragposy modifiers:jextmodifiers clickCount:jclickcount timeStamp:jtimestamp ! dragImage:nsdragimageptr dragImageOffsetX:jdragimageoffsetx dragImageOffsetY:jdragimageoffsety sourceActions:jsourceactions ! formats:gFormats ! formatMap:gFormatMap]; }]; JNF_COCOA_EXIT(env); if (dragSource) { CFRetain(dragSource); // GC