From da1e3d69389bdeae4e9a48847928da9486c5f053 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 6 Sep 2016 13:13:03 -0400 Subject: [PATCH] emscripten: special case to make SDL_ShowSimpleMessageBox() work. Browsers don't have the functionality to fully support the generic SDL_ShowMessageBox(), but this handles the likely most-common case. Without this, you'd return immediately with a proper error result and no UI, but probably no one checks that for SDL_ShowSimpleMessageBox. And if they did: what would they do to handle this anyhow? We'd need to lobby for an HTML spec of some sort that allows customizable message boxes--that block!--to properly support SDL message boxes on Emscripten, but this is probably Good Enough for now. --- src/video/SDL_video.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 7a3dd507f..499e40038 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -55,6 +55,10 @@ #undef CreateWindow #endif +#ifdef __EMSCRIPTEN__ +#include +#endif + /* Available video drivers */ static VideoBootStrap *bootstrap[] = { #if SDL_VIDEO_DRIVER_COCOA @@ -3722,6 +3726,16 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window) { +#ifdef __EMSCRIPTEN__ + /* !!! FIXME: propose a browser API for this, get this #ifdef out of here? */ + /* Web browsers don't (currently) have an API for a custom message box + that can block, but for the most common case (SDL_ShowSimpleMessageBox), + we can use the standard Javascript alert() function. */ + EM_ASM_({ + alert(UTF8ToString($0) + "\n\n" + UTF8ToString($1)); + }, title, message); + return 0; +#else SDL_MessageBoxData data; SDL_MessageBoxButtonData button; @@ -3739,6 +3753,7 @@ SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, S button.text = "OK"; return SDL_ShowMessageBox(&data, NULL); +#endif } SDL_bool