if (keydown_keysym)
e.preventDefault();
-
// Also try to get get keysym from keyIdentifier
if (e.keyIdentifier) {
// Only intercept if handler set
if (!guac_keyboard.onkeydown) return;
+ e.preventDefault();
+
var keynum;
if (window.event) keynum = window.event.keyCode;
else if (e.which) keynum = e.which;
if (window.event) keynum = window.event.keyCode;
else if (e.which) keynum = e.which;
- // Ctrl/Alt/Shift
- if (keynum == 16) guac_keyboard.modifiers.shift = false;
- else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
- else if (keynum == 18) guac_keyboard.modifiers.alt = false;
- else
- stopRepeat();
+ // Defer handling of keyup (otherwise, keyup may happen before
+ // deferred handling of keydown/keypress).
+ window.setTimeout(function() {
+
+ // Ctrl/Alt/Shift
+ if (keynum == 16) guac_keyboard.modifiers.shift = false;
+ else if (keynum == 17) guac_keyboard.modifiers.ctrl = false;
+ else if (keynum == 18) guac_keyboard.modifiers.alt = false;
+ else
+ stopRepeat();
+
+ // Get corresponding character
+ var lastKeyDownChar = keydownChar[keynum];
- // Get corresponding character
- var lastKeyDownChar = keydownChar[keynum];
+ // Clear character record
+ keydownChar[keynum] = null;
- // Clear character record
- keydownChar[keynum] = null;
+ // Send release event
+ sendKeyReleased(lastKeyDownChar);
- // Send release event
- sendKeyReleased(lastKeyDownChar);
+ }, 0);
};