mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Rewrite the JS keyboard handling to cope with IE and Chrome.
Unlike Firefox, IE and Chrome don't generate keypress events at all if you suppress the default handling of keydowns. Therefore, we have to figure out everything from the keydown event, because if we unsuppress the default handling of any keydowns then we'll get annoyances like ^R going back to meaning reload-page rather than redo-move. [originally from svn r9810]
This commit is contained in:
25
emccpre.js
25
emccpre.js
@ -157,26 +157,21 @@ function initPuzzle() {
|
||||
}
|
||||
};
|
||||
|
||||
// Set up keyboard handlers. We expect ordinary keys (with a
|
||||
// charCode) to be handled by onkeypress, but function keys
|
||||
// (arrows etc) to be handled by onkeydown.
|
||||
//
|
||||
// We also call event.preventDefault() in both handlers. This
|
||||
// means that while the canvas itself has focus, _all_ keypresses
|
||||
// go only to the puzzle - so users of this puzzle collection in
|
||||
// other media can indulge their instinct to press ^R for redo,
|
||||
// for example, without accidentally reloading the page.
|
||||
key = Module.cwrap('key', 'void',
|
||||
['number', 'number', 'number', 'number']);
|
||||
// Set up keyboard handlers. We do all the actual keyboard
|
||||
// handling in onkeydown; but we also call event.preventDefault()
|
||||
// in both the keydown and keypress handlers. This means that
|
||||
// while the canvas itself has focus, _all_ keypresses go only to
|
||||
// the puzzle - so users of this puzzle collection in other media
|
||||
// can indulge their instinct to press ^R for redo, for example,
|
||||
// without accidentally reloading the page.
|
||||
key = Module.cwrap('key', 'void', ['number', 'number', 'string',
|
||||
'string', 'number', 'number']);
|
||||
onscreen_canvas.onkeydown = function(event) {
|
||||
key(event.keyCode, event.charCode,
|
||||
key(event.keyCode, event.charCode, event.key, event.char,
|
||||
event.shiftKey ? 1 : 0, event.ctrlKey ? 1 : 0);
|
||||
event.preventDefault();
|
||||
};
|
||||
onscreen_canvas.onkeypress = function(event) {
|
||||
if (event.charCode != 0)
|
||||
key(event.keyCode, event.charCode,
|
||||
event.shiftKey ? 1 : 0, event.ctrlKey ? 1 : 0);
|
||||
event.preventDefault();
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user