From b5c893d207e9360acd3758039e4596006a0ecdfc Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 9 Apr 2008 18:09:15 +0000 Subject: [PATCH] Linux: When parented, take focus on click --- src/java/org/lwjgl/opengl/LinuxDisplay.java | 5 +++-- src/java/org/lwjgl/opengl/LinuxMouse.java | 2 ++ src/native/linux/org_lwjgl_opengl_Display.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/java/org/lwjgl/opengl/LinuxDisplay.java b/src/java/org/lwjgl/opengl/LinuxDisplay.java index 4a706ef8..d6805b82 100644 --- a/src/java/org/lwjgl/opengl/LinuxDisplay.java +++ b/src/java/org/lwjgl/opengl/LinuxDisplay.java @@ -50,6 +50,7 @@ import org.lwjgl.LWJGLUtil; final class LinuxDisplay implements DisplayImplementation { /* X11 constants */ + public final static int CurrentTime = 0; public final static int GrabSuccess = 0; public final static int AutoRepeatModeOff = 0; public final static int AutoRepeatModeOn = 1; @@ -620,7 +621,7 @@ final class LinuxDisplay implements DisplayImplementation { return peer_info; } - private native static void setInputFocus(long display, long window); + static native void setInputFocus(long display, long window, long time); private void processEvents() { while (LinuxEvent.getPending(getDisplay()) > 0) { @@ -754,7 +755,7 @@ final class LinuxDisplay implements DisplayImplementation { grabServer(getDisplay()); try { if (nGetInputFocus(getDisplay()) == current_focus) - setInputFocus(getDisplay(), getWindow()); + setInputFocus(getDisplay(), getWindow(), CurrentTime); } finally { ungrabServer(getDisplay()); } diff --git a/src/java/org/lwjgl/opengl/LinuxMouse.java b/src/java/org/lwjgl/opengl/LinuxMouse.java index 2c9b5712..716aaf03 100644 --- a/src/java/org/lwjgl/opengl/LinuxMouse.java +++ b/src/java/org/lwjgl/opengl/LinuxMouse.java @@ -280,6 +280,8 @@ final class LinuxMouse { case LinuxEvent.ButtonPress: /* Fall through */ case LinuxEvent.ButtonRelease: handleButtonEvent(grab, event.getButtonTime(), event.getButtonType(), (byte)event.getButtonButton()); + if (Display.getParent() != null) + LinuxDisplay.setInputFocus(display, window, event.getButtonTime()); return true; case LinuxEvent.MotionNotify: handlePointerMotion(grab, warp_pointer, event.getButtonTime(), event.getButtonRoot(), event.getButtonXRoot(), event.getButtonYRoot(), event.getButtonX(), event.getButtonY()); diff --git a/src/native/linux/org_lwjgl_opengl_Display.c b/src/native/linux/org_lwjgl_opengl_Display.c index 1658def5..254bf596 100644 --- a/src/native/linux/org_lwjgl_opengl_Display.c +++ b/src/native/linux/org_lwjgl_opengl_Display.c @@ -338,10 +338,10 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_ungrabServer(JNIEnv *e XUngrabServer(disp); } -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_setInputFocus(JNIEnv *env, jclass clazz, jlong display, jlong window_ptr) { +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_setInputFocus(JNIEnv *env, jclass clazz, jlong display, jlong window_ptr, jlong time) { Display *disp = (Display *)(intptr_t)display; Window window = (Window)window_ptr; - XSetInputFocus(disp, window, RevertToParent, CurrentTime); + XSetInputFocus(disp, window, RevertToParent, time); } JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nCreateWindow(JNIEnv *env, jclass clazz, jlong display, jint screen, jobject peer_info_handle, jobject mode, jint window_mode, jint x, jint y, jboolean undecorated, jlong parent_handle) {