aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-08-27 21:05:46 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-08-27 21:05:46 -0700
commit8e6d2679b53be218d4eebef39077388269dd41c9 (patch)
treed0f4c55e2ec850dda01f0f960e9de6d73ec5d711 /src
parent1b134c883a0708f25a90a31903be3a2006a27ed4 (diff)
parent263626010d4ef55f29ebb53d481df902eb160e6d (diff)
Merge pull request #1564 from inolen/sdl_fullscreen_fix
support SDL_WM_ToggleFullScreen when initiated by key input
Diffstat (limited to 'src')
-rw-r--r--src/library_sdl.js26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index 1fb75724..d6cb6d18 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -46,6 +46,9 @@ var LibrarySDL = {
keyboardState: null,
keyboardMap: {},
+ canRequestFullscreen: false,
+ isRequestingFullscreen: false,
+
textInput: false,
startTime: null,
@@ -467,6 +470,23 @@ var LibrarySDL = {
SDL.DOMButtons[event.button] = 0;
}
+ // We can only request fullscreen as the result of user input.
+ // Due to this limitation, we toggle a boolean on keydown which
+ // SDL_WM_ToggleFullScreen will check and subsequently set another
+ // flag indicating for us to request fullscreen on the following
+ // keyup. This isn't perfect, but it enables SDL_WM_ToggleFullScreen
+ // to work as the result of a keypress (which is an extremely
+ // common use case).
+ if (event.type === 'keydown') {
+ SDL.canRequestFullscreen = true;
+ } else if (event.type === 'keyup') {
+ if (SDL.isRequestingFullscreen) {
+ Module['requestFullScreen'](true, true);
+ SDL.isRequestingFullscreen = false;
+ }
+ SDL.canRequestFullscreen = false;
+ }
+
// SDL expects a unicode character to be passed to its keydown events.
// Unfortunately, the browser APIs only provide a charCode property on
// keypress events, so we must backfill in keydown events with their
@@ -1282,7 +1302,11 @@ var LibrarySDL = {
Module['canvas'].cancelFullScreen();
return 1;
} else {
- return 0;
+ if (!SDL.canRequestFullscreen) {
+ return 0;
+ }
+ SDL.isRequestingFullscreen = true;
+ return 1;
}
},