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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 7a3dd50..499e400 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -55,6 +55,10 @@
#undef CreateWindow
#endif
+#ifdef __EMSCRIPTEN__
+#include <emscripten.h>
+#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