diff --git a/build-scripts/SDL_migration.cocci b/build-scripts/SDL_migration.cocci index 5ffb57ac3..f167a156a 100644 --- a/build-scripts/SDL_migration.cocci +++ b/build-scripts/SDL_migration.cocci @@ -2326,3 +2326,7 @@ expression e; - SDL_GetDisplayDPI + SDL_GetDisplayPhysicalDPI (...) +@@ +@@ +- SDL_WINDOW_FULLSCREEN ++ SDL_WINDOW_FULLSCREEN_EXCLUSIVE diff --git a/docs/README-migration.md b/docs/README-migration.md index 723a0cda5..67cadb4ba 100644 --- a/docs/README-migration.md +++ b/docs/README-migration.md @@ -977,6 +977,7 @@ The following functions have been renamed: SDL_Window id type is named SDL_WindowID +SDL_WINDOW_FULLSCREEN has been renamed SDL_WINDOW_FULLSCREEN_EXCLUSIVE, and SDL_WINDOW_FULLSCREEN_DESKTOP no longer includes the old SDL_WINDOW_FULLSCREEN flag. You can use `(SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_MASK) != 0` if you want to check for either state. ## SDL_vulkan.h diff --git a/docs/README-winrt.md b/docs/README-winrt.md index ffb0ae822..8f7bbbe3f 100644 --- a/docs/README-winrt.md +++ b/docs/README-winrt.md @@ -343,7 +343,7 @@ int main(int argc, char **argv) return 1; } else if (SDL_GetCurrentDisplayMode(0, &mode) != 0) { return 1; - } else if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN, &window, &renderer) != 0) { + } else if (SDL_CreateWindowAndRenderer(mode.w, mode.h, SDL_WINDOW_FULLSCREEN_EXCLUSIVE, &window, &renderer) != 0) { return 1; } diff --git a/include/SDL3/SDL_oldnames.h b/include/SDL3/SDL_oldnames.h index e1efb0211..ded0461a5 100644 --- a/include/SDL3/SDL_oldnames.h +++ b/include/SDL3/SDL_oldnames.h @@ -415,6 +415,7 @@ #define SDL_GetDisplayDPI SDL_GetDisplayPhysicalDPI #define SDL_GetPointDisplayIndex SDL_GetDisplayIndexForPoint #define SDL_GetRectDisplayIndex SDL_GetDisplayIndexForRect +#define SDL_WINDOW_FULLSCREEN SDL_WINDOW_FULLSCREEN_EXCLUSIVE #elif !defined(SDL_DISABLE_OLD_NAMES) @@ -795,6 +796,7 @@ #define SDL_GetDisplayDPI SDL_GetDisplayDPI_renamed_SDL_GetDisplayPhysicalDPI #define SDL_GetPointDisplayIndex SDL_GetPointDisplayIndex_renamed_SDL_GetDisplayIndexForPoint #define SDL_GetRectDisplayIndex SDL_GetRectDisplayIndex_renamed_SDL_GetDisplayIndexForRect +#define SDL_WINDOW_FULLSCREEN SDL_WINDOW_FULLSCREEN_renamed_SDL_WINDOW_FULLSCREEN_EXCLUSIVE #endif /* SDL_ENABLE_OLD_NAMES */ diff --git a/include/SDL3/SDL_shape.h b/include/SDL3/SDL_shape.h index c3e286548..afc5833f0 100644 --- a/include/SDL3/SDL_shape.h +++ b/include/SDL3/SDL_shape.h @@ -59,7 +59,7 @@ extern "C" { * ::SDL_WINDOW_INPUT_GRABBED, ::SDL_WINDOW_HIDDEN, * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_BORDERLESS is always set, - * and ::SDL_WINDOW_FULLSCREEN is always unset. + * and ::SDL_WINDOW_FULLSCREEN_MASK is always unset. * \return the window created, or NULL if window creation failed. * * \since This function is available since SDL 3.0.0. diff --git a/include/SDL3/SDL_video.h b/include/SDL3/SDL_video.h index 7d7066b99..cefa8c21e 100644 --- a/include/SDL3/SDL_video.h +++ b/include/SDL3/SDL_video.h @@ -107,33 +107,35 @@ typedef struct SDL_Window SDL_Window; */ typedef enum { - SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ - SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_FULLSCREEN_EXCLUSIVE = 0x00000001, /**< window is in fullscreen exclusive mode */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ /* 0x00000004 was SDL_WINDOW_SHOWN in SDL2, please reserve this bit for sdl2-compat. */ - SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ - SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ - SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ - SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ - SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ - SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ - SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ - SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ - SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), - SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = 0x00001000, /**< window is in fullscreen desktop mode */ + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ /* 0x00002000 was SDL_WINDOW_ALLOW_HIGHDPI in SDL2, please reserve this bit for sdl2-compat. */ - SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ - SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ - SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ - SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ - SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ - SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ - SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ - SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ - SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ + SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ + SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ + SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ + SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ + SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ + SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ + SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ + SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ } SDL_WindowFlags; +#define SDL_WINDOW_FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_EXCLUSIVE | SDL_WINDOW_FULLSCREEN_DESKTOP) + /** * \brief Used to indicate that you don't care what the window position is. */ @@ -646,7 +648,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window *window); * * `flags` may be any of the following OR'd together: * - * - `SDL_WINDOW_FULLSCREEN`: fullscreen window + * - `SDL_WINDOW_FULLSCREEN_EXCLUSIVE`: fullscreen window, switching display mode to the closest fullscreen resolution * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance @@ -1157,12 +1159,12 @@ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window *window); /** * Set a window's fullscreen state. * - * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a + * `flags` may be `SDL_WINDOW_FULLSCREEN_EXCLUSIVE`, for "real" fullscreen with a * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen * that takes the size of the desktop; and 0 for windowed mode. * * \param window the window to change - * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 + * \param flags `SDL_WINDOW_FULLSCREEN_EXCLUSIVE`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0 * \returns 0 on success or a negative error code on failure; call * SDL_GetError() for more information. * diff --git a/src/SDL_assert.c b/src/SDL_assert.c index a6d903c3d..63452a387 100644 --- a/src/SDL_assert.c +++ b/src/SDL_assert.c @@ -213,7 +213,7 @@ static SDL_AssertState SDLCALL SDL_PromptAssertion(const SDL_AssertData *data, v /* Leave fullscreen mode, if possible (scary!) */ window = SDL_GetFocusWindow(); if (window) { - if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) { + if ((SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_MASK) != 0) { SDL_MinimizeWindow(window); } else { /* !!! FIXME: ungrab the input if we're not fullscreen? */ diff --git a/src/core/winrt/SDL_winrtapp_direct3d.cpp b/src/core/winrt/SDL_winrtapp_direct3d.cpp index 01d3a8afa..15e21d787 100644 --- a/src/core/winrt/SDL_winrtapp_direct3d.cpp +++ b/src/core/winrt/SDL_winrtapp_direct3d.cpp @@ -150,7 +150,7 @@ static void WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identify SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESTORED, 0, 0); } - WINRT_UpdateWindowFlags(window, SDL_WINDOW_FULLSCREEN_DESKTOP); + WINRT_UpdateWindowFlags(window, SDL_WINDOW_FULLSCREEN_MASK); /* The window can move during a resize event, such as when maximizing or resizing from a corner */ diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c index a1186c3ac..68b59c114 100644 --- a/src/events/SDL_keyboard.c +++ b/src/events/SDL_keyboard.c @@ -930,8 +930,8 @@ static int SDL_SendKeyboardKeyInternal(Uint64 timestamp, SDL_KeyboardFlags flags state == SDL_PRESSED && (keyboard->modstate & SDL_KMOD_ALT) && keyboard->focus && - (keyboard->focus->flags & SDL_WINDOW_KEYBOARD_GRABBED) && - (keyboard->focus->flags & SDL_WINDOW_FULLSCREEN) && + (keyboard->focus->flags & SDL_WINDOW_KEYBOARD_GRABBED) != 0 && + (keyboard->focus->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0 && SDL_GetHintBoolean(SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED, SDL_TRUE)) { /* We will temporarily forfeit our grab by minimizing our window, allowing the user to escape the application */ diff --git a/src/events/SDL_windowevents.c b/src/events/SDL_windowevents.c index 5e267ea25..d6adace54 100644 --- a/src/events/SDL_windowevents.c +++ b/src/events/SDL_windowevents.c @@ -102,7 +102,7 @@ int SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent, SDL_WINDOWPOS_ISUNDEFINED(data2)) { return 0; } - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { window->windowed.x = data1; window->windowed.y = data2; } @@ -114,7 +114,7 @@ int SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent, SDL_OnWindowMoved(window); break; case SDL_EVENT_WINDOW_RESIZED: - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { window->windowed.w = data1; window->windowed.h = data2; } diff --git a/src/render/direct3d/SDL_render_d3d.c b/src/render/direct3d/SDL_render_d3d.c index 4aa34eca0..5d5ee4ed2 100644 --- a/src/render/direct3d/SDL_render_d3d.c +++ b/src/render/direct3d/SDL_render_d3d.c @@ -294,7 +294,7 @@ static int D3D_ActivateRenderer(SDL_Renderer *renderer) SDL_GetWindowSizeInPixels(window, &w, &h); data->pparams.BackBufferWidth = w; data->pparams.BackBufferHeight = h; - if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window_flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { SDL_DisplayMode fullscreen_mode; SDL_GetWindowDisplayMode(window, &fullscreen_mode); data->pparams.Windowed = FALSE; @@ -1623,7 +1623,7 @@ D3D_CreateRenderer(SDL_Window *window, Uint32 flags) pparams.BackBufferCount = 1; pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; - if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window_flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { pparams.Windowed = FALSE; pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode.format); pparams.FullScreen_RefreshRateInHz = (UINT)SDL_ceilf(fullscreen_mode.refresh_rate); diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c index 8b961ec86..4b988f041 100644 --- a/src/test/SDL_test_common.c +++ b/src/test/SDL_test_common.c @@ -242,7 +242,7 @@ int SDLTest_CommonArg(SDLTest_CommonState *state, int index) return 1; } if (SDL_strcasecmp(argv[index], "--fullscreen") == 0) { - state->window_flags |= SDL_WINDOW_FULLSCREEN; + state->window_flags |= SDL_WINDOW_FULLSCREEN_EXCLUSIVE; state->num_windows = 1; return 1; } @@ -256,7 +256,7 @@ int SDLTest_CommonArg(SDLTest_CommonState *state, int index) if (!argv[index] || !SDL_isdigit((unsigned char)*argv[index])) { return -1; } - if (!(state->window_flags & SDL_WINDOW_FULLSCREEN)) { + if ((state->window_flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { state->num_windows = SDL_atoi(argv[index]); } return 2; @@ -676,8 +676,8 @@ static void SDLTest_PrintDisplayOrientation(char *text, size_t maxlen, SDL_Displ static void SDLTest_PrintWindowFlag(char *text, size_t maxlen, Uint32 flag) { switch (flag) { - case SDL_WINDOW_FULLSCREEN: - SDL_snprintfcat(text, maxlen, "FULLSCREEN"); + case SDL_WINDOW_FULLSCREEN_EXCLUSIVE: + SDL_snprintfcat(text, maxlen, "FULLSCREEN_EXCLUSIVE"); break; case SDL_WINDOW_OPENGL: SDL_snprintfcat(text, maxlen, "OPENGL"); @@ -748,7 +748,7 @@ static void SDLTest_PrintWindowFlag(char *text, size_t maxlen, Uint32 flag) static void SDLTest_PrintWindowFlags(char *text, size_t maxlen, Uint32 flags) { const Uint32 window_flags[] = { - SDL_WINDOW_FULLSCREEN, + SDL_WINDOW_FULLSCREEN_EXCLUSIVE, SDL_WINDOW_OPENGL, SDL_WINDOW_HIDDEN, SDL_WINDOW_BORDERLESS, @@ -1730,13 +1730,13 @@ static void FullscreenTo(int index, int windowId) SDL_GetDisplayBounds(index, &rect); flags = SDL_GetWindowFlags(window); - if (flags & SDL_WINDOW_FULLSCREEN) { + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { SDL_SetWindowFullscreen(window, 0); SDL_Delay(15); } SDL_SetWindowPosition(window, rect.x, rect.y); - SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN); + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_EXCLUSIVE); } void SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done) @@ -2015,10 +2015,10 @@ void SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done SDL_Window *window = SDL_GetWindowFromID(event->key.windowID); if (window) { Uint32 flags = SDL_GetWindowFlags(window); - if (flags & SDL_WINDOW_FULLSCREEN) { - SDL_SetWindowFullscreen(window, SDL_FALSE); + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { + SDL_SetWindowFullscreen(window, 0); } else { - SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN); + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_EXCLUSIVE); } } } else if (withAlt) { @@ -2026,8 +2026,8 @@ void SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done SDL_Window *window = SDL_GetWindowFromID(event->key.windowID); if (window) { Uint32 flags = SDL_GetWindowFlags(window); - if (flags & SDL_WINDOW_FULLSCREEN) { - SDL_SetWindowFullscreen(window, SDL_FALSE); + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { + SDL_SetWindowFullscreen(window, 0); } else { SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } @@ -2037,8 +2037,8 @@ void SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done SDL_Window *window = SDL_GetWindowFromID(event->key.windowID); if (window) { Uint32 flags = SDL_GetWindowFlags(window); - if ((flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { - SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN); + if ((flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { + SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_EXCLUSIVE); } else { SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } diff --git a/src/video/SDL_shape.c b/src/video/SDL_shape.c index 555418fec..1ecb08ae0 100644 --- a/src/video/SDL_shape.c +++ b/src/video/SDL_shape.c @@ -27,7 +27,7 @@ SDL_Window * SDL_CreateShapedWindow(const char *title, unsigned int x, unsigned int y, unsigned int w, unsigned int h, Uint32 flags) { SDL_Window *result = NULL; - result = SDL_CreateWindow(title, -1000, -1000, w, h, (flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~SDL_WINDOW_RESIZABLE)); + result = SDL_CreateWindow(title, -1000, -1000, w, h, (flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN_MASK) & (~SDL_WINDOW_RESIZABLE)); if (result != NULL) { if (SDL_GetVideoDevice()->shape_driver.CreateShaper == NULL) { SDL_DestroyWindow(result); diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h index 01bc7ed00..b76b6faef 100644 --- a/src/video/SDL_sysvideo.h +++ b/src/video/SDL_sysvideo.h @@ -108,10 +108,10 @@ struct SDL_Window SDL_Window *prev; SDL_Window *next; }; -#define FULLSCREEN_VISIBLE(W) \ - (((W)->flags & SDL_WINDOW_FULLSCREEN) && \ - !((W)->flags & SDL_WINDOW_HIDDEN) && \ - !((W)->flags & SDL_WINDOW_MINIMIZED)) +#define SDL_WINDOW_FULLSCREEN_VISIBLE(W) \ + ((((W)->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) && \ + (((W)->flags & SDL_WINDOW_HIDDEN) == 0) && \ + (((W)->flags & SDL_WINDOW_MINIMIZED) == 0)) /* * Define the SDL display structure. diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 8d4288d88..3dc6ca9d8 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -151,8 +151,6 @@ static VideoBootStrap *bootstrap[] = { return retval; \ } -#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) - #if defined(__MACOS__) && defined(SDL_VIDEO_DRIVER_COCOA) /* Support for macOS fullscreen spaces */ extern SDL_bool Cocoa_IsWindowInFullscreenSpace(SDL_Window *window); @@ -1298,7 +1296,7 @@ int SDL_SetWindowDisplayMode(SDL_Window *window, const SDL_DisplayMode *mode) SDL_zero(window->fullscreen_mode); } - if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if (SDL_WINDOW_FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { SDL_DisplayMode fullscreen_mode; if (SDL_GetWindowDisplayMode(window, &fullscreen_mode) == 0) { if (SDL_SetDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode) == 0) { @@ -1338,7 +1336,7 @@ int SDL_GetWindowDisplayMode(SDL_Window *window, SDL_DisplayMode *mode) display = SDL_GetDisplayForWindow(window); /* if in desktop size mode, just return the size of the desktop */ - if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { fullscreen_mode = display->desktop_mode; } else if (!SDL_GetClosestDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode, @@ -1403,16 +1401,20 @@ static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen) do nothing, or else we may trigger an ugly double-transition */ if (SDL_strcmp(_this->name, "cocoa") == 0) { /* don't do this for X11, etc */ - if (window->is_destroying && (window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP) { + if (window->is_destroying && (window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { return 0; } /* If we're switching between a fullscreen Space and "normal" fullscreen, we need to get back to normal first. */ - if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN)) { + if (fullscreen && + (window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0 && + (window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { if (!Cocoa_SetWindowFullscreenSpace(window, SDL_FALSE)) { return -1; } - } else if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP)) { + } else if (fullscreen && + (window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0 && + (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { display = SDL_GetDisplayForWindow(window); SDL_SetDisplayModeForDisplay(display, NULL); if (_this->SetWindowFullscreen) { @@ -1437,7 +1439,7 @@ static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen) to fullscreen (being active, or not), and figure out a return/error code from that. */ - if (fullscreen == !(WINRT_DetectWindowFlags(window) & FULLSCREEN_MASK)) { + if (fullscreen == !(WINRT_DetectWindowFlags(window) & SDL_WINDOW_FULLSCREEN_MASK)) { /* Uh oh, either: 1. fullscreen was requested, and we're already windowed 2. windowed-mode was requested, and we're already fullscreen @@ -1466,7 +1468,7 @@ static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen) /* See if anything needs to be done now */ if ((display->fullscreen_window == window) == fullscreen) { - if ((window->last_fullscreen_flags & FULLSCREEN_MASK) == (window->flags & FULLSCREEN_MASK)) { + if ((window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_MASK) == (window->flags & SDL_WINDOW_FULLSCREEN_MASK)) { return 0; } } @@ -1477,7 +1479,7 @@ static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen) if (other == window) { setDisplayMode = fullscreen; - } else if (FULLSCREEN_VISIBLE(other) && + } else if (SDL_WINDOW_FULLSCREEN_VISIBLE(other) && SDL_GetDisplayForWindow(other) == display) { setDisplayMode = SDL_TRUE; } @@ -1495,7 +1497,7 @@ static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen) } /* only do the mode change if we want exclusive fullscreen */ - if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { if (SDL_SetDisplayModeForDisplay(display, &fullscreen_mode) < 0) { return -1; } @@ -1599,7 +1601,7 @@ static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags) if (flags & SDL_WINDOW_MINIMIZED) { SDL_MinimizeWindow(window); } - if (flags & SDL_WINDOW_FULLSCREEN) { + if (flags & SDL_WINDOW_FULLSCREEN_MASK) { SDL_SetWindowFullscreen(window, flags); } if (flags & SDL_WINDOW_MOUSE_GRABBED) { @@ -1749,7 +1751,7 @@ SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint window->windowed.w = window->w; window->windowed.h = window->h; - if (flags & SDL_WINDOW_FULLSCREEN) { + if (flags & SDL_WINDOW_FULLSCREEN_MASK) { SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); int displayIndex; SDL_Rect bounds; @@ -1760,7 +1762,7 @@ SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint /* for real fullscreen we might switch the resolution, so get width and height * from closest supported mode and use that instead of current resolution */ - if ((flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP && (bounds.w != w || bounds.h != h)) { + if ((flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0 && (bounds.w != w || bounds.h != h)) { SDL_DisplayMode fullscreen_mode, closest_mode; SDL_zero(fullscreen_mode); fullscreen_mode.screen_w = w; @@ -1822,7 +1824,7 @@ SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint SDL_FinishWindowCreation(window, flags); /* If the window was created fullscreen, make sure the mode code matches */ - SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)); + SDL_UpdateFullscreenMode(window, SDL_WINDOW_FULLSCREEN_VISIBLE(window)); return window; } @@ -2201,7 +2203,7 @@ void SDL_SetWindowPosition(SDL_Window *window, int x, int y) } } - if ((window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { if (!SDL_WINDOWPOS_ISUNDEFINED(x)) { window->windowed.x = x; } @@ -2227,7 +2229,7 @@ void SDL_GetWindowPosition(SDL_Window *window, int *x, int *y) CHECK_WINDOW_MAGIC(window, ); /* Fullscreen windows are always at their display's origin */ - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { int displayIndex; if (x) { @@ -2266,7 +2268,7 @@ void SDL_GetWindowPosition(SDL_Window *window, int *x, int *y) void SDL_SetWindowBordered(SDL_Window *window, SDL_bool bordered) { CHECK_WINDOW_MAGIC(window, ); - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { const int want = (bordered != SDL_FALSE); /* normalize the flag. */ const int have = ((window->flags & SDL_WINDOW_BORDERLESS) == 0); if ((want != have) && (_this->SetWindowBordered)) { @@ -2283,7 +2285,7 @@ void SDL_SetWindowBordered(SDL_Window *window, SDL_bool bordered) void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable) { CHECK_WINDOW_MAGIC(window, ); - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { const int want = (resizable != SDL_FALSE); /* normalize the flag. */ const int have = ((window->flags & SDL_WINDOW_RESIZABLE) != 0); if ((want != have) && (_this->SetWindowResizable)) { @@ -2300,7 +2302,7 @@ void SDL_SetWindowResizable(SDL_Window *window, SDL_bool resizable) void SDL_SetWindowAlwaysOnTop(SDL_Window *window, SDL_bool on_top) { CHECK_WINDOW_MAGIC(window, ); - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { const int want = (on_top != SDL_FALSE); /* normalize the flag. */ const int have = ((window->flags & SDL_WINDOW_ALWAYS_ON_TOP) != 0); if ((want != have) && (_this->SetWindowAlwaysOnTop)) { @@ -2344,8 +2346,9 @@ void SDL_SetWindowSize(SDL_Window *window, int w, int h) window->windowed.w = w; window->windowed.h = h; - if (window->flags & SDL_WINDOW_FULLSCREEN) { - if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { + if (SDL_WINDOW_FULLSCREEN_VISIBLE(window) && + (window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { window->last_fullscreen_flags = 0; SDL_UpdateFullscreenMode(window, SDL_TRUE); } @@ -2462,7 +2465,7 @@ void SDL_SetWindowMinimumSize(SDL_Window *window, int min_w, int min_h) window->min_w = min_w; window->min_h = min_h; - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { if (_this->SetWindowMinimumSize) { _this->SetWindowMinimumSize(_this, window); } @@ -2502,7 +2505,7 @@ void SDL_SetWindowMaximumSize(SDL_Window *window, int max_w, int max_h) window->max_w = max_w; window->max_h = max_h; - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { if (_this->SetWindowMaximumSize) { _this->SetWindowMaximumSize(_this, window); } @@ -2628,22 +2631,27 @@ int SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags) Uint32 oldflags; CHECK_WINDOW_MAGIC(window, -1); - flags &= FULLSCREEN_MASK; + flags &= SDL_WINDOW_FULLSCREEN_MASK; - if (flags == (window->flags & FULLSCREEN_MASK)) { + /* If both fullscreen exclusive and desktop flags are set, default to desktop */ + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_MASK) { + flags = SDL_WINDOW_FULLSCREEN_DESKTOP; + } + + if (flags == (window->flags & SDL_WINDOW_FULLSCREEN_MASK)) { return 0; } /* clear the previous flags and OR in the new ones */ - oldflags = window->flags & FULLSCREEN_MASK; - window->flags &= ~FULLSCREEN_MASK; + oldflags = window->flags & SDL_WINDOW_FULLSCREEN_MASK; + window->flags &= ~SDL_WINDOW_FULLSCREEN_MASK; window->flags |= flags; - if (SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)) == 0) { + if (SDL_UpdateFullscreenMode(window, SDL_WINDOW_FULLSCREEN_VISIBLE(window)) == 0) { return 0; } - window->flags &= ~FULLSCREEN_MASK; + window->flags &= ~SDL_WINDOW_FULLSCREEN_MASK; window->flags |= oldflags; return -1; } @@ -3000,15 +3008,15 @@ void SDL_OnWindowHidden(SDL_Window *window) void SDL_OnWindowDisplayChanged(SDL_Window *window) { - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { SDL_Rect rect; - if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + if (SDL_WINDOW_FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { window->last_fullscreen_flags = 0; if (SDL_UpdateFullscreenMode(window, SDL_TRUE) != 0) { /* Something went wrong and the window is no longer fullscreen. */ - window->flags &= ~FULLSCREEN_MASK; + window->flags &= ~SDL_WINDOW_FULLSCREEN_MASK; return; } } @@ -3080,7 +3088,7 @@ void SDL_OnWindowRestored(SDL_Window *window) */ /*SDL_RaiseWindow(window);*/ - if (FULLSCREEN_VISIBLE(window)) { + if (SDL_WINDOW_FULLSCREEN_VISIBLE(window)) { SDL_UpdateFullscreenMode(window, SDL_TRUE); } } @@ -3114,7 +3122,7 @@ static SDL_bool SDL_ShouldMinimizeOnFocusLoss(SDL_Window *window) { const char *hint; - if (!(window->flags & SDL_WINDOW_FULLSCREEN) || window->is_destroying) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0 || window->is_destroying) { return SDL_FALSE; } @@ -3138,7 +3146,7 @@ static SDL_bool SDL_ShouldMinimizeOnFocusLoss(SDL_Window *window) /* Real fullscreen windows should minimize on focus loss so the desktop video mode is restored */ hint = SDL_GetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS); if (hint == NULL || !*hint || SDL_strcasecmp(hint, "auto") == 0) { - if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP || + if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0 || ModeSwitchingEmulated(_this) == SDL_TRUE) { return SDL_FALSE; } else { diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index 8795c6dd0..7f69ecc35 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -53,8 +53,6 @@ } while (0) #endif -#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) - #ifndef MAC_OS_X_VERSION_10_12 #define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask #endif @@ -105,7 +103,7 @@ SDL_Window *window = [self findSDLWindow]; if (window == NULL) { return NO; - } else if ((window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)) != 0) { + } else if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { return NO; } else if ((window->flags & SDL_WINDOW_RESIZABLE) == 0) { return NO; @@ -325,7 +323,7 @@ static NSUInteger GetWindowStyle(SDL_Window *window) { NSUInteger style = 0; - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { style = NSWindowStyleMaskBorderless; } else { style = GetWindowWindowedStyle(window); @@ -570,9 +568,9 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) if (!videodata.allow_spaces) { return NO; /* Spaces are forcibly disabled. */ - } else if (state && ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP)) { + } else if (state && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == 0) { return NO; /* we only allow you to make a Space on FULLSCREEN_DESKTOP windows. */ - } else if (!state && ((window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP)) { + } else if (!state && (window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == 0) { return NO; /* we only handle leaving the Space on windows that were previously FULLSCREEN_DESKTOP. */ } else if (state == isFullscreenSpace) { return YES; /* already there. */ @@ -742,7 +740,7 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) int x, y; SDL_Window *window = _data.window; NSWindow *nswindow = _data.nswindow; - BOOL fullscreen = window->flags & FULLSCREEN_MASK; + BOOL fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; ConvertNSRect([nswindow screen], fullscreen, &rect); @@ -781,6 +779,7 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) NSRect rect; int x, y, w, h; BOOL zoomed; + BOOL fullscreen; if (inFullscreenTransition) { /* We'll take care of this at the end of the transition */ return; @@ -794,7 +793,8 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) window = _data.window; nswindow = _data.nswindow; rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); + fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; + ConvertNSRect([nswindow screen], fullscreen, &rect); x = (int)rect.origin.x; y = (int)rect.origin.y; w = (int)rect.size.width; @@ -863,7 +863,7 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) /* Check to see if someone updated the clipboard */ Cocoa_CheckClipboardUpdate(_data.videodata); - if ((isFullscreenSpace) && ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP)) { + if (isFullscreenSpace && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { [NSMenu setMenuBarVisible:NO]; } { @@ -962,7 +962,7 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) pendingWindowOperation = PENDING_OPERATION_NONE; [self setFullscreenSpace:NO]; } else { - if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { [NSMenu setMenuBarVisible:NO]; } @@ -1107,7 +1107,7 @@ static void Cocoa_UpdateClipCursor(SDL_Window *window) - (NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions { - if ((_data.window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((_data.window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { return NSApplicationPresentationFullScreen | NSApplicationPresentationHideDock | NSApplicationPresentationHideMenuBar; } else { return proposedOptions; @@ -1635,7 +1635,8 @@ static int SetupWindowData(_THIS, SDL_Window *window, NSWindow *nswindow, NSView /* Fill in the SDL window with the window data */ { NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); + BOOL fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; + ConvertNSRect([nswindow screen], fullscreen, &rect); window->x = (int)rect.origin.x; window->y = (int)rect.origin.y; window->w = (int)rect.size.width; @@ -1711,6 +1712,7 @@ int Cocoa_CreateWindow(_THIS, SDL_Window *window) NSWindow *nswindow; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); NSRect rect; + BOOL fullscreen; SDL_Rect bounds; NSUInteger style; NSArray *screens = [NSScreen screens]; @@ -1723,7 +1725,8 @@ int Cocoa_CreateWindow(_THIS, SDL_Window *window) rect.origin.y = window->y; rect.size.width = window->w; rect.size.height = window->h; - ConvertNSRect([screens objectAtIndex:0], (window->flags & FULLSCREEN_MASK), &rect); + fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; + ConvertNSRect([screens objectAtIndex:0], fullscreen, &rect); style = GetWindowStyle(window); @@ -1897,13 +1900,15 @@ void Cocoa_SetWindowPosition(_THIS, SDL_Window *window) SDL_WindowData *windata = (__bridge SDL_WindowData *)window->driverdata; NSWindow *nswindow = windata.nswindow; NSRect rect; + BOOL fullscreen; Uint64 moveHack; rect.origin.x = window->x; rect.origin.y = window->y; rect.size.width = window->w; rect.size.height = window->h; - ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); + fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; + ConvertNSRect([nswindow screen], fullscreen, &rect); moveHack = s_moveHack; s_moveHack = 0; @@ -1920,6 +1925,7 @@ void Cocoa_SetWindowSize(_THIS, SDL_Window *window) SDL_WindowData *windata = (__bridge SDL_WindowData *)window->driverdata; NSWindow *nswindow = windata.nswindow; NSRect rect; + BOOL fullscreen; Uint64 moveHack; /* Cocoa will resize the window from the bottom-left rather than the @@ -1930,7 +1936,8 @@ void Cocoa_SetWindowSize(_THIS, SDL_Window *window) rect.origin.y = window->y; rect.size.width = window->w; rect.size.height = window->h; - ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); + fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_MASK) ? YES : NO; + ConvertNSRect([nswindow screen], fullscreen, &rect); moveHack = s_moveHack; s_moveHack = 0; @@ -2289,7 +2296,7 @@ void Cocoa_SetWindowMouseGrab(_THIS, SDL_Window *window, SDL_bool grabbed) Cocoa_UpdateClipCursor(window); - if (data && (window->flags & SDL_WINDOW_FULLSCREEN)) { + if (data && (window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { if (SDL_ShouldAllowTopmost() && (window->flags & SDL_WINDOW_INPUT_FOCUS) && ![data.listener isInFullscreenSpace]) { /* OpenGL is rendering to the window, so make it visible! */ /* Doing this in 10.11 while in a Space breaks things (bug #3152) */ diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c index 0d5e6b23a..fe64bca12 100644 --- a/src/video/emscripten/SDL_emscriptenevents.c +++ b/src/video/emscripten/SDL_emscriptenevents.c @@ -33,8 +33,6 @@ #include "SDL_emscriptenevents.h" #include "SDL_emscriptenvideo.h" -#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) - /* .keyCode to SDL keycode https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent @@ -838,11 +836,11 @@ static EM_BOOL Emscripten_HandleFullscreenChange(int eventType, const Emscripten SDL_VideoDisplay *display; if (fullscreenChangeEvent->isFullscreen) { - window_data->window->flags |= window_data->requested_fullscreen_mode; + window_data->window->flags |= window_data->fullscreen_mode_flags; - window_data->requested_fullscreen_mode = 0; + window_data->fullscreen_mode_flags = 0; } else { - window_data->window->flags &= ~FULLSCREEN_MASK; + window_data->window->flags &= ~SDL_WINDOW_FULLSCREEN_MASK; /* reset fullscreen window if the browser left fullscreen */ display = SDL_GetDisplayForWindow(window_data->window); @@ -868,7 +866,7 @@ static EM_BOOL Emscripten_HandleResize(int eventType, const EmscriptenUiEvent *u } } - if (!(window_data->window->flags & FULLSCREEN_MASK)) { + if ((window_data->window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { /* this will only work if the canvas size is set through css */ if (window_data->window->flags & SDL_WINDOW_RESIZABLE) { double w = window_data->window->w; diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c index 9c73a8539..ccd09fac5 100644 --- a/src/video/emscripten/SDL_emscriptenvideo.c +++ b/src/video/emscripten/SDL_emscriptenvideo.c @@ -317,7 +317,7 @@ static void Emscripten_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoD if (fullscreen) { EmscriptenFullscreenStrategy strategy; - SDL_bool is_desktop_fullscreen = (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP; + SDL_bool is_desktop_fullscreen = ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) ? SDL_TRUE : SDL_FALSE; int res; strategy.scaleMode = is_desktop_fullscreen ? EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH : EMSCRIPTEN_FULLSCREEN_SCALE_ASPECT; @@ -335,13 +335,13 @@ static void Emscripten_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoD strategy.canvasResizedCallback = Emscripten_HandleCanvasResize; strategy.canvasResizedCallbackUserData = data; - data->requested_fullscreen_mode = window->flags & (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN); + data->fullscreen_mode_flags = (window->flags & SDL_WINDOW_FULLSCREEN_MASK); data->fullscreen_resize = is_desktop_fullscreen; res = emscripten_request_fullscreen_strategy(data->canvas_id, 1, &strategy); if (res != EMSCRIPTEN_RESULT_SUCCESS && res != EMSCRIPTEN_RESULT_DEFERRED) { /* unset flags, fullscreen failed */ - window->flags &= ~(SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN); + window->flags &= ~SDL_WINDOW_FULLSCREEN_MASK; } } else emscripten_exit_fullscreen(); diff --git a/src/video/emscripten/SDL_emscriptenvideo.h b/src/video/emscripten/SDL_emscriptenvideo.h index f7605f8d3..5789afad8 100644 --- a/src/video/emscripten/SDL_emscriptenvideo.h +++ b/src/video/emscripten/SDL_emscriptenvideo.h @@ -41,7 +41,7 @@ typedef struct SDL_WindowData SDL_bool external_size; - int requested_fullscreen_mode; + Uint32 fullscreen_mode_flags; SDL_bool fullscreen_resize; SDL_bool has_pointer_lock; diff --git a/src/video/haiku/SDL_bwindow.cc b/src/video/haiku/SDL_bwindow.cc index 121e4c427..a4ef0a4ba 100644 --- a/src/video/haiku/SDL_bwindow.cc +++ b/src/video/haiku/SDL_bwindow.cc @@ -52,7 +52,7 @@ static int _InitWindow(_THIS, SDL_Window *window) { window->y + window->h - 1 ); - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { /* TODO: Add support for this flag */ printf(__FILE__": %d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",__LINE__); } diff --git a/src/video/kmsdrm/SDL_kmsdrmvideo.c b/src/video/kmsdrm/SDL_kmsdrmvideo.c index e31ec8786..70cbd1faa 100644 --- a/src/video/kmsdrm/SDL_kmsdrmvideo.c +++ b/src/video/kmsdrm/SDL_kmsdrmvideo.c @@ -1117,7 +1117,7 @@ static void KMSDRM_GetModeToSet(SDL_Window *window, drmModeModeInfo *out_mode) SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); SDL_DisplayData *dispdata = (SDL_DisplayData *)display->driverdata; - if ((window->flags & SDL_WINDOW_FULLSCREEN) == SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { *out_mode = dispdata->fullscreen_mode; } else { drmModeModeInfo *mode; diff --git a/src/video/psp/SDL_pspgl.c b/src/video/psp/SDL_pspgl.c index 1febb847a..2365078f0 100644 --- a/src/video/psp/SDL_pspgl.c +++ b/src/video/psp/SDL_pspgl.c @@ -84,7 +84,7 @@ SDL_GLContext PSP_GL_CreateContext(_THIS, SDL_Window *window) EGLCHK(display = eglGetDisplay(0)); EGLCHK(eglInitialize(display, NULL, NULL)); wdata->uses_gles = SDL_TRUE; - window->flags |= SDL_WINDOW_FULLSCREEN; + window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; /* Setup the config based on SDL's current values. */ i = 0; diff --git a/src/video/riscos/SDL_riscoswindow.c b/src/video/riscos/SDL_riscoswindow.c index 6591fb5fd..09b1a1d1b 100644 --- a/src/video/riscos/SDL_riscoswindow.c +++ b/src/video/riscos/SDL_riscoswindow.c @@ -40,7 +40,7 @@ int RISCOS_CreateWindow(_THIS, SDL_Window *window) } driverdata->window = window; - window->flags |= SDL_WINDOW_FULLSCREEN; + window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; SDL_SetMouseFocus(window); diff --git a/src/video/uikit/SDL_uikitviewcontroller.m b/src/video/uikit/SDL_uikitviewcontroller.m index 46381fb7e..54a250558 100644 --- a/src/video/uikit/SDL_uikitviewcontroller.m +++ b/src/video/uikit/SDL_uikitviewcontroller.m @@ -212,7 +212,7 @@ static void SDLCALL SDL_HideHomeIndicatorHintChanged(void *userdata, const char - (BOOL)prefersStatusBarHidden { - BOOL hidden = (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) != 0; + BOOL hidden = (window->flags & (SDL_WINDOW_FULLSCREEN_MASK | SDL_WINDOW_BORDERLESS)) != 0; return hidden; } @@ -236,7 +236,7 @@ static void SDLCALL SDL_HideHomeIndicatorHintChanged(void *userdata, const char } /* By default, fullscreen and borderless windows get all screen gestures */ - if ((window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) != 0) { + if ((window->flags & (SDL_WINDOW_FULLSCREEN_MASK | SDL_WINDOW_BORDERLESS)) != 0) { return UIRectEdgeAll; } else { return UIRectEdgeNone; diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index 1703ba78d..fa7882b3d 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -194,7 +194,7 @@ int UIKit_CreateWindow(_THIS, SDL_Window *window) } if (data.uiscreen == [UIScreen mainScreen]) { - if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { + if (window->flags & (SDL_WINDOW_FULLSCREEN_MASK | SDL_WINDOW_BORDERLESS)) { [UIApplication sharedApplication].statusBarHidden = YES; } else { [UIApplication sharedApplication].statusBarHidden = NO; @@ -267,7 +267,7 @@ static void UIKit_UpdateWindowBorder(_THIS, SDL_Window *window) #if !TARGET_OS_TV if (data.uiwindow.screen == [UIScreen mainScreen]) { - if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { + if (window->flags & (SDL_WINDOW_FULLSCREEN_MASK | SDL_WINDOW_BORDERLESS)) { [UIApplication sharedApplication].statusBarHidden = YES; } else { [UIApplication sharedApplication].statusBarHidden = NO; diff --git a/src/video/vita/SDL_vitagles.c b/src/video/vita/SDL_vitagles.c index f527c4b3b..7ed9eb0fb 100644 --- a/src/video/vita/SDL_vitagles.c +++ b/src/video/vita/SDL_vitagles.c @@ -100,7 +100,7 @@ SDL_GLContext VITA_GLES_CreateContext(_THIS, SDL_Window *window) EGLCHK(eglInitialize(display, NULL, NULL)); wdata->uses_gles = SDL_TRUE; - window->flags |= SDL_WINDOW_FULLSCREEN; + window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; EGLCHK(eglBindAPI(EGL_OPENGL_ES_API)); diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c index 78fe3829f..24199f628 100644 --- a/src/video/wayland/SDL_waylandwindow.c +++ b/src/video/wayland/SDL_waylandwindow.c @@ -44,7 +44,6 @@ #include #endif -#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP) SDL_FORCE_INLINE SDL_bool FloatEqual(float a, float b) { @@ -70,7 +69,7 @@ static void GetFullScreenDimensions(SDL_Window *window, int *width, int *height, * If the application is DPI aware, it will need to handle the transformations between the * differently sized window and backbuffer spaces on its own. */ - if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0) { fs_width = output_width; fs_height = output_height; @@ -113,8 +112,7 @@ static void GetFullScreenDimensions(SDL_Window *window, int *width, int *height, SDL_FORCE_INLINE SDL_bool FullscreenModeEmulation(SDL_Window *window) { - return (window->flags & SDL_WINDOW_FULLSCREEN) && - ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP); + return ((window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0); } SDL_bool SurfaceScaleIsFractional(SDL_Window *window) @@ -330,12 +328,12 @@ static void SetMinMaxDimensions(SDL_Window *window, SDL_bool commit) return; } - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_EXCLUSIVE) != 0) { min_width = 0; min_height = 0; max_width = 0; max_height = 0; - } else if (window->flags & SDL_WINDOW_RESIZABLE) { + } else if ((window->flags & SDL_WINDOW_RESIZABLE) != 0) { min_width = window->min_w; min_height = window->min_h; max_width = window->max_w; @@ -443,18 +441,18 @@ static void UpdateWindowFullscreen(SDL_Window *window, SDL_bool fullscreen) SDL_WindowData *wind = (SDL_WindowData *)window->driverdata; if (fullscreen) { - if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { /* * If the window was never previously made full screen, check if a particular - * fullscreen mode has been set for the window. If one is found, use SDL_WINDOW_FULLSCREEN, + * fullscreen mode has been set for the window. If one is found, use SDL_WINDOW_FULLSCREEN_EXCLUSIVE, * otherwise, use SDL_WINDOW_FULLSCREEN_DESKTOP. * - * If the previous flag was SDL_WINDOW_FULLSCREEN, make sure a mode is still set, + * If the previous flag was SDL_WINDOW_FULLSCREEN_EXCLUSIVE, make sure a mode is still set, * otherwise, fall back to SDL_WINDOW_FULLSCREEN_DESKTOP. */ if (!wind->fullscreen_flags) { if (window->fullscreen_mode.pixel_w && window->fullscreen_mode.pixel_h) { - wind->fullscreen_flags = SDL_WINDOW_FULLSCREEN; + wind->fullscreen_flags = SDL_WINDOW_FULLSCREEN_EXCLUSIVE; } else { wind->fullscreen_flags = SDL_WINDOW_FULLSCREEN_DESKTOP; } @@ -472,7 +470,7 @@ static void UpdateWindowFullscreen(SDL_Window *window, SDL_bool fullscreen) } else { /* Don't change the fullscreen flags if the window is hidden or being hidden. */ if (!window->is_hiding && !(window->flags & SDL_WINDOW_HIDDEN)) { - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { wind->is_fullscreen = SDL_FALSE; wind->in_fullscreen_transition = SDL_TRUE; @@ -1672,7 +1670,7 @@ void Wayland_SetWindowFullscreen(_THIS, SDL_Window *window, /* Save the last fullscreen flags for future requests by the compositor. */ if (fullscreen) { - wind->fullscreen_flags = window->flags & FULLSCREEN_MASK; + wind->fullscreen_flags = (window->flags & SDL_WINDOW_FULLSCREEN_MASK); } /* Don't send redundant fullscreen set/unset events. */ diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 7e87e8ad4..0bdaf9b6b 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -1491,7 +1491,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_NCCALCSIZE: { Uint32 window_flags = SDL_GetWindowFlags(data->window); - if (wParam == TRUE && (window_flags & SDL_WINDOW_BORDERLESS) && !(window_flags & SDL_WINDOW_FULLSCREEN)) { + if (wParam == TRUE && (window_flags & SDL_WINDOW_BORDERLESS) != 0 && (window_flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { /* When borderless, need to tell windows that the size of the non-client area is 0 */ if (!(window_flags & SDL_WINDOW_RESIZABLE)) { int w, h; diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index d6cc7b32a..a3b5ab9e2 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -73,27 +73,27 @@ static DWORD GetWindowStyle(SDL_Window *window) { DWORD style = 0; - if (window->flags & SDL_WINDOW_FULLSCREEN) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { style |= STYLE_FULLSCREEN; } else { - if (window->flags & SDL_WINDOW_BORDERLESS) { + if ((window->flags & SDL_WINDOW_BORDERLESS) != 0) { style |= STYLE_BORDERLESS_WINDOWED; } else { style |= STYLE_NORMAL; } - if (window->flags & SDL_WINDOW_RESIZABLE) { + if ((window->flags & SDL_WINDOW_RESIZABLE) != 0) { /* You can have a borderless resizable window, but Windows doesn't always draw it correctly, see https://bugzilla.libsdl.org/show_bug.cgi?id=4466 */ - if (!(window->flags & SDL_WINDOW_BORDERLESS) || + if ((window->flags & SDL_WINDOW_BORDERLESS) == 0 || SDL_GetHintBoolean("SDL_BORDERLESS_RESIZABLE_STYLE", SDL_FALSE)) { style |= STYLE_RESIZABLE; } } /* Need to set initialize minimize style, or when we call ShowWindow with WS_MINIMIZE it will activate a random window */ - if (window->flags & SDL_WINDOW_MINIMIZED) { + if ((window->flags & SDL_WINDOW_MINIMIZED) != 0) { style |= WS_MINIMIZE; } } @@ -908,7 +908,7 @@ void WIN_SetWindowFullscreen(_THIS, SDL_Window *window, SDL_VideoDisplay *displa int x, y; int w, h; - if (!fullscreen && (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP)) != 0) { + if (!fullscreen && (window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { /* Resizing the window on hide causes problems restoring it in Wine, and it's unnecessary. * Also, Windows would preview the minimized window with the wrong size. */ diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp index e64c888d0..768eda633 100644 --- a/src/video/winrt/SDL_winrtvideo.cpp +++ b/src/video/winrt/SDL_winrtvideo.cpp @@ -492,7 +492,7 @@ void WINRT_VideoQuit(_THIS) WINRT_QuitMouse(_this); } -static const Uint32 WINRT_DetectableFlags = SDL_WINDOW_MAXIMIZED | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_HIDDEN | SDL_WINDOW_MOUSE_FOCUS; +static const Uint32 WINRT_DetectableFlags = SDL_WINDOW_MAXIMIZED | SDL_WINDOW_FULLSCREEN_MASK | SDL_WINDOW_HIDDEN | SDL_WINDOW_MOUSE_FOCUS; extern "C" Uint32 WINRT_DetectWindowFlags(SDL_Window *window) @@ -568,7 +568,7 @@ void WINRT_UpdateWindowFlags(SDL_Window *window, Uint32 mask) mask &= WINRT_DetectableFlags; if (window) { Uint32 apply = WINRT_DetectWindowFlags(window); - if ((apply & mask) & SDL_WINDOW_FULLSCREEN) { + if (((apply & mask) & SDL_WINDOW_FULLSCREEN_MASK) != 0) { window->last_fullscreen_flags = window->flags; // seems necessary to programmatically un-fullscreen, via SDL APIs } window->flags = (window->flags & ~mask) | (apply & mask); @@ -716,9 +716,8 @@ int WINRT_CreateWindow(_THIS, SDL_Window *window) mode apps, try this. */ bool didSetSize = false; - if (!(requestedFlags & SDL_WINDOW_FULLSCREEN)) { - const Windows::Foundation::Size size(WINRT_PHYSICAL_PIXELS_TO_DIPS(window->w), - WINRT_PHYSICAL_PIXELS_TO_DIPS(window->h)); + if ((requestedFlags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { + const Windows::Foundation::Size size(window->w, window->h); didSetSize = data->appView->TryResizeView(size); } if (!didSetSize) { @@ -755,8 +754,7 @@ void WINRT_SetWindowSize(_THIS, SDL_Window *window) { #if NTDDI_VERSION >= NTDDI_WIN10 SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - const Windows::Foundation::Size size(WINRT_PHYSICAL_PIXELS_TO_DIPS(window->w), - WINRT_PHYSICAL_PIXELS_TO_DIPS(window->h)); + const Windows::Foundation::Size size(window->w, window->h); data->appView->TryResizeView(size); // TODO, WinRT: return failure (to caller?) from TryResizeView() #endif } diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 6d059c08b..32a5f8ee2 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -962,7 +962,7 @@ static void X11_DispatchEvent(_THIS, XEvent *xevent) /* In order for interaction with the window decorations and menu to work properly on Mutter, we need to ungrab the keyboard when the the mouse leaves. */ - if (!(data->window->flags & SDL_WINDOW_FULLSCREEN)) { + if ((data->window->flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { X11_SetWindowKeyboardGrab(_this, data->window, SDL_FALSE); } @@ -1464,16 +1464,16 @@ static void X11_DispatchEvent(_THIS, XEvent *xevent) const Uint32 flags = X11_GetNetWMState(_this, data->window, xevent->xproperty.window); const Uint32 changed = flags ^ data->window->flags; - if ((changed & SDL_WINDOW_HIDDEN) || (changed & SDL_WINDOW_FULLSCREEN)) { - if (flags & SDL_WINDOW_HIDDEN) { + if ((changed & (SDL_WINDOW_HIDDEN | SDL_WINDOW_FULLSCREEN_MASK)) != 0) { + if ((flags & SDL_WINDOW_HIDDEN) != 0) { X11_DispatchUnmapNotify(data); } else { X11_DispatchMapNotify(data); } } - if (changed & SDL_WINDOW_MAXIMIZED) { - if (flags & SDL_WINDOW_MAXIMIZED) { + if ((changed & SDL_WINDOW_MAXIMIZED) != 0) { + if ((flags & SDL_WINDOW_MAXIMIZED) != 0) { SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_MAXIMIZED, 0, 0); } else { SDL_SendWindowEvent(data->window, SDL_EVENT_WINDOW_RESTORED, 0, 0); diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index c06bdc430..7ff5368bd 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -133,26 +133,26 @@ void X11_SetNetWMState(_THIS, Window xwindow, Uint32 flags) If we did, this would indicate to the window manager that we don't actually want to be mapped during X11_XMapRaised(), which would be bad. * - if (flags & SDL_WINDOW_HIDDEN) { + if ((flags & SDL_WINDOW_HIDDEN) != 0) { atoms[count++] = _NET_WM_STATE_HIDDEN; } */ - if (flags & SDL_WINDOW_ALWAYS_ON_TOP) { + if ((flags & SDL_WINDOW_ALWAYS_ON_TOP) != 0) { atoms[count++] = _NET_WM_STATE_ABOVE; } - if (flags & SDL_WINDOW_SKIP_TASKBAR) { + if ((flags & SDL_WINDOW_SKIP_TASKBAR) != 0) { atoms[count++] = _NET_WM_STATE_SKIP_TASKBAR; atoms[count++] = _NET_WM_STATE_SKIP_PAGER; } - if (flags & SDL_WINDOW_INPUT_FOCUS) { + if ((flags & SDL_WINDOW_INPUT_FOCUS) != 0) { atoms[count++] = _NET_WM_STATE_FOCUSED; } - if (flags & SDL_WINDOW_MAXIMIZED) { + if ((flags & SDL_WINDOW_MAXIMIZED) != 0) { atoms[count++] = _NET_WM_STATE_MAXIMIZED_VERT; atoms[count++] = _NET_WM_STATE_MAXIMIZED_HORZ; } - if (flags & SDL_WINDOW_FULLSCREEN) { + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { atoms[count++] = _NET_WM_STATE_FULLSCREEN; } @@ -207,7 +207,13 @@ X11_GetNetWMState(_THIS, SDL_Window *window, Window xwindow) } if (fullscreen == 1) { - flags |= SDL_WINDOW_FULLSCREEN; + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { + /* Pick whatever state the window expects */ + flags |= (window->flags & SDL_WINDOW_FULLSCREEN_MASK); + } else { + /* Assume we're fullscreen desktop */ + flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; + } } if (maximized == 3) { @@ -1236,7 +1242,7 @@ static void X11_SetWindowMaximized(_THIS, SDL_Window *window, SDL_bool maximized } else { window->flags &= ~SDL_WINDOW_MAXIMIZED; - if ((window->flags & SDL_WINDOW_FULLSCREEN) != 0) { + if ((window->flags & SDL_WINDOW_FULLSCREEN_MASK) != 0) { /* Fullscreen windows are maximized on some window managers, and this is functional behavior, so don't remove that state now, we'll take care of it when we leave fullscreen mode. @@ -1417,9 +1423,11 @@ static void X11_SetWindowFullscreenViaWM(_THIS, SDL_Window *window, SDL_VideoDis flags = window->flags; if (fullscreen) { - flags |= SDL_WINDOW_FULLSCREEN; + if ((flags & SDL_WINDOW_FULLSCREEN_MASK) == 0) { + flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; + } } else { - flags &= ~SDL_WINDOW_FULLSCREEN; + flags &= ~SDL_WINDOW_FULLSCREEN_MASK; } X11_SetNetWMState(_this, data->xwindow, flags); } diff --git a/test/testautomation_video.c b/test/testautomation_video.c index 6ad3de1c3..8ad17dd86 100644 --- a/test/testautomation_video.c +++ b/test/testautomation_video.c @@ -253,7 +253,7 @@ int video_createWindowVariousFlags(void *arg) switch (fVariation) { default: case 0: - flags = SDL_WINDOW_FULLSCREEN; + flags = SDL_WINDOW_FULLSCREEN_EXCLUSIVE; /* Skip - blanks screen; comment out next line to run test */ continue; break; diff --git a/test/testwm.c b/test/testwm.c index 15dff183c..a0d8fcdaa 100644 --- a/test/testwm.c +++ b/test/testwm.c @@ -88,7 +88,7 @@ draw_modes_menu(SDL_Window *window, SDL_Renderer *renderer, SDL_FRect viewport) SDLTest_DrawString(renderer, x, y, text); y += lineHeight; - SDL_strlcpy(text, "Press Ctrl+Enter to toggle SDL_WINDOW_FULLSCREEN", sizeof text); + SDL_strlcpy(text, "Press Ctrl+Enter to toggle SDL_WINDOW_FULLSCREEN_EXCLUSIVE", sizeof text); SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDLTest_DrawString(renderer, x, y, text); y += lineHeight;