# HG changeset patch # User Sam Lantinga # Date 994718176 0 # Node ID 8a5aff5c12942389a729b0f2c1759a3f2cbe5c93 # Parent c7bcdece4845162ad601eadbeb84aa502e41610d Fixed some problems with the fullscreen code. Wooo. :) diff -r c7bcdece4845 -r 8a5aff5c1294 src/video/x11/SDL_x11modes.c --- a/src/video/x11/SDL_x11modes.c Mon Jul 09 15:47:40 2001 +0000 +++ b/src/video/x11/SDL_x11modes.c Mon Jul 09 22:36:16 2001 +0000 @@ -396,7 +396,7 @@ set_best_resolution(this, current_w, current_h); move_cursor_to(this, 0, 0); get_real_resolution(this, &real_w, &real_h); - XResizeWindow(SDL_Display, FSwindow, real_w, real_h); + XMoveResizeWindow(SDL_Display, FSwindow, 0, 0, real_w, real_h); move_cursor_to(this, real_w/2, real_h/2); /* Center and reparent the drawing window */ @@ -425,58 +425,62 @@ Window tmpwin, *windows; int i, nwindows; #endif + int real_w, real_h; okay = 1; - if ( ! currently_fullscreen ) { - int real_w, real_h; + if ( currently_fullscreen ) { + return(okay); + } - /* Map the fullscreen window to blank the screen */ - get_real_resolution(this, &real_w, &real_h); - XResizeWindow(SDL_Display, FSwindow, real_w, real_h); - XMapRaised(SDL_Display, FSwindow); - X11_WaitMapped(this, FSwindow); + /* Ungrab the input so that we can move the mouse around */ + X11_GrabInputNoLock(this, SDL_GRAB_OFF); + + /* Map the fullscreen window to blank the screen */ + get_real_resolution(this, &real_w, &real_h); + XMoveResizeWindow(SDL_Display, FSwindow, 0, 0, real_w, real_h); + XMapRaised(SDL_Display, FSwindow); + X11_WaitMapped(this, FSwindow); #if 0 /* This seems to break WindowMaker in focus-follows-mouse mode */ - /* Make sure we got to the top of the window stack */ - if ( XQueryTree(SDL_Display, SDL_Root, &tmpwin, &tmpwin, - &windows, &nwindows) && windows ) { - /* If not, try to put us there - if fail... oh well */ - if ( windows[nwindows-1] != FSwindow ) { - tmpwin = windows[nwindows-1]; - for ( i=0; iinput_grab | SDL_GRAB_FULLSCREEN); diff -r c7bcdece4845 -r 8a5aff5c1294 src/video/x11/SDL_x11wm.c --- a/src/video/x11/SDL_x11wm.c Mon Jul 09 15:47:40 2001 +0000 +++ b/src/video/x11/SDL_x11wm.c Mon Jul 09 22:36:16 2001 +0000 @@ -250,32 +250,21 @@ return(mode); /* Will be set later on mode switch */ } if ( mode == SDL_GRAB_OFF ) { +printf("SDL grab OFF\n"); XUngrabPointer(SDL_Display, CurrentTime); - if ( this->screen->flags & SDL_FULLSCREEN ) { - /* Rebind the mouse to the fullscreen window */ - for ( numtries = 0; numtries < 10; ++numtries ) { - result = XGrabPointer(SDL_Display, FSwindow, - True, 0, - GrabModeAsync, GrabModeAsync, - FSwindow, None, CurrentTime); - if ( result == GrabSuccess ) { - break; - } - SDL_Delay(100); - } - if ( result != GrabSuccess ) { - /* Uh, oh, what do we do here? */ ; - } - } - if ( !(this->screen->flags & SDL_FULLSCREEN) ) - XUngrabKeyboard(SDL_Display, CurrentTime); + XUngrabKeyboard(SDL_Display, CurrentTime); } else { +printf("SDL grab ON\n"); if ( this->screen->flags & SDL_FULLSCREEN ) { /* Unbind the mouse from the fullscreen window */ XUngrabPointer(SDL_Display, CurrentTime); } /* Try to grab the mouse */ +#if 0 /* We'll wait here until we actually grab, otherwise behavior undefined */ for ( numtries = 0; numtries < 10; ++numtries ) { +#else + while ( 1 ) { +#endif result = XGrabPointer(SDL_Display, SDL_Window, True, 0, GrabModeAsync, GrabModeAsync, SDL_Window, None, CurrentTime); @@ -287,16 +276,16 @@ if ( result != GrabSuccess ) { /* Uh, oh, what do we do here? */ ; } - /* Grab the keyboard if we're in fullscreen mode */ - if ( !(this->screen->flags & SDL_FULLSCREEN) ) { - XGrabKeyboard(SDL_Display, WMwindow, True, + /* Now grab the keyboard */ + XGrabKeyboard(SDL_Display, WMwindow, True, GrabModeAsync, GrabModeAsync, CurrentTime); - SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS); - } /* Raise the window if we grab the mouse */ if ( !(this->screen->flags & SDL_FULLSCREEN) ) XRaiseWindow(SDL_Display, WMwindow); + + /* Make sure we register input focus */ + SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS); } XSync(SDL_Display, False);