< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m

Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54096 : 8259651: [macOS] Replace JNF_COCOA_ENTER/EXIT macros
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion

*** 27,37 **** #import <pthread.h> #import <objc/runtime.h> #import <Cocoa/Cocoa.h> #import <Security/AuthSession.h> ! #include "jni_util.h" #import "LWCToolkit.h" #import "ThreadUtilities.h" #import "CSystemColors.h" #import "NSApplicationAWT.h" #import "PropertiesUtilities.h" --- 27,37 ---- #import <pthread.h> #import <objc/runtime.h> #import <Cocoa/Cocoa.h> #import <Security/AuthSession.h> ! #import "JNIUtilities.h" #import "LWCToolkit.h" #import "ThreadUtilities.h" #import "CSystemColors.h" #import "NSApplicationAWT.h" #import "PropertiesUtilities.h"
*** 182,211 **** [super dealloc]; } - (void)perform { JNIEnv* env = [ThreadUtilities getJNIEnvUncached]; ! static JNF_CLASS_CACHE(sjc_Runnable, "java/lang/Runnable"); ! static JNF_MEMBER_CACHE(jm_Runnable_run, sjc_Runnable, "run", "()V"); ! JNFCallVoidMethod(env, self.runnable, jm_Runnable_run); [self release]; } @end void setBusy(BOOL busy) { AWT_ASSERT_APPKIT_THREAD; JNIEnv *env = [ThreadUtilities getJNIEnv]; ! static JNF_CLASS_CACHE(jc_AWTAutoShutdown, "sun/awt/AWTAutoShutdown"); if (busy) { ! static JNF_STATIC_MEMBER_CACHE(jm_notifyBusyMethod, jc_AWTAutoShutdown, "notifyToolkitThreadBusy", "()V"); ! JNFCallStaticVoidMethod(env, jm_notifyBusyMethod); } else { ! static JNF_STATIC_MEMBER_CACHE(jm_notifyFreeMethod, jc_AWTAutoShutdown, "notifyToolkitThreadFree", "()V"); ! JNFCallStaticVoidMethod(env, jm_notifyFreeMethod); } } static void setUpAWTAppKit(BOOL installObservers) { if (installObservers) { --- 182,213 ---- [super dealloc]; } - (void)perform { JNIEnv* env = [ThreadUtilities getJNIEnvUncached]; ! DECLARE_CLASS(sjc_Runnable, "java/lang/Runnable"); ! DECLARE_METHOD(jm_Runnable_run, sjc_Runnable, "run", "()V"); ! (*env)->CallVoidMethod(env, self.runnable, jm_Runnable_run); ! CHECK_EXCEPTION(); [self release]; } @end void setBusy(BOOL busy) { AWT_ASSERT_APPKIT_THREAD; JNIEnv *env = [ThreadUtilities getJNIEnv]; ! DECLARE_CLASS(jc_AWTAutoShutdown, "sun/awt/AWTAutoShutdown"); if (busy) { ! DECLARE_STATIC_METHOD(jm_notifyBusyMethod, jc_AWTAutoShutdown, "notifyToolkitThreadBusy", "()V"); ! (*env)->CallStaticVoidMethod(env, jc_AWTAutoShutdown, jm_notifyBusyMethod); } else { ! DECLARE_STATIC_METHOD(jm_notifyFreeMethod, jc_AWTAutoShutdown, "notifyToolkitThreadFree", "()V"); ! (*env)->CallStaticVoidMethod(env, jc_AWTAutoShutdown, jm_notifyFreeMethod); } + CHECK_EXCEPTION(); } static void setUpAWTAppKit(BOOL installObservers) { if (installObservers) {
*** 241,253 **** setBusy(YES); } JNIEnv* env = [ThreadUtilities getJNIEnv]; ! static JNF_CLASS_CACHE(jc_LWCToolkit, "sun/lwawt/macosx/LWCToolkit"); ! static JNF_STATIC_MEMBER_CACHE(jsm_installToolkitThreadInJava, jc_LWCToolkit, "installToolkitThreadInJava", "()V"); ! JNFCallStaticVoidMethod(env, jsm_installToolkitThreadInJava); } BOOL isSWTInWebStart(JNIEnv* env) { NSString *swtWebStart = [PropertiesUtilities javaSystemPropertyForKey:@"com.apple.javaws.usingSWT" withEnv:env]; return [@"true" isCaseInsensitiveLike:swtWebStart]; --- 243,257 ---- setBusy(YES); } JNIEnv* env = [ThreadUtilities getJNIEnv]; ! DECLARE_CLASS(jc_LWCToolkit, "sun/lwawt/macosx/LWCToolkit"); ! DECLARE_STATIC_METHOD(jsm_installToolkitThreadInJava, jc_LWCToolkit, "installToolkitThreadInJava", "()V"); ! (*env)->CallStaticVoidMethod(env, jc_LWCToolkit, jsm_installToolkitThreadInJava); ! CHECK_EXCEPTION(); ! } BOOL isSWTInWebStart(JNIEnv* env) { NSString *swtWebStart = [PropertiesUtilities javaSystemPropertyForKey:@"com.apple.javaws.usingSWT" withEnv:env]; return [@"true" isCaseInsensitiveLike:swtWebStart];
*** 450,460 **** } else { // could happen if we are embedded inside SWT application, // in this case just spin a single empty block through // the event loop to give it a chance to process pending events ! [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){}]; } if (([AWTToolkit getEventCount] - currentEventNum) != 0) { return JNI_TRUE; } --- 454,464 ---- } else { // could happen if we are embedded inside SWT application, // in this case just spin a single empty block through // the event loop to give it a chance to process pending events ! [ThreadUtilities performOnMainThreadWaiting:YES block:^(){}]; } if (([AWTToolkit getEventCount] - currentEventNum) != 0) { return JNI_TRUE; }
*** 468,480 **** * Signature: ()J */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_flushNativeSelectors (JNIEnv *env, jclass clz) { ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){}]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: beep --- 472,484 ---- * Signature: ()J */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_flushNativeSelectors (JNIEnv *env, jclass clz) { ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){}]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: beep
*** 511,521 **** jint len = (*env)->GetArrayLength(env, jColors); UInt32 colorsArray[len]; UInt32 *colors = colorsArray; ! [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ NSUInteger i; for (i = 0; i < len; i++) { colors[i] = RGB([CSystemColors getColor:i useAppleColor:useAppleColors]); } }]; --- 515,525 ---- jint len = (*env)->GetArrayLength(env, jColors); UInt32 colorsArray[len]; UInt32 *colors = colorsArray; ! [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ NSUInteger i; for (i = 0; i < len; i++) { colors[i] = RGB([CSystemColors getColor:i useAppleColor:useAppleColors]); } }];
*** 535,549 **** * Signature: ([I[I)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_loadNativeColors (JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors) { ! JNF_COCOA_ENTER(env); if (doLoadNativeColors(env, jSystemColors, NO)) { doLoadNativeColors(env, jAppleColors, YES); } ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: createAWTRunLoopMediator --- 539,553 ---- * Signature: ([I[I)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_loadNativeColors (JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors) { ! JNI_COCOA_ENTER(env); if (doLoadNativeColors(env, jSystemColors, NO)) { doLoadNativeColors(env, jAppleColors, YES); } ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: createAWTRunLoopMediator
*** 554,568 **** { AWT_ASSERT_APPKIT_THREAD; jlong result; ! JNF_COCOA_ENTER(env); // We double retain because this object is owned by both main thread and "other" thread // We release in both doAWTRunLoop and stopAWTRunLoop result = ptr_to_jlong([[[AWTRunLoopObject alloc] init] retain]); ! JNF_COCOA_EXIT(env); return result; } /* --- 558,572 ---- { AWT_ASSERT_APPKIT_THREAD; jlong result; ! JNI_COCOA_ENTER(env); // We double retain because this object is owned by both main thread and "other" thread // We release in both doAWTRunLoop and stopAWTRunLoop result = ptr_to_jlong([[[AWTRunLoopObject alloc] init] retain]); ! JNI_COCOA_EXIT(env); return result; } /*
*** 572,591 **** */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoopImpl (JNIEnv *env, jclass clz, jlong mediator, jboolean processEvents, jboolean inAWT) { AWT_ASSERT_APPKIT_THREAD; ! JNF_COCOA_ENTER(env); AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); if (mediatorObject == nil) return; // Don't use acceptInputForMode because that doesn't setup autorelease pools properly BOOL isRunning = true; while (![mediatorObject shouldEndRunLoop] && isRunning) { ! isRunning = [[NSRunLoop currentRunLoop] runMode:(inAWT ? [JNFRunLoop javaRunLoopMode] : NSDefaultRunLoopMode) beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.010]]; if (processEvents) { //We do not spin a runloop here as date is nil, so does not matter which mode to use // Processing all events excluding NSApplicationDefined which need to be processed // on the main loop only (those events are intended for disposing resources) --- 576,595 ---- */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoopImpl (JNIEnv *env, jclass clz, jlong mediator, jboolean processEvents, jboolean inAWT) { AWT_ASSERT_APPKIT_THREAD; ! JNI_COCOA_ENTER(env); AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); if (mediatorObject == nil) return; // Don't use acceptInputForMode because that doesn't setup autorelease pools properly BOOL isRunning = true; while (![mediatorObject shouldEndRunLoop] && isRunning) { ! isRunning = [[NSRunLoop currentRunLoop] runMode:(inAWT ? [ThreadUtilities javaRunLoopMode] : NSDefaultRunLoopMode) beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.010]]; if (processEvents) { //We do not spin a runloop here as date is nil, so does not matter which mode to use // Processing all events excluding NSApplicationDefined which need to be processed // on the main loop only (those events are intended for disposing resources)
*** 598,645 **** } } } [mediatorObject release]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: stopAWTRunLoop * Signature: (J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_stopAWTRunLoop (JNIEnv *env, jclass clz, jlong mediator) { ! JNF_COCOA_ENTER(env); AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); [ThreadUtilities performOnMainThread:@selector(endRunLoop) on:mediatorObject withObject:nil waitUntilDone:NO]; [mediatorObject release]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: performOnMainThreadAfterDelay * Signature: (Ljava/lang/Runnable;J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_performOnMainThreadAfterDelay (JNIEnv *env, jclass clz, jobject runnable, jlong delay) { ! JNF_COCOA_ENTER(env); jobject gRunnable = (*env)->NewGlobalRef(env, runnable); CHECK_NULL(gRunnable); [ThreadUtilities performOnMainThreadWaiting:NO block:^() { JavaRunnable* performer = [[JavaRunnable alloc] initWithRunnable:gRunnable]; [performer performSelector:@selector(perform) withObject:nil afterDelay:(delay/1000.0)]; }]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit --- 602,649 ---- } } } [mediatorObject release]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: stopAWTRunLoop * Signature: (J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_stopAWTRunLoop (JNIEnv *env, jclass clz, jlong mediator) { ! JNI_COCOA_ENTER(env); AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator); [ThreadUtilities performOnMainThread:@selector(endRunLoop) on:mediatorObject withObject:nil waitUntilDone:NO]; [mediatorObject release]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: performOnMainThreadAfterDelay * Signature: (Ljava/lang/Runnable;J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_performOnMainThreadAfterDelay (JNIEnv *env, jclass clz, jobject runnable, jlong delay) { ! JNI_COCOA_ENTER(env); jobject gRunnable = (*env)->NewGlobalRef(env, runnable); CHECK_NULL(gRunnable); [ThreadUtilities performOnMainThreadWaiting:NO block:^() { JavaRunnable* performer = [[JavaRunnable alloc] initWithRunnable:gRunnable]; [performer performSelector:@selector(perform) withObject:nil afterDelay:(delay/1000.0)]; }]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit
*** 648,658 **** */ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isCapsLockOn (JNIEnv *env, jobject self) { __block jboolean isOn = JNI_FALSE; ! [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ NSUInteger modifiers = [NSEvent modifierFlags]; isOn = (modifiers & NSAlphaShiftKeyMask) != 0; }]; return isOn; --- 652,662 ---- */ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isCapsLockOn (JNIEnv *env, jobject self) { __block jboolean isOn = JNI_FALSE; ! [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ NSUInteger modifiers = [NSEvent modifierFlags]; isOn = (modifiers & NSAlphaShiftKeyMask) != 0; }]; return isOn;
*** 666,682 **** JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive (JNIEnv *env, jclass clazz) { __block jboolean active = JNI_FALSE; ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^() { active = (jboolean)[NSRunningApplication currentApplication].active; }]; ! JNF_COCOA_EXIT(env); return active; } /* --- 670,686 ---- JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive (JNIEnv *env, jclass clazz) { __block jboolean active = JNI_FALSE; ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^() { active = (jboolean)[NSRunningApplication currentApplication].active; }]; ! JNI_COCOA_EXIT(env); return active; } /*
*** 685,701 **** * Signature: ()V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_activateApplicationIgnoringOtherApps (JNIEnv *env, jclass clazz) { ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ if(![NSApp isActive]){ [NSApp activateIgnoringOtherApps:YES]; } }]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_awt_SunToolkit --- 689,705 ---- * Signature: ()V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_activateApplicationIgnoringOtherApps (JNIEnv *env, jclass clazz) { ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ if(![NSApp isActive]){ [NSApp activateIgnoringOtherApps:YES]; } }]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_awt_SunToolkit
*** 721,731 **** JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath (JNIEnv *env, jclass obj, jboolean noType1) { ! return JNFNSToJavaString(env, @"/Library/Fonts"); } // This isn't yet used on unix, the implementation is added since shared // code calls this method in preparation for future use. JNIEXPORT void JNICALL --- 725,735 ---- JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath (JNIEnv *env, jclass obj, jboolean noType1) { ! return NSStringToJavaString(env, @"/Library/Fonts"); } // This isn't yet used on unix, the implementation is added since shared // code calls this method in preparation for future use. JNIEXPORT void JNICALL
*** 742,760 **** */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_initIDs (JNIEnv *env, jclass klass) { ! JNF_COCOA_ENTER(env) gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS; jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent"); CHECK_NULL(inputEventClazz); jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I"); CHECK_NULL(getButtonDownMasksID); jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID); jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE); CHECK_NULL(tmp); gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons); if (gButtonDownMasks == NULL) { --- 746,765 ---- */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_initIDs (JNIEnv *env, jclass klass) { ! JNI_COCOA_ENTER(env); gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS; jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent"); CHECK_NULL(inputEventClazz); jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I"); CHECK_NULL(getButtonDownMasksID); jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID); + CHECK_EXCEPTION(); jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE); CHECK_NULL(tmp); gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons); if (gButtonDownMasks == NULL) {
*** 770,791 **** } (*env)->ReleaseIntArrayElements(env, obj, tmp, 0); (*env)->DeleteLocalRef(env, obj); ! JNF_COCOA_EXIT(env) } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: initAppkit * Signature: (Ljava/lang/ThreadGroup;)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_initAppkit (JNIEnv *env, jclass klass, jobject appkitThreadGroup, jboolean headless) { ! JNF_COCOA_ENTER(env) [ThreadUtilities setAppkitThreadGroup:(*env)->NewGlobalRef(env, appkitThreadGroup)]; // Launcher sets this env variable if -XstartOnFirstThread is specified char envVar[80]; --- 775,796 ---- } (*env)->ReleaseIntArrayElements(env, obj, tmp, 0); (*env)->DeleteLocalRef(env, obj); ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_LWCToolkit * Method: initAppkit * Signature: (Ljava/lang/ThreadGroup;)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_initAppkit (JNIEnv *env, jclass klass, jobject appkitThreadGroup, jboolean headless) { ! JNI_COCOA_ENTER(env); [ThreadUtilities setAppkitThreadGroup:(*env)->NewGlobalRef(env, appkitThreadGroup)]; // Launcher sets this env variable if -XstartOnFirstThread is specified char envVar[80];
*** 799,809 **** forceEmbeddedMode = YES; } [AWTStarter start:headless ? YES : NO]; ! JNF_COCOA_EXIT(env) } JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { OSXAPP_SetJavaVM(vm); --- 804,814 ---- forceEmbeddedMode = YES; } [AWTStarter start:headless ? YES : NO]; ! JNI_COCOA_EXIT(env); } JNIEXPORT jint JNICALL DEF_JNI_OnLoad(JavaVM *vm, void *reserved) { OSXAPP_SetJavaVM(vm);
< prev index next >