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