< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.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 54097 : 8259869: [macOS] Remove desktop module dependencies on JNF Reference APIs
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion

*** 28,58 **** #import "sun_lwawt_macosx_CInputMethod.h" #import "sun_lwawt_macosx_CInputMethodDescriptor.h" #import "ThreadUtilities.h" #import "AWTView.h" - #import <JavaNativeFoundation/JavaNativeFoundation.h> #import <JavaRuntimeSupport/JavaRuntimeSupport.h> #define JAVA_LIST @"JAVA_LIST" #define CURRENT_KB_DESCRIPTION @"CURRENT_KB_DESCRIPTION" - static JNF_CLASS_CACHE(jc_localeClass, "java/util/Locale"); - static JNF_CTOR_CACHE(jm_localeCons, jc_localeClass, "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); - static JNF_CLASS_CACHE(jc_arrayListClass, "java/util/ArrayList"); - static JNF_CTOR_CACHE(jm_arrayListCons, jc_arrayListClass, "()V"); - static JNF_MEMBER_CACHE(jm_listAdd, jc_arrayListClass, "add", "(Ljava/lang/Object;)Z"); - static JNF_MEMBER_CACHE(jm_listContains, jc_arrayListClass, "contains", "(Ljava/lang/Object;)Z"); - - - // // NOTE: This returns a JNI Local Ref. Any code that calls must call DeleteLocalRef with the return value. // static jobject CreateLocaleObjectFromNSString(JNIEnv *env, NSString *name) { // Break apart the string into its components. // First, duplicate the NSString into a C string, since we're going to modify it. char * language = strdup([name UTF8String]); char * country; char * variant; --- 28,51 ---- #import "sun_lwawt_macosx_CInputMethod.h" #import "sun_lwawt_macosx_CInputMethodDescriptor.h" #import "ThreadUtilities.h" #import "AWTView.h" + #import "JNIUtilities.h" #import <JavaRuntimeSupport/JavaRuntimeSupport.h> #define JAVA_LIST @"JAVA_LIST" #define CURRENT_KB_DESCRIPTION @"CURRENT_KB_DESCRIPTION" // // NOTE: This returns a JNI Local Ref. Any code that calls must call DeleteLocalRef with the return value. // static jobject CreateLocaleObjectFromNSString(JNIEnv *env, NSString *name) { + DECLARE_CLASS_RETURN(jc_localeClass, "java/util/Locale", NULL); + DECLARE_METHOD_RETURN(jm_localeCons, jc_localeClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", NULL); // Break apart the string into its components. // First, duplicate the NSString into a C string, since we're going to modify it. char * language = strdup([name UTF8String]); char * country; char * variant;
*** 75,86 **** if (langObj != NULL) { jobject ctryObj = (*env)->NewStringUTF(env, country); if(ctryObj != NULL) { jobject vrntObj = (*env)->NewStringUTF(env, variant); if (vrntObj != NULL) { ! localeObj = JNFNewObject(env, jm_localeCons,langObj, ctryObj, vrntObj); (*env)->DeleteLocalRef(env, vrntObj); } (*env)->DeleteLocalRef(env, ctryObj); } (*env)->DeleteLocalRef(env, langObj); --- 68,80 ---- if (langObj != NULL) { jobject ctryObj = (*env)->NewStringUTF(env, country); if(ctryObj != NULL) { jobject vrntObj = (*env)->NewStringUTF(env, variant); if (vrntObj != NULL) { ! localeObj = (*env)->NewObject(env, jc_localeClass, jm_localeCons,langObj, ctryObj, vrntObj); + CHECK_EXCEPTION(); (*env)->DeleteLocalRef(env, vrntObj); } (*env)->DeleteLocalRef(env, ctryObj); } (*env)->DeleteLocalRef(env, langObj);
*** 115,131 **** if (!inputMethodController) return; [inputMethodController performSelector:@selector(setCurrentInputMethodForLocale) withObject:theLocale]; } ! + (void) _nativeNotifyPeerWithView:(AWTView *)view inputMethod:(JNFJObjectWrapper *) inputMethod { AWT_ASSERT_APPKIT_THREAD; if (!view) return; if (!inputMethod) return; ! [view setInputMethod:[inputMethod jObject]]; } + (void) _nativeEndComposition:(AWTView *)view { if (view == nil) return; --- 109,125 ---- if (!inputMethodController) return; [inputMethodController performSelector:@selector(setCurrentInputMethodForLocale) withObject:theLocale]; } ! + (void) _nativeNotifyPeerWithView:(AWTView *)view inputMethod:(jobject) inputMethod { AWT_ASSERT_APPKIT_THREAD; if (!view) return; if (!inputMethod) return; ! [view setInputMethod:inputMethod]; // inputMethod is a GlobalRef } + (void) _nativeEndComposition:(AWTView *)view { if (view == nil) return;
*** 155,176 **** (JNIEnv *env, jclass klass) { if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSString *keyboardInfo = NULL; ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ keyboardInfo = [inputMethodController performSelector:@selector(currentInputMethodName)]; [keyboardInfo retain]; }]; if (keyboardInfo == nil) return NULL; ! returnValue = JNFNSToJavaString(env, keyboardInfo); [keyboardInfo release]; ! JNF_COCOA_EXIT(env); return returnValue; } /* * Class: sun_lwawt_macosx_CInputMethod --- 149,170 ---- (JNIEnv *env, jclass klass) { if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSString *keyboardInfo = NULL; ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ keyboardInfo = [inputMethodController performSelector:@selector(currentInputMethodName)]; [keyboardInfo retain]; }]; if (keyboardInfo == nil) return NULL; ! returnValue = NSStringToJavaString(env, keyboardInfo); [keyboardInfo release]; ! JNI_COCOA_EXIT(env); return returnValue; } /* * Class: sun_lwawt_macosx_CInputMethod
*** 178,195 **** * Signature: (JLsun/lwawt/macosx/CInputMethod;)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeNotifyPeer (JNIEnv *env, jobject this, jlong nativePeer, jobject inputMethod) { ! JNF_COCOA_ENTER(env); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); ! JNFJObjectWrapper *inputMethodWrapper = [[JNFJObjectWrapper alloc] initWithJObject:inputMethod withEnv:env]; [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ ! [CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodWrapper]; }]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CInputMethod --- 172,189 ---- * Signature: (JLsun/lwawt/macosx/CInputMethod;)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeNotifyPeer (JNIEnv *env, jobject this, jlong nativePeer, jobject inputMethod) { ! JNI_COCOA_ENTER(env); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); ! jobject inputMethodRef = (*env)->NewGlobalRef(env, inputMethod); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ ! [CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodRef]; }]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CInputMethod
*** 197,214 **** * Signature: (J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition (JNIEnv *env, jobject this, jlong nativePeer) { ! JNF_COCOA_ENTER(env); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ [CInputMethod _nativeEndComposition:view]; }]; ! JNF_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CInputMethod * Method: getNativeLocale --- 191,208 ---- * Signature: (J)V */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition (JNIEnv *env, jobject this, jlong nativePeer) { ! JNI_COCOA_ENTER(env); AWTView *view = (AWTView *)jlong_to_ptr(nativePeer); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ [CInputMethod _nativeEndComposition:view]; }]; ! JNI_COCOA_EXIT(env); } /* * Class: sun_lwawt_macosx_CInputMethod * Method: getNativeLocale
*** 218,228 **** (JNIEnv *env, jobject this) { if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSString *isoAbbreviation; ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ isoAbbreviation = (NSString *) [inputMethodController performSelector:@selector(currentInputMethodLocale)]; [isoAbbreviation retain]; }]; --- 212,222 ---- (JNIEnv *env, jobject this) { if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSString *isoAbbreviation; ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ isoAbbreviation = (NSString *) [inputMethodController performSelector:@selector(currentInputMethodLocale)]; [isoAbbreviation retain]; }];
*** 237,258 **** sLastKeyboardStr = [isoAbbreviation retain]; jobject localObj = CreateLocaleObjectFromNSString(env, isoAbbreviation); [isoAbbreviation release]; if (sLastKeyboardLocaleObj) { ! JNFDeleteGlobalRef(env, sLastKeyboardLocaleObj); sLastKeyboardLocaleObj = NULL; } if (localObj != NULL) { ! sLastKeyboardLocaleObj = JNFNewGlobalRef(env, localObj); (*env)->DeleteLocalRef(env, localObj); } } returnValue = sLastKeyboardLocaleObj; ! JNF_COCOA_EXIT(env); return returnValue; } /* --- 231,252 ---- sLastKeyboardStr = [isoAbbreviation retain]; jobject localObj = CreateLocaleObjectFromNSString(env, isoAbbreviation); [isoAbbreviation release]; if (sLastKeyboardLocaleObj) { ! (*env)->DeleteGlobalRef(env, sLastKeyboardLocaleObj); sLastKeyboardLocaleObj = NULL; } if (localObj != NULL) { ! sLastKeyboardLocaleObj = (*env)->NewGlobalRef(env, localObj); (*env)->DeleteLocalRef(env, localObj); } } returnValue = sLastKeyboardLocaleObj; ! JNI_COCOA_EXIT(env); return returnValue; } /*
*** 261,280 **** * Signature: (Ljava/lang/String;Z)Z */ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CInputMethod_setNativeLocale (JNIEnv *env, jobject this, jstring locale, jboolean isActivating) { ! JNF_COCOA_ENTER(env); ! NSString *localeStr = JNFJavaToNSString(env, locale); [localeStr retain]; [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [CInputMethod setKeyboardLayout:localeStr]; }]; [localeStr release]; ! JNF_COCOA_EXIT(env); return JNI_TRUE; } /* * Class: sun_lwawt_macosx_CInputMethodDescriptor --- 255,274 ---- * Signature: (Ljava/lang/String;Z)Z */ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CInputMethod_setNativeLocale (JNIEnv *env, jobject this, jstring locale, jboolean isActivating) { ! JNI_COCOA_ENTER(env); ! NSString *localeStr = JavaStringToNSString(env, locale); [localeStr retain]; [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ [CInputMethod setKeyboardLayout:localeStr]; }]; [localeStr release]; ! JNI_COCOA_EXIT(env); return JNI_TRUE; } /* * Class: sun_lwawt_macosx_CInputMethodDescriptor
*** 293,330 **** * Signature: ()[Ljava/util/Locale; */ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethodDescriptor_nativeGetAvailableLocales (JNIEnv *env, jclass klass) { if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSArray *selectableArray = nil; ! JNF_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ selectableArray = (NSArray *)[inputMethodController performSelector:@selector(availableInputMethodLocales)]; [selectableArray retain]; }]; if (selectableArray == nil) return NULL; // Create an ArrayList to return back to the caller. ! returnValue = JNFNewObject(env, jm_arrayListCons); for(NSString *locale in selectableArray) { jobject localeObj = CreateLocaleObjectFromNSString(env, locale); if (localeObj == NULL) { break; } ! if (JNFCallBooleanMethod(env, returnValue, jm_listContains, localeObj) == JNI_FALSE) { ! JNFCallBooleanMethod(env, returnValue, jm_listAdd, localeObj); } (*env)->DeleteLocalRef(env, localeObj); } [selectableArray release]; ! JNF_COCOA_EXIT(env); return returnValue; } --- 287,332 ---- * Signature: ()[Ljava/util/Locale; */ JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethodDescriptor_nativeGetAvailableLocales (JNIEnv *env, jclass klass) { + DECLARE_CLASS_RETURN(jc_arrayListClass, "java/util/ArrayList", NULL); + DECLARE_METHOD_RETURN(jm_arrayListCons, jc_arrayListClass, "<init>", "()V", NULL); + DECLARE_METHOD_RETURN(jm_listAdd, jc_arrayListClass, "add", "(Ljava/lang/Object;)Z", NULL); + DECLARE_METHOD_RETURN(jm_listContains, jc_arrayListClass, "contains", "(Ljava/lang/Object;)Z", NULL); + if (!inputMethodController) return NULL; jobject returnValue = 0; __block NSArray *selectableArray = nil; ! JNI_COCOA_ENTER(env); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ selectableArray = (NSArray *)[inputMethodController performSelector:@selector(availableInputMethodLocales)]; [selectableArray retain]; }]; if (selectableArray == nil) return NULL; // Create an ArrayList to return back to the caller. ! returnValue = (*env)->NewObject(env, jc_arrayListClass, jm_arrayListCons); ! CHECK_EXCEPTION_NULL_RETURN(returnValue, NULL); for(NSString *locale in selectableArray) { jobject localeObj = CreateLocaleObjectFromNSString(env, locale); if (localeObj == NULL) { break; } ! if ((*env)->CallBooleanMethod(env, returnValue, jm_listContains, localeObj) == JNI_FALSE) { ! if ((*env)->ExceptionOccurred(env)) (*env)->ExceptionClear(env); ! (*env)->CallBooleanMethod(env, returnValue, jm_listAdd, localeObj); } + if ((*env)->ExceptionOccurred(env)) (*env)->ExceptionClear(env); (*env)->DeleteLocalRef(env, localeObj); } [selectableArray release]; ! JNI_COCOA_EXIT(env); return returnValue; }
< prev index next >