From: <ka...@us...> - 2011-06-26 11:50:29
|
Revision: 3554 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3554&view=rev Author: kappa1 Date: 2011-06-26 11:50:23 +0000 (Sun, 26 Jun 2011) Log Message: ----------- Fix small race condition in LinuxDisplay when focusing in and out really fast. Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2011-06-26 02:18:53 UTC (rev 3553) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2011-06-26 11:50:23 UTC (rev 3554) @@ -148,16 +148,12 @@ private final FocusListener focus_listener = new FocusListener() { public void focusGained(FocusEvent e) { synchronized (GlobalLock.lock) { - nGrabKeyboard(getDisplay(), current_window); focused = true; - input_released = false; } } public void focusLost(FocusEvent e) { synchronized (GlobalLock.lock) { - nUngrabKeyboard(getDisplay()); focused = false; - input_released = true; } } }; @@ -823,6 +819,7 @@ lockAWT(); try { processEvents(); + checkInput(); } finally { unlockAWT(); } @@ -904,6 +901,21 @@ } } + private void checkInput() { + if (parent == null) return; + + if (focused != keyboard_grabbed) { + if (focused) { + grabKeyboard(); + input_released = false; + } + else { + ungrabKeyboard(); + input_released = true; + } + } + } + private void setFocused(boolean got_focus, int focus_detail) { if (focused == got_focus || focus_detail == NotifyDetailNone || focus_detail == NotifyPointer || focus_detail == NotifyPointerRoot || parent != null) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |