Linux: Ignore events from old windows

This commit is contained in:
Elias Naur 2005-11-22 14:30:00 +00:00
parent d6ae5e2d45
commit 3c83a92a64
2 changed files with 5 additions and 13 deletions

View File

@ -184,6 +184,7 @@ void handleWarpEvent(XClientMessageEvent *event) {
static void doWarpPointer(int center_x, int center_y) { static void doWarpPointer(int center_x, int center_y) {
XEvent warp_event; XEvent warp_event;
warp_event.type = ClientMessage; warp_event.type = ClientMessage;
warp_event.xclient.window = getCurrentWindow();
warp_event.xclient.message_type = getWarpAtom(); warp_event.xclient.message_type = getWarpAtom();
warp_event.xclient.format = 32; warp_event.xclient.format = 32;
warp_event.xclient.data.l[0] = center_x; 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) { 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) { JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nPollMouse(JNIEnv * env, jclass clazz, jobject coord_buffer_obj, jobject button_buffer_obj) {

View File

@ -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) { void handleMessages(JNIEnv *env, jint extension, jint window_mode, jobject saved_gamma, jobject current_gamma, jobject saved_mode, jobject current_mode) {
XEvent event; XEvent event;
/* Window win;
int revert_mode;*/
while (XPending(getDisplay()) > 0) { while (XPending(getDisplay()) > 0) {
XNextEvent(getDisplay(), &event); XNextEvent(getDisplay(), &event);
if (XFilterEvent(&event, None) == True) if (XFilterEvent(&event, None) == True)
continue; continue;
// Ignore events from old windows
if (event.xany.window != getCurrentWindow())
continue;
switch (event.type) { switch (event.type) {
case ClientMessage: case ClientMessage:
if (event.xclient.message_type == warp_atom) { 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)) } else if ((event.xclient.format == 32) && ((Atom)event.xclient.data.l[0] == delete_atom))
closerequested = true; closerequested = true;
break; break;
/* case FocusOut:
XGetInputFocus(getDisplay(), &win, &revert_mode);
if (win != current_win) {
releaseInput();
focused = false;
}
break;
case FocusIn:
checkInput();
break;*/
case MapNotify: case MapNotify:
dirty = true; dirty = true;
minimized = false; minimized = false;