SDL: Make the window size when exiting fullscreen workaround macOS specific

The call to SDL_SetWindowSize works around a macOS specific SDL2 bug.
Fixes the window not restoring to its previous position when exiting
fullscreen on Linux/X11.
This commit is contained in:
Bastien Bouclet 2017-07-29 17:23:27 +02:00
parent 12e1466168
commit 8c587b54ab

View file

@ -253,6 +253,13 @@ bool SdlWindow::createOrUpdateWindow(int width, int height, uint32 flags) {
return false; return false;
} }
#if defined(MACOSX)
// macOS windows with the flag SDL_WINDOW_FULLSCREEN_DESKTOP exiting their fullscreen space
// ignore the size set by SDL_SetWindowSize while they were in fullscreen mode.
// Instead, they revert back to their previous windowed mode size.
// This is a bug in SDL2: https://bugzilla.libsdl.org/show_bug.cgi?id=3719.
// TODO: Remove the call to SDL_SetWindowSize below once the SDL bug is fixed.
// In some cases at this point there may be a pending SDL resize event with the old size. // In some cases at this point there may be a pending SDL resize event with the old size.
// This happens for example if we destroyed the window, or when switching between windowed // This happens for example if we destroyed the window, or when switching between windowed
// and fullscreen modes. If we changed the window size here, this pending event will have the // and fullscreen modes. If we changed the window size here, this pending event will have the
@ -260,6 +267,7 @@ bool SdlWindow::createOrUpdateWindow(int width, int height, uint32 flags) {
// resize event (SDL_WINDOWEVENT_SIZE_CHANGED) so that the last resize event we receive has // resize event (SDL_WINDOWEVENT_SIZE_CHANGED) so that the last resize event we receive has
// the correct size. This fixes for exmample bug #9971: SDL2: Fullscreen to RTL launcher resolution // the correct size. This fixes for exmample bug #9971: SDL2: Fullscreen to RTL launcher resolution
SDL_SetWindowSize(_window, width, height); SDL_SetWindowSize(_window, width, height);
#endif
_lastFlags = flags; _lastFlags = flags;