SDL: SDL_CreateWindowAndRenderer() takes the window title as the first parameter

From 14f584a94bfd49cf1524db75bf3c419fdf9436cd Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 25 Apr 2024 19:37:19 -0700
Subject: [PATCH] SDL_CreateWindowAndRenderer() takes the window title as the
 first parameter

Fixes https://github.com/libsdl-org/SDL/issues/9626
---
 docs/README-migration.md      | 2 ++
 include/SDL3/SDL_render.h     | 3 ++-
 src/dynapi/SDL_dynapi_procs.h | 2 +-
 src/render/SDL_render.c       | 4 ++--
 test/testaudiocapture.c       | 2 +-
 test/testdialog.c             | 2 +-
 test/testspriteminimal.c      | 6 +-----
 7 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/docs/README-migration.md b/docs/README-migration.md
index b0b1f5c745106..7d45e93e7e3a2 100644
--- a/docs/README-migration.md
+++ b/docs/README-migration.md
@@ -1092,6 +1092,8 @@ which index is the "opengl" or whatnot driver, you can just pass that string dir
 here, now. Passing NULL is the same as passing -1 here in SDL2, to signify you want SDL
 to decide for you.
 
+SDL_CreateWindowAndRenderer() now takes the window title as the first parameter.
+
 Mouse and touch events are no longer filtered to change their coordinates, instead you
 can call SDL_ConvertEventToRenderCoordinates() to explicitly map event coordinates into
 the rendering viewport.
diff --git a/include/SDL3/SDL_render.h b/include/SDL3/SDL_render.h
index d5d8b853db2ec..95aa16c385c70 100644
--- a/include/SDL3/SDL_render.h
+++ b/include/SDL3/SDL_render.h
@@ -196,6 +196,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetRenderDriver(int index);
 /**
  * Create a window and default renderer.
  *
+ * \param title the title of the window, in UTF-8 encoding
  * \param width the width of the window
  * \param height the height of the window
  * \param window_flags the flags used to create the window (see
@@ -210,7 +211,7 @@ extern DECLSPEC const char *SDLCALL SDL_GetRenderDriver(int index);
  * \sa SDL_CreateRenderer
  * \sa SDL_CreateWindow
  */
-extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer(int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer);
+extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer);
 
 /**
  * Create a 2D rendering context for a window.
diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h
index bec117dd29d24..b319dddb1203f 100644
--- a/src/dynapi/SDL_dynapi_procs.h
+++ b/src/dynapi/SDL_dynapi_procs.h
@@ -151,7 +151,7 @@ SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTexture,(SDL_Renderer *a, SDL_PixelFormat
 SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureFromSurface,(SDL_Renderer *a, SDL_Surface *b),(a,b),return)
 SDL_DYNAPI_PROC(SDL_Texture*,SDL_CreateTextureWithProperties,(SDL_Renderer *a, SDL_PropertiesID b),(a,b),return)
 SDL_DYNAPI_PROC(SDL_Window*,SDL_CreateWindow,(const char *a, int b, int c, Uint32 d),(a,b,c,d),return)
-SDL_DYNAPI_PROC(int,SDL_CreateWindowAndRenderer,(int a, int b, Uint32 c, SDL_Window **d, SDL_Renderer **e),(a,b,c,d,e),return)
+SDL_DYNAPI_PROC(int,SDL_CreateWindowAndRenderer,(const char *a, int b, int c, Uint32 d, SDL_Window **e, SDL_Renderer **f),(a,b,c,d,e,f),return)
 SDL_DYNAPI_PROC(SDL_Window*,SDL_CreateWindowWithProperties,(SDL_PropertiesID a),(a),return)
 SDL_DYNAPI_PROC(SDL_bool,SDL_CursorVisible,(void),(),return)
 SDL_DYNAPI_PROC(SDL_bool,SDL_DXGIGetOutputInfo,(SDL_DisplayID a, int *b, int *c),(a,b,c),return)
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 3763eedec5f8c..b7d992f66738f 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -826,7 +826,7 @@ static int SDLCALL SDL_RendererEventWatch(void *userdata, SDL_Event *event)
     return 0;
 }
 
-int SDL_CreateWindowAndRenderer(int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer)
+int SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer)
 {
     SDL_bool hidden = (window_flags & SDL_WINDOW_HIDDEN) != 0;
 
@@ -840,7 +840,7 @@ int SDL_CreateWindowAndRenderer(int width, int height, SDL_WindowFlags window_fl
 
     // Hide the window so if the renderer recreates it, we don't get a visual flash on screen
     window_flags |= SDL_WINDOW_HIDDEN;
-    *window = SDL_CreateWindow(NULL, width, height, window_flags);
+    *window = SDL_CreateWindow(title, width, height, window_flags);
     if (!*window) {
         *renderer = NULL;
         return -1;
diff --git a/test/testaudiocapture.c b/test/testaudiocapture.c
index 82027019e9070..a1a88be2b6fc1 100644
--- a/test/testaudiocapture.c
+++ b/test/testaudiocapture.c
@@ -69,7 +69,7 @@ int SDL_AppInit(void **appstate, int argc, char **argv)
         return 1;
     }
 
-    if (SDL_CreateWindowAndRenderer(320, 240, 0, &window, &renderer) < 0) {
+    if (SDL_CreateWindowAndRenderer("testaudiocapture", 320, 240, 0, &window, &renderer) < 0) {
         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window and renderer: %s\n", SDL_GetError());
         return 1;
     }
diff --git a/test/testdialog.c b/test/testdialog.c
index 218db653aa8a6..333ebb503f61a 100644
--- a/test/testdialog.c
+++ b/test/testdialog.c
@@ -84,7 +84,7 @@ int main(int argc, char *argv[]) {
         SDL_Log("SDL_Init failed (%s)", SDL_GetError());
         return 1;
     }
-    if (SDL_CreateWindowAndRenderer(640, 480, 0, &w, &r) < 0) {
+    if (SDL_CreateWindowAndRenderer("testdialog", 640, 480, 0, &w, &r) < 0) {
         SDL_Log("Failed to create window and/or renderer: %s\n", SDL_GetError());
         SDL_Quit();
         return 1;
diff --git a/test/testspriteminimal.c b/test/testspriteminimal.c
index e1591a99bc47a..8849b8916abab 100644
--- a/test/testspriteminimal.c
+++ b/test/testspriteminimal.c
@@ -122,15 +122,11 @@ int main(int argc, char *argv[])
         goto quit;
     }
 
-    if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) {
+    if (SDL_CreateWindowAndRenderer("testspriteminimal", WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) {
         return_code = 2;
         goto quit;
     }
 
-    if (SDL_SetWindowTitle(window, argv[0]) < 0) {
-        SDL_Log("SDL_SetWindowTitle: %s", SDL_GetError());
-    }
-
     sprite = CreateTexture(renderer, icon_bmp, icon_bmp_len, &sprite_w, &sprite_h);
 
     if (!sprite) {