SDL: Remove SDL_WINDOW_SHOW flag, as redundant with SDL_WINDOW_HIDDEN

From aa46ff8f4ba0126d501c2b3e05fce15fec54e8c1 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Wed, 28 Dec 2022 20:17:55 +0100
Subject: [PATCH] Remove SDL_WINDOW_SHOW flag, as redundant with
 SDL_WINDOW_HIDDEN

---
 cmake/test/main_gui.c                 |  2 +-
 docs/README-visualc.md                |  2 +-
 include/SDL3/SDL_video.h              | 13 +++++--------
 src/events/SDL_windowevents.c         |  6 ++----
 src/test/SDL_test_common.c            | 10 +---------
 src/video/SDL_shape.c                 |  2 +-
 src/video/SDL_sysvideo.h              |  2 +-
 src/video/SDL_video.c                 |  6 +++---
 src/video/android/SDL_androidwindow.c |  1 -
 src/video/cocoa/SDL_cocoawindow.m     |  6 +++---
 src/video/windows/SDL_windowswindow.c |  4 ++--
 src/video/winrt/SDL_winrtvideo.cpp    |  6 +++---
 src/video/x11/SDL_x11window.c         |  4 ++--
 test/testautomation_video.c           | 12 ++++++------
 14 files changed, 31 insertions(+), 45 deletions(-)

diff --git a/cmake/test/main_gui.c b/cmake/test/main_gui.c
index a1aa410d37c1..2e1aa0f1500e 100644
--- a/cmake/test/main_gui.c
+++ b/cmake/test/main_gui.c
@@ -13,7 +13,7 @@ int main(int argc, char *argv[]) {
             "Hello SDL",
             SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
             640, 480,
-            SDL_WINDOW_SHOWN
+            0
     );
     if (window == NULL) {
         fprintf(stderr, "could not create window: %s\n", SDL_GetError());
diff --git a/docs/README-visualc.md b/docs/README-visualc.md
index 44e74d79dade..43f426f421f3 100644
--- a/docs/README-visualc.md
+++ b/docs/README-visualc.md
@@ -87,7 +87,7 @@ Here's a sample SDL snippet to verify everything is setup in your IDE:
         SDL_Renderer* renderer = NULL;
 
         SDL_Init(SDL_INIT_VIDEO);
-        window = SDL_CreateWindow("Hello SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN);
+        window = SDL_CreateWindow("Hello SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, 0);
         renderer = SDL_CreateRenderer(window, NULL, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  
         SDL_DestroyRenderer(renderer);
diff --git a/include/SDL3/SDL_video.h b/include/SDL3/SDL_video.h
index 387ca7db21be..8fdd06d31965 100644
--- a/include/SDL3/SDL_video.h
+++ b/include/SDL3/SDL_video.h
@@ -103,7 +103,6 @@ typedef enum
 {
     SDL_WINDOW_FULLSCREEN = 0x00000001,         /**< fullscreen window */
     SDL_WINDOW_OPENGL = 0x00000002,             /**< window usable with OpenGL context */
-    SDL_WINDOW_SHOWN = 0x00000004,              /**< window is visible */
     SDL_WINDOW_HIDDEN = 0x00000008,             /**< window is not visible */
     SDL_WINDOW_BORDERLESS = 0x00000010,         /**< no window decoration */
     SDL_WINDOW_RESIZABLE = 0x00000020,          /**< window can be resized */
@@ -379,10 +378,10 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rec
  * **WARNING**: This reports the DPI that the hardware reports, and it is not
  * always reliable! It is almost always better to use SDL_GetWindowSize() to
  * find the window size, which might be in logical points instead of pixels,
- * and then SDL_GetWindowSizeInPixels(), SDL_GL_GetDrawableSize(), 
- * SDL_Vulkan_GetDrawableSize(), SDL_Metal_GetDrawableSize(), or 
+ * and then SDL_GetWindowSizeInPixels(), SDL_GL_GetDrawableSize(),
+ * SDL_Vulkan_GetDrawableSize(), SDL_Metal_GetDrawableSize(), or
  * SDL_GetRendererOutputSize(), and compare the two values to get an actual
- * scaling value between the two. We will be rethinking how high-dpi details 
+ * scaling value between the two. We will be rethinking how high-dpi details
  * should be managed in SDL3 to make things more consistent, reliable, and clear.
  *
  * \param displayIndex the index of the display from which DPI information
@@ -656,9 +655,7 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
  * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if
  *   supported (>= SDL 2.0.1)
  *
- * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is
- * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be
- * queried later using SDL_GetWindowFlags().
+ * The SDL_Window is implicitly shown if SDL_WINDOW_HIDDEN is not set.
  *
  * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist
  * property to YES, otherwise you will not receive a High-DPI OpenGL canvas.
@@ -923,7 +920,7 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
  * The window size in screen coordinates may differ from the size in pixels,
  * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform
  * with high-dpi support (e.g. iOS or macOS). Use SDL_GetWindowSizeInPixels(),
- * SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(), or 
+ * SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(), or
  * SDL_GetRendererOutputSize() to get the real client area size in pixels.
  *
  * \param window the window to query the width and height from
diff --git a/src/events/SDL_windowevents.c b/src/events/SDL_windowevents.c
index 524caa97f42a..f3e417ed19ba 100644
--- a/src/events/SDL_windowevents.c
+++ b/src/events/SDL_windowevents.c
@@ -84,18 +84,16 @@ int SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent,
     }
     switch (windowevent) {
     case SDL_WINDOWEVENT_SHOWN:
-        if (window->flags & SDL_WINDOW_SHOWN) {
+        if (!(window->flags & SDL_WINDOW_HIDDEN)) {
             return 0;
         }
         window->flags &= ~(SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED);
-        window->flags |= SDL_WINDOW_SHOWN;
         SDL_OnWindowShown(window);
         break;
     case SDL_WINDOWEVENT_HIDDEN:
-        if (!(window->flags & SDL_WINDOW_SHOWN)) {
+        if (window->flags & SDL_WINDOW_HIDDEN) {
             return 0;
         }
-        window->flags &= ~SDL_WINDOW_SHOWN;
         window->flags |= SDL_WINDOW_HIDDEN;
         SDL_OnWindowHidden(window);
         break;
diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c
index 64ccb4b23b02..f91fe2355c6f 100644
--- a/src/test/SDL_test_common.c
+++ b/src/test/SDL_test_common.c
@@ -32,7 +32,7 @@ static const char *video_usage[] = {
     "[--min-geometry WxH]", "[--max-geometry WxH]", "[--logical WxH]",
     "[--scale N]", "[--depth N]", "[--refresh R]", "[--vsync]", "[--noframe]",
     "[--resizable]", "[--minimize]", "[--maximize]", "[--grab]", "[--keyboard-grab]",
-    "[--shown]", "[--hidden]", "[--input-focus]", "[--mouse-focus]",
+    "[--hidden]", "[--input-focus]", "[--mouse-focus]",
     "[--flash-on-focus-loss]", "[--allow-highdpi]", "[--confine-cursor X,Y,W,H]",
     "[--usable-bounds]"
 };
@@ -453,10 +453,6 @@ int SDLTest_CommonArg(SDLTest_CommonState *state, int index)
         state->window_flags |= SDL_WINDOW_MAXIMIZED;
         return 1;
     }
-    if (SDL_strcasecmp(argv[index], "--shown") == 0) {
-        state->window_flags |= SDL_WINDOW_SHOWN;
-        return 1;
-    }
     if (SDL_strcasecmp(argv[index], "--hidden") == 0) {
         state->window_flags |= SDL_WINDOW_HIDDEN;
         return 1;
@@ -690,9 +686,6 @@ static void SDLTest_PrintWindowFlag(char *text, size_t maxlen, Uint32 flag)
     case SDL_WINDOW_OPENGL:
         SDL_snprintfcat(text, maxlen, "OPENGL");
         break;
-    case SDL_WINDOW_SHOWN:
-        SDL_snprintfcat(text, maxlen, "SHOWN");
-        break;
     case SDL_WINDOW_HIDDEN:
         SDL_snprintfcat(text, maxlen, "HIDDEN");
         break;
@@ -764,7 +757,6 @@ static void SDLTest_PrintWindowFlags(char *text, size_t maxlen, Uint32 flags)
     const Uint32 window_flags[] = {
         SDL_WINDOW_FULLSCREEN,
         SDL_WINDOW_OPENGL,
-        SDL_WINDOW_SHOWN,
         SDL_WINDOW_HIDDEN,
         SDL_WINDOW_BORDERLESS,
         SDL_WINDOW_RESIZABLE,
diff --git a/src/video/SDL_shape.c b/src/video/SDL_shape.c
index 7d8aabdef8e9..03db0125f74d 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) /* & (~SDL_WINDOW_SHOWN) */);
+    result = SDL_CreateWindow(title, -1000, -1000, w, h, (flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~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 469cddaa2e23..dc96350f404f 100644
--- a/src/video/SDL_sysvideo.h
+++ b/src/video/SDL_sysvideo.h
@@ -110,7 +110,7 @@ struct SDL_Window
 };
 #define FULLSCREEN_VISIBLE(W)                \
     (((W)->flags & SDL_WINDOW_FULLSCREEN) && \
-     ((W)->flags & SDL_WINDOW_SHOWN) &&      \
+     !((W)->flags & SDL_WINDOW_HIDDEN) &&      \
      !((W)->flags & SDL_WINDOW_MINIMIZED))
 
 /*
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 4d8be6123fb8..5f046c72c8ad 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -2453,7 +2453,7 @@ void SDL_ShowWindow(SDL_Window *window)
 {
     CHECK_WINDOW_MAGIC(window, );
 
-    if (window->flags & SDL_WINDOW_SHOWN) {
+    if (!(window->flags & SDL_WINDOW_HIDDEN)) {
         return;
     }
 
@@ -2467,7 +2467,7 @@ void SDL_HideWindow(SDL_Window *window)
 {
     CHECK_WINDOW_MAGIC(window, );
 
-    if (!(window->flags & SDL_WINDOW_SHOWN)) {
+    if (window->flags & SDL_WINDOW_HIDDEN) {
         return;
     }
 
@@ -2485,7 +2485,7 @@ void SDL_RaiseWindow(SDL_Window *window)
 {
     CHECK_WINDOW_MAGIC(window, );
 
-    if (!(window->flags & SDL_WINDOW_SHOWN)) {
+    if (window->flags & SDL_WINDOW_HIDDEN) {
         return;
     }
     if (_this->RaiseWindow) {
diff --git a/src/video/android/SDL_androidwindow.c b/src/video/android/SDL_androidwindow.c
index 1697a378c730..0798c22c459a 100644
--- a/src/video/android/SDL_androidwindow.c
+++ b/src/video/android/SDL_androidwindow.c
@@ -59,7 +59,6 @@ int Android_CreateWindow(_THIS, SDL_Window *window)
     window->h = Android_SurfaceHeight;
 
     window->flags &= ~SDL_WINDOW_HIDDEN;
-    window->flags |= SDL_WINDOW_SHOWN; /* only one window on Android */
 
     /* One window, it always has focus */
     SDL_SetMouseFocus(window);
diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m
index f10dc468ace7..bb2b0cad0f59 100644
--- a/src/video/cocoa/SDL_cocoawindow.m
+++ b/src/video/cocoa/SDL_cocoawindow.m
@@ -1082,7 +1082,7 @@ when returning to windowed mode from a space (instead of using a pending
         [self windowDidResize:aNotification];
 
         /* FIXME: Why does the window get hidden? */
-        if (window->flags & SDL_WINDOW_SHOWN) {
+        if (!(window->flags & SDL_WINDOW_HIDDEN)) {
             Cocoa_ShowWindow(SDL_GetVideoDevice(), window);
         }
     }
@@ -1645,9 +1645,9 @@ static int SetupWindowData(_THIS, SDL_Window *window, NSWindow *nswindow, NSView
         [data.listener listen:data];
 
         if ([nswindow isVisible]) {
-            window->flags |= SDL_WINDOW_SHOWN;
+            window->flags &= ~SDL_WINDOW_HIDDEN;
         } else {
-            window->flags &= ~SDL_WINDOW_SHOWN;
+            window->flags |= SDL_WINDOW_HIDDEN;
         }
 
         {
diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
index 47455c5a6039..57bd0534da46 100644
--- a/src/video/windows/SDL_windowswindow.c
+++ b/src/video/windows/SDL_windowswindow.c
@@ -378,9 +378,9 @@ static int SetupWindowData(_THIS, SDL_Window *window, HWND hwnd, HWND parent, SD
     {
         DWORD style = GetWindowLong(hwnd, GWL_STYLE);
         if (style & WS_VISIBLE) {
-            window->flags |= SDL_WINDOW_SHOWN;
+            window->flags &= ~SDL_WINDOW_HIDDEN;
         } else {
-            window->flags &= ~SDL_WINDOW_SHOWN;
+            window->flags |= SDL_WINDOW_HIDDEN;
         }
         if (style & WS_POPUP) {
             window->flags |= SDL_WINDOW_BORDERLESS;
diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp
index 16aede756599..5f345c58a358 100644
--- a/src/video/winrt/SDL_winrtvideo.cpp
+++ b/src/video/winrt/SDL_winrtvideo.cpp
@@ -489,7 +489,7 @@ void WINRT_VideoQuit(_THIS)
     WINRT_QuitMouse(_this);
 }
 
-static const Uint32 WINRT_DetectableFlags = SDL_WINDOW_MAXIMIZED | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_SHOWN | SDL_WINDOW_HIDDEN | SDL_WINDOW_MOUSE_FOCUS;
+static const Uint32 WINRT_DetectableFlags = SDL_WINDOW_MAXIMIZED | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_HIDDEN | SDL_WINDOW_MOUSE_FOCUS;
 
 extern "C" Uint32
 WINRT_DetectWindowFlags(SDL_Window *window)
@@ -541,7 +541,7 @@ WINRT_DetectWindowFlags(SDL_Window *window)
         }
 
         if (data->coreWindow->Visible) {
-            latestFlags |= SDL_WINDOW_SHOWN;
+            latestFlags &= ~SDL_WINDOW_HIDDEN;
         } else {
             latestFlags |= SDL_WINDOW_HIDDEN;
         }
@@ -693,7 +693,7 @@ int WINRT_CreateWindow(_THIS, SDL_Window *window)
         /* TODO, WinRT: set SDL_Window size, maybe position too, from XAML control */
         window->x = 0;
         window->y = 0;
-        window->flags |= SDL_WINDOW_SHOWN;
+        window->flags &= ~SDL_WINDOW_HIDDEN;
         SDL_SetMouseFocus(NULL);    // TODO: detect this
         SDL_SetKeyboardFocus(NULL); // TODO: detect this
     } else {
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index fea82d479b36..dc1dbb82a91c 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -306,9 +306,9 @@ static int SetupWindowData(_THIS, SDL_Window *window, Window w, BOOL created)
         window->w = attrib.width;
         window->h = attrib.height;
         if (attrib.map_state != IsUnmapped) {
-            window->flags |= SDL_WINDOW_SHOWN;
+            window->flags &= SDL_WINDOW_HIDDEN;
         } else {
-            window->flags &= ~SDL_WINDOW_SHOWN;
+            window->flags |= SDL_WINDOW_HIDDEN;
         }
         data->visual = attrib.visual;
         data->colormap = attrib.colormap;
diff --git a/test/testautomation_video.c b/test/testautomation_video.c
index 6b5ac14da3d7..e3cab4932c77 100644
--- a/test/testautomation_video.c
+++ b/test/testautomation_video.c
@@ -20,7 +20,7 @@ SDL_Window *_createVideoSuiteTestWindow(const char *title)
     y = SDLTest_RandomIntegerInRange(1, 100);
     w = SDLTest_RandomIntegerInRange(320, 1024);
     h = SDLTest_RandomIntegerInRange(320, 768);
-    flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS;
+    flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS;
 
     window = SDL_CreateWindow(title, x, y, w, h, flags);
     SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags);
@@ -164,7 +164,7 @@ int video_createWindowVariousPositions(void *arg)
 
             w = SDLTest_RandomIntegerInRange(32, 96);
             h = SDLTest_RandomIntegerInRange(32, 96);
-            window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN);
+            window = SDL_CreateWindow(title, x, y, w, h, 0);
             SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h);
             SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
 
@@ -220,7 +220,7 @@ int video_createWindowVariousSizes(void *arg)
                 break;
             }
 
-            window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN);
+            window = SDL_CreateWindow(title, x, y, w, h, 0);
             SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h);
             SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
 
@@ -266,7 +266,7 @@ int video_createWindowVariousFlags(void *arg)
             flags = SDL_WINDOW_OPENGL;
             break;
         case 3:
-            flags = SDL_WINDOW_SHOWN;
+            flags = 0;
             break;
         case 4:
             flags = SDL_WINDOW_HIDDEN;
@@ -322,7 +322,7 @@ int video_getWindowFlags(void *arg)
     Uint32 actualFlags;
 
     /* Reliable flag set always set in test window */
-    flags = SDL_WINDOW_SHOWN;
+    flags = 0;
 
     /* Call against new test window */
     window = _createVideoSuiteTestWindow(title);
@@ -1753,7 +1753,7 @@ int video_setWindowCenteredOnDisplay(void *arg)
             expectedX = (expectedDisplayRect.x + ((expectedDisplayRect.w - w) / 2));
             expectedY = (expectedDisplayRect.y + ((expectedDisplayRect.h - h) / 2));
 
-            window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
+            window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_ALLOW_HIGHDPI);
             SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h);
             SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");