diff -r 9a65b2bd4e01 src/video/x11/SDL_x11window.c --- a/src/video/x11/SDL_x11window.c Mon Jun 04 12:31:14 2012 -0400 +++ b/src/video/x11/SDL_x11window.c Tue Jun 12 14:42:31 2012 +0800 @@ -1019,12 +1019,18 @@ /* Raise the window if we grab the mouse */ XRaiseWindow(display, data->xwindow); - /* Now grab the keyboard */ - XGrabKeyboard(display, data->xwindow, True, GrabModeAsync, - GrabModeAsync, CurrentTime); + /* Now grab the keyboard if we're using old-style fullscreen */ + if (oldstyle_fullscreen) { + XGrabKeyboard(display, data->xwindow, True, GrabModeAsync, + GrabModeAsync, CurrentTime); + data->kbd_grabbed = SDL_TRUE; + } } else { XUngrabPointer(display, CurrentTime); - XUngrabKeyboard(display, CurrentTime); + /* Release the keyboard if we grabbed it */ + if (data->kbd_grabbed) { + XUngrabKeyboard(display, CurrentTime); + } } } diff -r 9a65b2bd4e01 src/video/x11/SDL_x11window.h --- a/src/video/x11/SDL_x11window.h Mon Jun 04 12:31:14 2012 -0400 +++ b/src/video/x11/SDL_x11window.h Tue Jun 12 14:42:31 2012 +0800 @@ -38,6 +38,7 @@ GC gc; XIC ic; SDL_bool created; + SDL_bool kbd_grabbed; struct SDL_VideoData *videodata; } SDL_WindowData;