Added ApplejavaExtensions.jar to be able to use apple extensions without reflection
This commit is contained in:
parent
da172b29c6
commit
4e432b9e3e
|
@ -224,7 +224,7 @@
|
||||||
|
|
||||||
<!-- Compiles the Java source code -->
|
<!-- Compiles the Java source code -->
|
||||||
<target name="compile" description="Compiles the java source code" depends="-initialize">
|
<target name="compile" description="Compiles the java source code" depends="-initialize">
|
||||||
<javac debug="yes" destdir="${lwjgl.bin}" source="1.4" target="1.4" classpath="${lwjgl.lib}/jinput.jar" taskname="core">
|
<javac debug="yes" destdir="${lwjgl.bin}" source="1.4" target="1.4" classpath="${lwjgl.lib}/jinput.jar:${lwjgl.lib}/AppleJavaExtensions.jar" taskname="core">
|
||||||
<src path="${lwjgl.src}/java/"/>
|
<src path="${lwjgl.src}/java/"/>
|
||||||
<src path="${lwjgl.src}/generated/"/>
|
<src path="${lwjgl.src}/generated/"/>
|
||||||
<include name="org/lwjgl/*.java"/>
|
<include name="org/lwjgl/*.java"/>
|
||||||
|
|
Binary file not shown.
|
@ -57,6 +57,8 @@ import org.lwjgl.BufferUtils;
|
||||||
import org.lwjgl.LWJGLException;
|
import org.lwjgl.LWJGLException;
|
||||||
import org.lwjgl.LWJGLUtil;
|
import org.lwjgl.LWJGLUtil;
|
||||||
|
|
||||||
|
import com.apple.eawt.*;
|
||||||
|
|
||||||
final class MacOSXDisplay implements DisplayImplementation {
|
final class MacOSXDisplay implements DisplayImplementation {
|
||||||
private static final int PBUFFER_HANDLE_SIZE = 24;
|
private static final int PBUFFER_HANDLE_SIZE = 24;
|
||||||
private static final int GAMMA_LENGTH = 256;
|
private static final int GAMMA_LENGTH = 256;
|
||||||
|
@ -73,7 +75,24 @@ final class MacOSXDisplay implements DisplayImplementation {
|
||||||
private boolean close_requested;
|
private boolean close_requested;
|
||||||
|
|
||||||
MacOSXDisplay() {
|
MacOSXDisplay() {
|
||||||
new MacOSXApplicationListener();
|
try {
|
||||||
|
AccessController.doPrivileged(new PrivilegedExceptionAction() {
|
||||||
|
public Object run() throws Exception {
|
||||||
|
Application.getApplication().addApplicationListener(new ApplicationAdapter() {
|
||||||
|
public final void handleQuit(ApplicationEvent event) {
|
||||||
|
doHandleQuit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (Throwable e) {
|
||||||
|
/**
|
||||||
|
* In an applet environment, referencing com.apple.eawt.Application can fail with
|
||||||
|
* a native exception. So log any exceptions instead of re-throwing.
|
||||||
|
*/
|
||||||
|
LWJGLUtil.log("Failed to register quit handler: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createWindow(DisplayMode mode, boolean fullscreen, Canvas parent, int x, int y) throws LWJGLException {
|
public void createWindow(DisplayMode mode, boolean fullscreen, Canvas parent, int x, int y) throws LWJGLException {
|
||||||
|
@ -96,7 +115,7 @@ final class MacOSXDisplay implements DisplayImplementation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleQuit() {
|
private void doHandleQuit() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
close_requested = true;
|
close_requested = true;
|
||||||
}
|
}
|
||||||
|
@ -407,51 +426,6 @@ final class MacOSXDisplay implements DisplayImplementation {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This class captures com.apple.eawt.ApplicationEvents through reflection
|
|
||||||
* to enable compilation on other platforms than Mac OS X
|
|
||||||
*/
|
|
||||||
private class MacOSXApplicationListener implements InvocationHandler {
|
|
||||||
private final Method handleQuit;
|
|
||||||
|
|
||||||
public MacOSXApplicationListener() {
|
|
||||||
Method m = null;
|
|
||||||
try {
|
|
||||||
m = (Method)AccessController.doPrivileged(new PrivilegedExceptionAction() {
|
|
||||||
public Object run() throws Exception {
|
|
||||||
/* Get the com.apple.eawt.Application class */
|
|
||||||
Class com_apple_eawt_Application = Class.forName("com.apple.eawt.Application");
|
|
||||||
/* Call the static Application.getApplication() method */
|
|
||||||
Object application = com_apple_eawt_Application.getMethod("getApplication", null).invoke(null, null);
|
|
||||||
/* Create a proxy implementing com.apple.eawt.ApplicationListener */
|
|
||||||
Class com_apple_eawt_ApplicationListener = Class.forName("com.apple.eawt.ApplicationListener");
|
|
||||||
Object listener_proxy = Proxy.newProxyInstance(getClass().getClassLoader(), new Class[] {com_apple_eawt_ApplicationListener}, MacOSXApplicationListener.this);
|
|
||||||
/* Invoke the method application.addApplicationListener(proxy) */
|
|
||||||
Method addApplicationListener = com_apple_eawt_Application.getMethod("addApplicationListener", new Class[]{com_apple_eawt_ApplicationListener});
|
|
||||||
addApplicationListener.invoke(application, new Object[]{listener_proxy});
|
|
||||||
/* Finally, get the handleQuit method we want to react to */
|
|
||||||
Class com_apple_eawt_ApplicationEvent = Class.forName("com.apple.eawt.ApplicationEvent");
|
|
||||||
return com_apple_eawt_ApplicationListener.getMethod("handleQuit", new Class[]{com_apple_eawt_ApplicationEvent});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (Throwable e) {
|
|
||||||
/**
|
|
||||||
* In an applet environment, referencing com.apple.eawt.Application can fail with
|
|
||||||
* a native exception. So log any exceptions instead of re-throwing.
|
|
||||||
*/
|
|
||||||
LWJGLUtil.log("Failed to register quit handler: " + e.getMessage());
|
|
||||||
// throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
handleQuit = m;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object invoke(Object proxy, Method method, Object[] args) {
|
|
||||||
if (method.equals(handleQuit))
|
|
||||||
handleQuit();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isBufferLost(PeerInfo handle) {
|
public boolean isBufferLost(PeerInfo handle) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue