}
+ var expect_keypress = true;
var keydown_code = null;
var deferred_keypress = null;
}
// When key pressed
- element.onkeydown = function(e) {
+ element.addEventListener("keydown", function(e) {
// Only intercept if handler set
if (!guac_keyboard.onkeydown) return;
else if (e.which) keynum = e.which;
// Ignore any unknown key events
- if (keynum == 0) {
+ if (keynum == 0 && !e.keyIdentifier) {
e.preventDefault();
return;
}
- var expect_keypress = true;
+ expect_keypress = true;
// Ctrl/Alt/Shift
if (keynum == 16) guac_keyboard.modifiers.shift = true;
handleKeyEvents();
}
- };
+ }, true);
// When key pressed
- element.onkeypress = function(e) {
+ element.addEventListener("keypress", function(e) {
// Only intercept if handler set
if (!guac_keyboard.onkeydown) return;
e.preventDefault();
+ // Do not handle if we weren't expecting this event (will have already
+ // been handled by keydown)
+ if (!expect_keypress) return;
+
var keynum;
if (window.event) keynum = window.event.keyCode;
else if (e.which) keynum = e.which;
// Handle event with all aggregated data
handleKeyEvents();
- };
+ }, true);
// When key released
- element.onkeyup = function(e) {
+ element.addEventListener("keyup", function(e) {
// Only intercept if handler set
if (!guac_keyboard.onkeyup) return;
// Send release event
sendKeyReleased(lastKeyDownChar);
- };
+ }, true);
// When focus is lost, clear modifiers.
- element.onblur = function() {
+ element.addEventListener("blur", function() {
guac_keyboard.modifiers.alt = false;
guac_keyboard.modifiers.ctrl = false;
guac_keyboard.modifiers.shift = false;
- };
+ }, true);
};