jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c
changeset 12047 320a714614e9
parent 11665 98dad53a8ba1
child 12050 28109b684ac0
--- a/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c	Tue Mar 06 10:25:45 2012 +0800
+++ b/jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c	Tue Mar 06 20:34:38 2012 +0000
@@ -73,13 +73,28 @@
     return isHeadless;
 }
 
+/*
+ * Pathnames to the various awt toolkits
+ */
+
+#ifdef MACOSX
+  #define XAWT_PATH "/xawt/libawt_xawt.dylib"
+  #define LWAWT_PATH "/lwawt/liblwawt.dylib"
+  #define DEFAULT_PATH LWAWT_PATH
+  #define HEADLESS_PATH "/headless/libawt_headless.dylib"
+#else
+  #define XAWT_PATH "/libawt_xawt.so"
+  #define DEFAULT_PATH XAWT_PATH
+  #define HEADLESS_PATH "/libawt_headless.so"
+#endif
+
 jint
 AWT_OnLoad(JavaVM *vm, void *reserved)
 {
     Dl_info dlinfo;
     char buf[MAXPATHLEN];
     int32_t len;
-    char *p;
+    char *p, *tk;
     JNI_OnLoad_type *JNI_OnLoad_ptr;
     struct utsname name;
     JNIEnv *env = (JNIEnv *)JNU_GetEnv(vm, JNI_VERSION_1_2);
@@ -89,6 +104,8 @@
     int XAWT = 0;
     jstring toolkit = NULL;
     jstring propname = NULL;
+    jstring fmanager = NULL;
+    jstring fmProp = NULL;
 
     if (awtHandle != NULL) {
         /* Avoid several loading attempts */
@@ -111,30 +128,44 @@
      */
 
     propname = (*env)->NewStringUTF(env, "awt.toolkit");
+    fmProp = (*env)->NewStringUTF(env, "sun.font.fontmanager");
+    tk = DEFAULT_PATH; /* default value, may be changed below */
+
     /* Check if toolkit is specified in env variable */
     envvar = getenv("AWT_TOOLKIT");
-    if (envvar) {
-        if (strstr(envvar, "XToolkit")) {
-            toolkit = (*env)->NewStringUTF(env, "sun.awt.X11.XToolkit");
-        }
-        /* If user specified toolkit then set java system property */
-        if (toolkit && propname) {
-            JNU_CallStaticMethodByName (env,
-                                        NULL,
-                                        "java/lang/System",
-                                        "setProperty",
-                                        "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
-                                        propname,toolkit);
-        }
+    if (envvar && (strstr(envvar, "XToolkit"))) {
+        toolkit = (*env)->NewStringUTF(env, "sun.awt.X11.XToolkit");
+        tk = XAWT_PATH;
+        fmanager = (*env)->NewStringUTF(env, "sun.awt.X11FontManager");
+#ifdef MACOSX
+    } else {
+        fmanager = (*env)->NewStringUTF(env, "sun.font.CFontManager");
+        tk = LWAWT_PATH;
+#endif
+    }
+    /* If user specified toolkit then set java system property */
+    if (toolkit && propname) {
+        JNU_CallStaticMethodByName (env,
+                    NULL,
+                    "java/lang/System",
+                    "setProperty",
+                    "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
+                    propname,toolkit);
+    }
+    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 */
     if (AWTIsHeadless()) {
-        strncpy(p, "/libawt_headless.so", MAXPATHLEN-len-1);
-    } else {
-        /* Default AWT Toolkit on Linux and Solaris is XAWT. */
-        strncpy(p, "/libawt_xawt.so", MAXPATHLEN-len-1);
+        tk = HEADLESS_PATH;
     }
+    strncpy(p, tk, MAXPATHLEN-len-1);
 
     if (toolkit) {
         (*env)->DeleteLocalRef(env, toolkit);
@@ -142,6 +173,12 @@
     if (propname) {
         (*env)->DeleteLocalRef(env, propname);
     }
+    if (fmProp) {
+        (*env)->DeleteLocalRef(env, fmProp);
+    }
+    if (fmanager) {
+        (*env)->DeleteLocalRef(env, fmanager);
+    }
 
     JNU_CallStaticMethodByName(env, NULL, "java/lang/System", "load",
                                "(Ljava/lang/String;)V",