diff --git a/src/library_sdl.js b/src/library_sdl.js index 48e7bafaadaac..a0a0edb4c6c19 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -823,13 +823,16 @@ var LibrarySDL = { lookupKeyCodeForEvent(event) { var code = event.keyCode; - if (code >= 65 && code <= 90) { + if (code >= 65 && code <= 90) { // ASCII A-Z code += 32; // make lowercase for SDL } else { + // Look up DOM code in the keyCodes table with fallback for ASCII codes + // which can match between DOM codes and SDL keycodes (allows keyCodes + // to be smaller). + code = SDL.keyCodes[code] || (code < 128 ? code : 0); #if RUNTIME_DEBUG - if (!(event.keyCode in SDL.keyCodes)) dbg('unknown keyCode: ', event.keyCode); + if (!code) dbg('unmapped keyCode: ', event.keyCode); #endif - code = SDL.keyCodes[event.keyCode] || event.keyCode; // If this is one of the modifier keys (224 | 1<<10 - 227 | 1<<10), and the event specifies that it is // a right key, add 4 to get the right key SDL key code. if (event.location === 2 /*KeyboardEvent.DOM_KEY_LOCATION_RIGHT*/ && code >= (224 | 1<<10) && code <= (227 | 1<<10)) { @@ -854,6 +857,8 @@ var LibrarySDL = { case 'keyup': { var down = event.type === 'keydown'; var code = SDL.lookupKeyCodeForEvent(event); + // Ignore key events that we don't (yet) map to SDL keys + if (!code) return; #if !SAFE_HEAP // Assigning a boolean to HEAP8, that's alright but Closure would like to warn about it. // TODO(https://github.com/emscripten-core/emscripten/issues/16311): @@ -938,6 +943,8 @@ var LibrarySDL = { dbg(`received ${event.type} event: keyCode=${event.keyCode}, key=${event.key}, code=${event.code}`); #endif var key = SDL.lookupKeyCodeForEvent(event); + // Ignore key events that we don't (yet) map to SDL keys + if (!key) return false; var scan; if (key >= 1024) { scan = key - 1024; diff --git a/test/browser/test_sdl_key.c b/test/browser/test_sdl_key.c index 4f7dbfe898a1a..00cbb4493e465 100644 --- a/test/browser/test_sdl_key.c +++ b/test/browser/test_sdl_key.c @@ -72,8 +72,8 @@ int main(int argc, char **argv) { emscripten_set_main_loop(one, 0, 0); - EM_ASM({keydown(1250);keydown(38);keyup(38);keyup(1250);}); // alt, up - EM_ASM({keydown(1248);keydown(1249);keydown(40);keyup(40);keyup(1249);keyup(1248);}); // ctrl, shift, down + EM_ASM({keydown(18);keydown(38);keyup(38);keyup(18);}); // alt, up + EM_ASM({keydown(17);keydown(16);keydown(40);keyup(40);keyup(16);keyup(17);}); // ctrl, shift, down EM_ASM({keydown(37);keyup(37);}); // left EM_ASM({keydown(39);keyup(39);}); // right diff --git a/test/test_browser.py b/test/test_browser.py index 4bc9e57e8f3e2..0b568a6ac352c 100644 --- a/test/test_browser.py +++ b/test/test_browser.py @@ -990,8 +990,8 @@ def post(): html = html.replace('', '''