Fixed some linux input focus issues
This commit is contained in:
parent
dc47138037
commit
86798e426f
|
@ -47,7 +47,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include <Window.h>
|
#include "Window.h"
|
||||||
#include "org_lwjgl_Window.h"
|
#include "org_lwjgl_Window.h"
|
||||||
|
|
||||||
static Atom delete_atom;
|
static Atom delete_atom;
|
||||||
|
@ -69,7 +69,7 @@ static void waitMapped(Display *disp, Window win) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool releaseInput(void) {
|
bool releaseInput(void) {
|
||||||
if (current_fullscreen)
|
if (current_fullscreen || input_released)
|
||||||
return false;
|
return false;
|
||||||
releaseKeyboard();
|
releaseKeyboard();
|
||||||
releasePointer();
|
releasePointer();
|
||||||
|
@ -94,6 +94,9 @@ static void handleMessages(JNIEnv *env, jobject window_obj) {
|
||||||
if ((event.xclient.format == 32) && ((Atom)event.xclient.data.l[0] == delete_atom))
|
if ((event.xclient.format == 32) && ((Atom)event.xclient.data.l[0] == delete_atom))
|
||||||
env->SetBooleanField(window_obj, env->GetFieldID(env->GetObjectClass(window_obj), "closeRequested", "Z"), JNI_TRUE);
|
env->SetBooleanField(window_obj, env->GetFieldID(env->GetObjectClass(window_obj), "closeRequested", "Z"), JNI_TRUE);
|
||||||
break;
|
break;
|
||||||
|
case FocusOut:
|
||||||
|
releaseInput();
|
||||||
|
break;
|
||||||
case FocusIn:
|
case FocusIn:
|
||||||
acquireInput();
|
acquireInput();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -98,18 +98,6 @@ static void ungrabKeyboard(void) {
|
||||||
setRepeatMode(AutoRepeatModeDefault);
|
setRepeatMode(AutoRepeatModeDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
void acquireKeyboard(void) {
|
|
||||||
if (!created)
|
|
||||||
return;
|
|
||||||
should_grab = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void releaseKeyboard(void) {
|
|
||||||
if (!created)
|
|
||||||
return;
|
|
||||||
should_grab = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void updateGrab(void) {
|
static void updateGrab(void) {
|
||||||
if (should_grab) {
|
if (should_grab) {
|
||||||
if (!keyboard_grabbed)
|
if (!keyboard_grabbed)
|
||||||
|
@ -120,6 +108,16 @@ static void updateGrab(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void acquireKeyboard(void) {
|
||||||
|
should_grab = true;
|
||||||
|
updateGrab();
|
||||||
|
}
|
||||||
|
|
||||||
|
void releaseKeyboard(void) {
|
||||||
|
should_grab = false;
|
||||||
|
updateGrab();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_lwjgl_input_Keyboard
|
* Class: org_lwjgl_input_Keyboard
|
||||||
* Method: nCreate
|
* Method: nCreate
|
||||||
|
|
|
@ -122,10 +122,11 @@ static int grabPointer(void) {
|
||||||
int result;
|
int result;
|
||||||
int mask = FocusChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask;
|
int mask = FocusChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask;
|
||||||
result = XGrabPointer(getCurrentDisplay(), getCurrentWindow(), False, mask, GrabModeAsync, GrabModeAsync, getCurrentWindow(), blank_cursor, CurrentTime);
|
result = XGrabPointer(getCurrentDisplay(), getCurrentWindow(), False, mask, GrabModeAsync, GrabModeAsync, getCurrentWindow(), blank_cursor, CurrentTime);
|
||||||
|
if (result == GrabSuccess) {
|
||||||
|
pointer_grabbed = true;
|
||||||
XWarpPointer(getCurrentDisplay(), None, getCurrentWindow(), 0, 0, 0, 0, current_x, current_y);
|
XWarpPointer(getCurrentDisplay(), None, getCurrentWindow(), 0, 0, 0, 0, current_x, current_y);
|
||||||
XF86VidModeSetViewPort(getCurrentDisplay(), getCurrentScreen(), 0, 0); // make sure we have a centered window
|
XF86VidModeSetViewPort(getCurrentDisplay(), getCurrentScreen(), 0, 0); // make sure we have a centered window
|
||||||
if (result == GrabSuccess)
|
}
|
||||||
pointer_grabbed = true;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,19 +135,6 @@ static void ungrabPointer(void) {
|
||||||
XUngrabPointer(getCurrentDisplay(), CurrentTime);
|
XUngrabPointer(getCurrentDisplay(), CurrentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
void acquirePointer(void) {
|
|
||||||
if (!created)
|
|
||||||
return;
|
|
||||||
should_grab = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void releasePointer(void) {
|
|
||||||
if (!created)
|
|
||||||
return;
|
|
||||||
should_grab = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void updateGrab(void) {
|
static void updateGrab(void) {
|
||||||
if (should_grab) {
|
if (should_grab) {
|
||||||
if (!pointer_grabbed)
|
if (!pointer_grabbed)
|
||||||
|
@ -157,6 +145,16 @@ static void updateGrab(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void acquirePointer(void) {
|
||||||
|
should_grab = true;
|
||||||
|
updateGrab();
|
||||||
|
}
|
||||||
|
|
||||||
|
void releasePointer(void) {
|
||||||
|
should_grab = false;
|
||||||
|
updateGrab();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_lwjgl_input_Mouse
|
* Class: org_lwjgl_input_Mouse
|
||||||
* Method: nCreate
|
* Method: nCreate
|
||||||
|
|
Loading…
Reference in New Issue