Linux: only grab the keyboard when in fullscreen mode. Remove the alt-tab hack

This commit is contained in:
Elias Naur 2004-08-21 10:22:23 +00:00
parent 4b98c873da
commit a558ad68b2
2 changed files with 11 additions and 28 deletions

View File

@ -80,18 +80,13 @@ static void ungrabKeyboard(void) {
void updateKeyboardGrab(void) { void updateKeyboardGrab(void) {
if (!created) if (!created)
return; return;
if (isFullscreen() || shouldGrab()) { if (isFullscreen()/* || shouldGrab()*/) {
grabKeyboard(); grabKeyboard();
} else { } else {
ungrabKeyboard(); ungrabKeyboard();
} }
} }
/*
* Class: org_lwjgl_input_Keyboard
* Method: nCreate
* Signature: ()Z
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate
(JNIEnv * env, jclass clazz) (JNIEnv * env, jclass clazz)
{ {
@ -128,11 +123,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate
updateKeyboardGrab(); updateKeyboardGrab();
} }
/*
* Class: org_lwjgl_input_Keyboard
* Method: nDestroy
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy
(JNIEnv * env, jclass clazz) (JNIEnv * env, jclass clazz)
{ {
@ -199,17 +189,6 @@ void handleKeyEvent(XKeyEvent *event) {
unsigned char keycode = getKeycode(event); unsigned char keycode = getKeycode(event);
unsigned char state = eventState(event); unsigned char state = eventState(event);
key_buf[keycode] = state; key_buf[keycode] = state;
if (key_buf[org_lwjgl_input_Keyboard_KEY_LMENU] == 1 ||
key_buf[org_lwjgl_input_Keyboard_KEY_RMENU] == 1) {
if (key_buf[org_lwjgl_input_Keyboard_KEY_TAB] == 1) {
if (releaseInput()) {
key_buf[org_lwjgl_input_Keyboard_KEY_RMENU] = 0;
key_buf[org_lwjgl_input_Keyboard_KEY_LMENU] = 0;
key_buf[org_lwjgl_input_Keyboard_KEY_TAB] = 0;
return;
}
}
}
if (buffer_enabled) if (buffer_enabled)
bufferEvent(event); bufferEvent(event);
} }

View File

@ -187,6 +187,9 @@ bool releaseInput(void) {
input_released = true; input_released = true;
setRepeatMode(AutoRepeatModeDefault); setRepeatMode(AutoRepeatModeDefault);
updateInputGrab(); updateInputGrab();
/* if (current_fullscreen) {
XIconifyWindow(getDisplay(), getCurrentWindow(), getCurrentScreen());
}*/
return true; return true;
} }
@ -323,7 +326,8 @@ static bool createWindow(JNIEnv* env, int width, int height) {
attribs.colormap = cmap; attribs.colormap = cmap;
attribs.event_mask = ExposureMask | FocusChangeMask | VisibilityChangeMask| StructureNotifyMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask; attribs.event_mask = ExposureMask | FocusChangeMask | VisibilityChangeMask| StructureNotifyMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask;
attribs.background_pixel = 0xFF000000; attribs.background_pixel = 0xFF000000;
attribmask = CWColormap | CWBackPixel | CWEventMask; attribs.win_gravity = NorthWestGravity;
attribmask = CWColormap | CWBackPixel | CWEventMask | CWWinGravity;
if (current_fullscreen || undecorated) { if (current_fullscreen || undecorated) {
attribmask |= CWOverrideRedirect; attribmask |= CWOverrideRedirect;
attribs.override_redirect = True; attribs.override_redirect = True;
@ -345,6 +349,11 @@ static bool createWindow(JNIEnv* env, int width, int height) {
XFree(size_hints); XFree(size_hints);
delete_atom = XInternAtom(getDisplay(), "WM_DELETE_WINDOW", False); delete_atom = XInternAtom(getDisplay(), "WM_DELETE_WINDOW", False);
XSetWMProtocols(getDisplay(), win, &delete_atom, 1); XSetWMProtocols(getDisplay(), win, &delete_atom, 1);
/* if (current_fullscreen) {
Atom fullscreen_atom = XInternAtom(getDisplay(), "_NET_WM_STATE_FULLSCREEN", False);
XChangeProperty(getDisplay(), getCurrentWindow(), XInternAtom(getDisplay(), "_NET_WM_STATE", False),
XInternAtom(getDisplay(), "ATOM", False), 32, PropModeReplace, (const unsigned char*)&fullscreen_atom, 1);
}*/
XMapRaised(getDisplay(), win); XMapRaised(getDisplay(), win);
waitMapped(win); waitMapped(win);
XClearWindow(getDisplay(), win); XClearWindow(getDisplay(), win);
@ -368,11 +377,6 @@ int getWindowHeight(void) {
return current_height; return current_height;
} }
/*
* Class: org_lwjgl_Window
* Method: nUpdate
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nUpdate JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nUpdate
(JNIEnv *env, jclass clazz) (JNIEnv *env, jclass clazz)
{ {