--- a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Tue Mar 06 10:25:45 2012 +0800
+++ b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Tue Mar 06 20:34:38 2012 +0000
@@ -40,6 +40,7 @@
#include <jni.h>
#include <jni_util.h>
#include <jvm.h>
+#include <jvm_md.h>
#include <jlong.h>
#include <stdlib.h>
@@ -119,7 +120,7 @@
*/
#define MAXFRAMEBUFFERS 16
-#ifdef __linux__
+#if defined(__linux__) || defined(MACOSX)
typedef struct {
int screen_number;
short x_org;
@@ -424,6 +425,17 @@
{
xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL);
+#ifdef MACOSX
+#define XRENDER_LIB "/usr/X11/lib/libXrender.dylib"
+#else
+#define XRENDER_LIB "libXrender.so"
+#endif
+
+ if (xrenderLibHandle == NULL) {
+ xrenderLibHandle = dlopen(XRENDER_LIB,
+ RTLD_LAZY | RTLD_GLOBAL);
+ }
+
#ifndef __linux__ /* SOLARIS */
if (xrenderLibHandle == NULL) {
xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1",
@@ -568,19 +580,22 @@
}
#ifndef HEADLESS
-#ifdef __linux__
+#if defined(__linux__) || defined(MACOSX)
static void xinerama_init_linux()
{
- void* libHandle = 0;
- char* XineramaLibName= "libXinerama.so.1";
+ void* libHandle = NULL;
int32_t locNumScr = 0;
XineramaScreenInfo *xinInfo;
char* XineramaQueryScreensName = "XineramaQueryScreens";
XineramaQueryScreensFunc* XineramaQueryScreens = NULL;
/* load library */
- libHandle = dlopen(XineramaLibName, RTLD_LAZY | RTLD_GLOBAL);
- if (libHandle != 0) {
+ libHandle = dlopen(VERSIONED_JNI_LIB_NAME("Xinerama", "1"),
+ RTLD_LAZY | RTLD_GLOBAL);
+ if (libHandle == NULL) {
+ libHandle = dlopen(JNI_LIB_NAME("Xinerama"), RTLD_LAZY | RTLD_GLOBAL);
+ }
+ if (libHandle != NULL) {
XineramaQueryScreens = (XineramaQueryScreensFunc*)
dlsym(libHandle, XineramaQueryScreensName);
@@ -616,11 +631,10 @@
}
}
#endif
-#ifndef __linux__ /* Solaris */
+#if !defined(__linux__) && !defined(MACOSX) /* Solaris */
static void xinerama_init_solaris()
{
- void* libHandle = 0;
- char* XineramaLibName= "libXext.so";
+ void* libHandle = NULL;
unsigned char fbhints[MAXFRAMEBUFFERS];
int32_t locNumScr = 0;
/* load and run XineramaGetInfo */
@@ -629,8 +643,8 @@
XineramaGetInfoFunc* XineramaSolarisFunc = NULL;
/* load library */
- libHandle = dlopen(XineramaLibName, RTLD_LAZY | RTLD_GLOBAL);
- if (libHandle != 0) {
+ libHandle = dlopen(JNI_LIB_NAME("Xext"), RTLD_LAZY | RTLD_GLOBAL);
+ if (libHandle != NULL) {
XineramaSolarisFunc = (XineramaGetInfoFunc*)dlsym(libHandle, XineramaGetInfoName);
XineramaSolarisCenterFunc =
(XineramaGetCenterHintFunc*)dlsym(libHandle, XineramaGetCenterHintName);
@@ -677,11 +691,11 @@
}
DTRACE_PRINTLN("Xinerama extension is available");
-#ifdef __linux__
+#if defined(__linux__) || defined(MACOSX)
xinerama_init_linux();
#else /* Solaris */
xinerama_init_solaris();
-#endif /* __linux__ */
+#endif /* __linux__ || MACOSX */
}
#endif /* HEADLESS */
@@ -1562,7 +1576,7 @@
{
jobject point = NULL;
#ifndef HEADLESS /* return NULL in HEADLESS, Linux */
-#ifndef __linux__
+#if !defined(__linux__) && !defined(MACOSX)
int x,y;
AWT_LOCK();
@@ -1575,7 +1589,7 @@
DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null");
}
AWT_FLUSH_UNLOCK();
-#endif /* __linux __ */
+#endif /* __linux __ || MACOSX */
#endif /* HEADLESS */
return point;
}
@@ -1645,7 +1659,11 @@
{
int rr_maj_ver = 0, rr_min_ver = 0;
- void *pLibRandR = dlopen("libXrandr.so.2", RTLD_LAZY | RTLD_LOCAL);
+ void *pLibRandR = dlopen(VERSIONED_JNI_LIB_NAME("Xrandr", "2"),
+ RTLD_LAZY | RTLD_LOCAL);
+ if (pLibRandR == NULL) {
+ pLibRandR = dlopen(JNI_LIB_NAME("Xrandr"), RTLD_LAZY | RTLD_LOCAL);
+ }
if (pLibRandR == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"X11GD_InitXrandrFuncs: Could not open libXrandr.so.2");