|
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.
|