From: <eli...@us...> - 2006-11-19 21:41:37
|
Revision: 2665 http://svn.sourceforge.net/java-game-lib/?rev=2665&view=rev Author: elias_naur Date: 2006-11-19 13:41:34 -0800 (Sun, 19 Nov 2006) Log Message: ----------- Make sure that Mouse.destroy ungrabs the cursor Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractAWTInput.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTInput.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxMouse.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTInput.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTInput.java Modified: trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/input/Mouse.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -296,7 +296,7 @@ created = false; buttons = null; coord_buffer = null; - + implementation.destroyMouse(); } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractAWTInput.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractAWTInput.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AbstractAWTInput.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -84,10 +84,6 @@ public synchronized void destroy() { canvas.setInput(null); canvas = null; - if (mouse_queue != null) - mouse_queue.unregister(); - if (keyboard_queue != null) - keyboard_queue.unregister(); } public final int getWidth() { @@ -115,8 +111,11 @@ return new MouseEventQueue(getCanvas()); } - public void destroyMouse() { - mouse_queue.unregister(); + public synchronized void destroyMouse() { + if (mouse_queue != null) { + mouse_queue.unregister(); + mouse_queue = null; + } } public int getNativeCursorCapabilities() { @@ -145,8 +144,10 @@ } public synchronized void destroyKeyboard() { - if (keyboard_queue != null) + if (keyboard_queue != null) { keyboard_queue.unregister(); + keyboard_queue = null; + } } public Object createCursor(int width, int height, int xHotspot, int yHotspot, int numImages, IntBuffer images, IntBuffer delays) throws LWJGLException { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTInput.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTInput.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTInput.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -137,6 +137,11 @@ LinuxDisplay.unlockAWT(); } } + + public void destroyMouse() { + ungrabInputLocked(); + super.destroyMouse(); + } private void checkFocus() { if (getCanvas().isFocusOwner()) { @@ -148,7 +153,7 @@ } private boolean shouldGrab() { - return !input_released && isGrabbed(); + return !input_released && isGrabbed() && getMouseEventQueue() != null; } private void update() { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -348,7 +348,7 @@ } private boolean shouldGrab() { - return !input_released && grab; + return !input_released && grab && mouse != null; } private void updatePointerGrab() { @@ -715,6 +715,7 @@ public void destroyMouse() { mouse = null; + updateInputGrab(); } public void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons) { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxMouse.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxMouse.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxMouse.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -194,7 +194,7 @@ private static native void nWarpCursor(long display, long window, int x, int y); private void handlePointerMotion(boolean grab, boolean warp_pointer, long millis, long root_window, int x_root, int y_root, int x, int y) { - doHandlePointerMotion(grab, warp_pointer, root_window, x_root, y_root, x, y, millis*1000000); + doHandlePointerMotion(grab, warp_pointer, root_window, x_root, y_root, x, y, millis*1000000); } private void handleButton(boolean grab, int button, byte state, long nanos) { @@ -256,7 +256,7 @@ } } - private void resetCursor(int x, int y) { + private void resetCursor(int x, int y) { last_x = x; last_y = transformY(y); } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTInput.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTInput.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTInput.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -60,4 +60,10 @@ ((MacOSXMouseEventQueue)getMouseEventQueue()).warpCursor(); had_focus = has_focus; } + + public synchronized void destroyMouse() { + if (getMouseEventQueue() != null) + getMouseEventQueue().setGrabbed(false); + super.destroyMouse(); + } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -299,8 +299,10 @@ } public void destroyMouse() { - if (mouse_queue != null) + if (mouse_queue != null) { + mouse_queue.setGrabbed(false); mouse_queue.unregister(); + } this.mouse_queue = null; } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTInput.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTInput.java 2006-11-19 21:15:51 UTC (rev 2664) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTInput.java 2006-11-19 21:41:34 UTC (rev 2665) @@ -64,12 +64,12 @@ blank_cursor = AWTUtil.createCursor(w, h, 0, 0, 1, BufferUtils.createIntBuffer(w*h), null); } - public synchronized void destroy() { - super.destroy(); + public synchronized void destroyMouse() { if (cached_mouse != null) { grab(false); cached_mouse.destroy(); } + super.destroyMouse(); } public synchronized void processInput(PeerInfo peer_info) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |