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)