# HG changeset patch # User David Gow # Date 1373955739 -28800 # Node ID 1efb67d38da412151e67f4a3cb29bf2e83bed6cf # Parent e92571f09ce934ad4fe2ef785ad8815b31b18d12 SetWindowSize and SetWindowDisplayMode should happen instantly (fix #1742) diff -r e92571f09ce9 -r 1efb67d38da4 src/video/SDL_video.c --- a/src/video/SDL_video.c Mon Jul 15 20:30:04 2013 -0400 +++ b/src/video/SDL_video.c Tue Jul 16 14:22:19 2013 +0800 @@ -996,19 +996,6 @@ } int -SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode) -{ - CHECK_WINDOW_MAGIC(window, -1); - - if (mode) { - window->fullscreen_mode = *mode; - } else { - SDL_zero(window->fullscreen_mode); - } - return 0; -} - -int SDL_GetWindowDisplayMode(SDL_Window * window, SDL_DisplayMode * mode) { SDL_DisplayMode fullscreen_mode; @@ -1083,11 +1070,6 @@ } } - /* See if anything needs to be done now */ - if ((display->fullscreen_window == window) == fullscreen) { - return; - } - /* See if there are any fullscreen windows */ for (other = _this->windows; other; other = other->next) { SDL_bool setDisplayMode = SDL_FALSE; @@ -1150,6 +1132,25 @@ SDL_RestoreMousePosition(window); } +int +SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode) +{ + CHECK_WINDOW_MAGIC(window, -1); + + if (mode) { + window->fullscreen_mode = *mode; + } else { + SDL_zero(window->fullscreen_mode); + } + + /* Update the mode immediately if we're fullscreen. */ + if (window->flags & SDL_WINDOW_FULLSCREEN) + { + SDL_UpdateFullscreenMode(window, SDL_TRUE); + } + return 0; +} + #define CREATE_FLAGS \ (SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE) @@ -1588,7 +1589,6 @@ return; } - /* FIXME: Should this change fullscreen modes? */ if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { window->w = w; window->h = h; @@ -1599,7 +1599,12 @@ /* We didn't get a SDL_WINDOWEVENT_RESIZED event (by design) */ SDL_OnWindowResized(window); } + } else { + window->w = w; + window->h = h; + SDL_UpdateFullscreenMode(window, SDL_TRUE); } + } void