From 3c83a92a6444013f87852c56eccd80eba839a363 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 22 Nov 2005 14:30:00 +0000 Subject: [PATCH] Linux: Ignore events from old windows --- src/native/linux/org_lwjgl_input_Mouse.c | 3 ++- src/native/linux/org_lwjgl_opengl_Display.c | 15 +++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/native/linux/org_lwjgl_input_Mouse.c b/src/native/linux/org_lwjgl_input_Mouse.c index 19ce6169..26e54f2d 100644 --- a/src/native/linux/org_lwjgl_input_Mouse.c +++ b/src/native/linux/org_lwjgl_input_Mouse.c @@ -184,6 +184,7 @@ void handleWarpEvent(XClientMessageEvent *event) { static void doWarpPointer(int center_x, int center_y) { XEvent warp_event; warp_event.type = ClientMessage; + warp_event.xclient.window = getCurrentWindow(); warp_event.xclient.message_type = getWarpAtom(); warp_event.xclient.format = 32; warp_event.xclient.data.l[0] = center_x; @@ -316,7 +317,7 @@ static void doHandlePointerMotion(Window root_window, Window window, int root_x, } void handlePointerMotion(XMotionEvent *event) { - doHandlePointerMotion(event->root, event->window, event->x_root, event->y_root, event->x, event->y); + doHandlePointerMotion(event->root, getCurrentWindow(), event->x_root, event->y_root, event->x, event->y); } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nPollMouse(JNIEnv * env, jclass clazz, jobject coord_buffer_obj, jobject button_buffer_obj) { diff --git a/src/native/linux/org_lwjgl_opengl_Display.c b/src/native/linux/org_lwjgl_opengl_Display.c index 3121d432..bcabfe20 100644 --- a/src/native/linux/org_lwjgl_opengl_Display.c +++ b/src/native/linux/org_lwjgl_opengl_Display.c @@ -246,12 +246,13 @@ static void checkInput(JNIEnv *env, jint extension, jint window_mode, jobject sa void handleMessages(JNIEnv *env, jint extension, jint window_mode, jobject saved_gamma, jobject current_gamma, jobject saved_mode, jobject current_mode) { XEvent event; -/* Window win; - int revert_mode;*/ while (XPending(getDisplay()) > 0) { XNextEvent(getDisplay(), &event); if (XFilterEvent(&event, None) == True) continue; + // Ignore events from old windows + if (event.xany.window != getCurrentWindow()) + continue; switch (event.type) { case ClientMessage: if (event.xclient.message_type == warp_atom) { @@ -259,16 +260,6 @@ void handleMessages(JNIEnv *env, jint extension, jint window_mode, jobject saved } else if ((event.xclient.format == 32) && ((Atom)event.xclient.data.l[0] == delete_atom)) closerequested = true; break; -/* case FocusOut: - XGetInputFocus(getDisplay(), &win, &revert_mode); - if (win != current_win) { - releaseInput(); - focused = false; - } - break; - case FocusIn: - checkInput(); - break;*/ case MapNotify: dirty = true; minimized = false;