diff --git a/src/java/org/lwjgl/Sys.java b/src/java/org/lwjgl/Sys.java index 940f0cd5..62b51517 100644 --- a/src/java/org/lwjgl/Sys.java +++ b/src/java/org/lwjgl/Sys.java @@ -34,6 +34,7 @@ package org.lwjgl; import java.io.IOException; import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; /** * $Id$ @@ -238,36 +239,8 @@ public final class Sys { * @return false if we are CERTAIN the call has failed */ public static boolean openURL(String url) { - String osName = System.getProperty("os.name"); - if (osName.startsWith("Mac OS") || osName.startsWith("Windows")) { - // Mac and Windows both do this nicely from native code. - nOpenURL(url); - return true; - } - // Linux may as well resort to pure Java hackery, as there's no Linux native way of doing it - // right anyway. - - String[] browsers = {"mozilla", "opera", "konqueror", "nautilus", "galeon", "netscape"}; - - for (int i = 0; i < browsers.length; i ++) { - try { - Runtime.getRuntime().exec(new String[] { browsers[i], url }); - return true; - } catch (IOException e) { - // Ignore - e.printStackTrace(System.err); - } - } - - // Seems to have failed - return false; + return Display.getImplementation().openURL(url); } - - - /* - * Where necessary, we use a native implementation of openURL. - */ - private static native void nOpenURL(String url); /** * Get the contents of the system clipboard. The system might not have a clipboard diff --git a/src/java/org/lwjgl/opengl/DisplayImplementation.java b/src/java/org/lwjgl/opengl/DisplayImplementation.java index fd1f7695..3a94b1d8 100644 --- a/src/java/org/lwjgl/opengl/DisplayImplementation.java +++ b/src/java/org/lwjgl/opengl/DisplayImplementation.java @@ -237,4 +237,6 @@ public interface DisplayImplementation { /* Pbuffer caps */ public int getPbufferCaps(); + + public boolean openURL(String url); } diff --git a/src/java/org/lwjgl/opengl/LinuxDisplay.java b/src/java/org/lwjgl/opengl/LinuxDisplay.java index 231a19d0..21826c3c 100644 --- a/src/java/org/lwjgl/opengl/LinuxDisplay.java +++ b/src/java/org/lwjgl/opengl/LinuxDisplay.java @@ -41,6 +41,7 @@ package org.lwjgl.opengl; import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.io.IOException; import org.lwjgl.BufferUtils; import org.lwjgl.LWJGLException; @@ -102,4 +103,24 @@ final class LinuxDisplay implements DisplayImplementation { public native void destroyCursor(Object cursorHandle); public native int getPbufferCaps(); + + public boolean openURL(String url) { + // Linux may as well resort to pure Java hackery, as there's no Linux native way of doing it + // right anyway. + + String[] browsers = {"mozilla", "opera", "konqueror", "nautilus", "galeon", "netscape"}; + + for (int i = 0; i < browsers.length; i ++) { + try { + Runtime.getRuntime().exec(new String[] { browsers[i], url }); + return true; + } catch (IOException e) { + // Ignore + e.printStackTrace(System.err); + } + } + + // Seems to have failed + return false; + } } diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplay.java b/src/java/org/lwjgl/opengl/MacOSXDisplay.java index 6d285aa5..de454ebc 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplay.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplay.java @@ -375,6 +375,10 @@ final class MacOSXDisplay implements DisplayImplementation { return GL11.glGetString(GL11.GL_EXTENSIONS).indexOf("GL_APPLE_pixel_buffer") != -1 ? Pbuffer.PBUFFER_SUPPORTED : 0; } + public boolean openURL(String url) { + return false; + } + /** * This class captures com.apple.eawt.ApplicationEvents through reflection * to enable compilation on other platforms than Mac OS X diff --git a/src/java/org/lwjgl/opengl/Win32Display.java b/src/java/org/lwjgl/opengl/Win32Display.java index 12d02dcb..6423a519 100644 --- a/src/java/org/lwjgl/opengl/Win32Display.java +++ b/src/java/org/lwjgl/opengl/Win32Display.java @@ -102,4 +102,10 @@ final class Win32Display implements DisplayImplementation { public native void destroyCursor(Object cursorHandle); public native int getPbufferCaps(); + public boolean openURL(String url) { + nOpenURL(url); + return true; + } + + private native void nOpenURL(String url); } diff --git a/src/native/macosx/org_lwjgl_Sys.c b/src/native/macosx/org_lwjgl_Sys.c index c50534da..94f2ebcb 100644 --- a/src/native/macosx/org_lwjgl_Sys.c +++ b/src/native/macosx/org_lwjgl_Sys.c @@ -94,28 +94,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert(JNIEnv * env, jclass clazz, jst { } -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nOpenURL - (JNIEnv * env, jclass clazz, jstring url) -{ -/* char * urlString = GetStringNativeChars(env, url); - - OSStatus err; - ICInstance inst; - long startSel; - long endSel; - Str255 urlStr; - - CopyCStringToPascal(urlString, urlStr); - free(urlString); - err = ICStart(&inst, '????'); // Use your creator code if you have one! - if (err == noErr) { - startSel = 0; - endSel = urlStr[0]; - err = ICLaunchURL(inst, "\p", (char *) &urlStr[1], urlStr[0], &startSel, &endSel); - (void) ICStop(inst); - }*/ -} - JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_nGetClipboard (JNIEnv * env, jclass clazz) { diff --git a/src/native/win32/org_lwjgl_Sys.cpp b/src/native/win32/org_lwjgl_Sys.cpp index 1dc40687..56b71e09 100644 --- a/src/native/win32/org_lwjgl_Sys.cpp +++ b/src/native/win32/org_lwjgl_Sys.cpp @@ -41,6 +41,7 @@ #include "Window.h" #include "org_lwjgl_Sys.h" +#include "org_lwjgl_opengl_Win32Display.h" #include "common_tools.h" #include @@ -135,8 +136,8 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert * Method: openURL * Signature: (Ljava/lang/String;)V */ -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nOpenURL - (JNIEnv * env, jclass clazz, jstring url) +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_nOpenURL + (JNIEnv * env, jobject self, jstring url) { char * urlString = GetStringNativeChars(env, url);