From 4bddf521dd6e367e4fa8f5c32c8877ecd36bd302 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" 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 833af7eb0d..413d96fc60 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)