--- a/src/browser/keyboard.js +++ b/src/browser/keyboard.js @@ -270,6 +270,9 @@ window.addEventListener("input", input_handler, false); }; this.init(); + + // Session-boundary hook for browser focus and pointer-lock changes. + this.release_all = blur_handler; this.simulate_press = function(code) { @@ -343,23 +346,32 @@ function keyup_handler(e) { - if(!e.altKey && keys_pressed[0x38]) - { - // trigger ALT keyup manually - some browsers don't - // see issue #165 - handle_code(0x38, false); - } + release_stale_modifiers(e); return handler(e, false); } function keydown_handler(e) { - if(!e.altKey && keys_pressed[0x38]) + release_stale_modifiers(e); + return handler(e, true); + } + + function release_stale_modifiers(e) + { + if(!e.shiftKey) { - // trigger ALT keyup manually - some browsers don't - // see issue #165 - handle_code(0x38, false); + if(keys_pressed[0x2A]) handle_code(0x2A, false); + if(keys_pressed[0x36]) handle_code(0x36, false); } - return handler(e, true); + if(!e.ctrlKey) + { + if(keys_pressed[0x1D]) handle_code(0x1D, false); + if(keys_pressed[0xE01D]) handle_code(0xE01D, false); + } + if(!e.altKey) + { + if(keys_pressed[0x38]) handle_code(0x38, false); + if(keys_pressed[0xE038]) handle_code(0xE038, false); + } } function blur_handler(e)