Skip to content
Permalink
Browse files

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.
  • Loading branch information
icculus committed Sep 6, 2016
1 parent 45553ac commit da1e3d69389bdeae4e9a48847928da9486c5f053
Showing with 15 additions and 0 deletions.
  1. +15 −0 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

0 comments on commit da1e3d6

Please sign in to comment.