SDL: emscripten: Override emscripten's fullscreen button with SDL's implementation.

https://github.com/libsdl-org/SDL/commit/4bddf521dd6e367e4fa8f5c32c8877ecd36bd302

From 4bddf521dd6e367e4fa8f5c32c8877ecd36bd302 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Mon, 13 Jan 2025 14:14:30 -0500
Subject: [PATCH] emscripten: Override emscripten's fullscreen button with
 SDL's implementation.

Fixes #6798.
Fixes #7913.
Fixes #9044.
---
 src/video/emscripten/SDL_emscriptenvideo.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c
index 833af7eb0d2aa..413d96fc6089a 100644
--- a/src/video/emscripten/SDL_emscriptenvideo.c
+++ b/src/video/emscripten/SDL_emscriptenvideo.c
@@ -273,6 +273,11 @@ static void Emscripten_PumpEvents(SDL_VideoDevice *_this)
     }
 }
 
+EMSCRIPTEN_KEEPALIVE void requestFullscreenThroughSDL(SDL_Window *window)
+{
+    SDL_SetWindowFullscreen(window, true);
+}
+
 static bool Emscripten_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesID props)
 {
     SDL_WindowData *wdata;
@@ -336,6 +341,13 @@ static bool Emscripten_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window,
 
     Emscripten_RegisterEventHandlers(wdata);
 
+    // disable the emscripten "fullscreen" button.
+    MAIN_THREAD_EM_ASM({
+        Module['requestFullscreen'] = function(lockPointer, resizeCanvas) {
+            _requestFullscreenThroughSDL($0);
+        };
+    }, window);
+
     // Window has been successfully created
     return true;
 }
@@ -387,6 +399,9 @@ static void Emscripten_DestroyWindow(SDL_VideoDevice *_this, SDL_Window *window)
         SDL_free(window->internal);
         window->internal = NULL;
     }
+
+    // just ignore clicks on the fullscreen button while there's no SDL window.
+    MAIN_THREAD_EM_ASM({ Module['requestFullscreen'] = function(lockPointer, resizeCanvas) {}; });
 }
 
 static SDL_FullscreenResult Emscripten_SetWindowFullscreen(SDL_VideoDevice *_this, SDL_Window *window, SDL_VideoDisplay *display, SDL_FullscreenOp fullscreen)