src/solaris/native/sun/awt/awt_LoadLibrary.c

Print this page

        

*** 83,94 **** JNI_OnLoad_type *JNI_OnLoad_ptr; struct utsname name; JNIEnv *env = (JNIEnv *)JNU_GetEnv(vm, JNI_VERSION_1_2); void *v; char *envvar; ! jstring fmanager = NULL; ! jstring fmProp = NULL; if (awtHandle != NULL) { /* Avoid several loading attempts */ return JNI_VERSION_1_2; } --- 83,95 ---- JNI_OnLoad_type *JNI_OnLoad_ptr; struct utsname name; JNIEnv *env = (JNIEnv *)JNU_GetEnv(vm, JNI_VERSION_1_2); void *v; char *envvar; ! jstring toolkit = NULL, grenv = NULL, fmanager = NULL; ! jstring tkProp = NULL, geProp = NULL, fmProp = NULL; ! jboolean forceXToolkit = JNI_FALSE; if (awtHandle != NULL) { /* Avoid several loading attempts */ return JNI_VERSION_1_2; }
*** 102,133 **** p = strrchr(buf, '/'); /* * 1. Set the "sun.font.fontmanager" system property, * 2. Choose the library image name. */ fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager"); /* Check if toolkit is specified in env variable */ - #ifdef MACOSX envvar = getenv("AWT_TOOLKIT"); if (envvar && strstr(envvar, "XToolkit")) { #endif fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager"); tk = "/xawt/libmawt"; #ifdef MACOSX } else { fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager"); tk = "/lwawt/liblwawt"; } #endif if (fmanager && fmProp) { JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", fmProp, fmanager); } /* Calculate library name to load */ #ifndef MACOSX if (AWTIsHeadless()) { strcpy(p, "/headless/libmawt"); } else if (tk) { --- 103,176 ---- p = strrchr(buf, '/'); /* * 1. Set the "sun.font.fontmanager" system property, * 2. Choose the library image name. + * 3. Override the awt.toolkit and java.awt.graphicsenv properties + * if XToolkit is requested via the AWT_TOOLKIT env var. */ + // Defaults are defined in java_props_md.c except for the font manager fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager"); + /* Check if toolkit is specified in env variable */ envvar = getenv("AWT_TOOLKIT"); if (envvar && strstr(envvar, "XToolkit")) { + forceXToolkit = JNI_TRUE; + } + + #ifdef MACOSX + if (forceXToolkit) { #endif + // On non-MACOSX this is the first if() + // On MACOSX the check is always true (see the above if()) + if (forceXToolkit) { + tkProp = (*env)->NewStringUTF(env, "awt.toolkit"); + toolkit = (*env)->NewStringUTF(env, "sun.awt.X11.XToolkit"); + + geProp = (*env)->NewStringUTF(env, "java.awt.graphicsenv"); + grenv = (*env)->NewStringUTF(env, "sun.awt.X11GraphicsEnvironment"); + } fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager"); tk = "/xawt/libmawt"; #ifdef MACOSX } else { fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager"); tk = "/lwawt/liblwawt"; } #endif + + if (toolkit && tkProp) { + JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty", + "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", + tkProp, toolkit); + } + if (grenv && geProp) { + JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty", + "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", + geProp, grenv); + } if (fmanager && fmProp) { JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", fmProp, fmanager); } + #define DELETE_GLOBAL_REF(ref) \ + if (ref) { \ + (*env)->DeleteLocalRef(env, (ref)); \ + (ref) = NULL; \ + } + + DELETE_GLOBAL_REF(toolkit); + DELETE_GLOBAL_REF(tkProp); + DELETE_GLOBAL_REF(grenv); + DELETE_GLOBAL_REF(geProp); + DELETE_GLOBAL_REF(fmanager); + DELETE_GLOBAL_REF(fmProp); + + /* Calculate library name to load */ #ifndef MACOSX if (AWTIsHeadless()) { strcpy(p, "/headless/libmawt"); } else if (tk) {