< 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 >