As keydown/keypress are handled via deferred setTimeout(), so should keyup (otherwise, there's a race condition that keyup might happen before the deferred handling of keydown/keypress, and the key might be effectively stuck down or in a repeating state).

This commit is contained in:
Michael Jumper
2012-05-16 13:36:28 -07:00
parent aa7c38be32
commit a650a4a6ec

View File

@@ -511,21 +511,27 @@ Guacamole.Keyboard = function(element) {
if (window.event) keynum = window.event.keyCode; if (window.event) keynum = window.event.keyCode;
else if (e.which) keynum = e.which; else if (e.which) keynum = e.which;
// Ctrl/Alt/Shift // Defer handling of keyup (otherwise, keyup may happen before
if (keynum == 16) guac_keyboard.modifiers.shift = false; // deferred handling of keydown/keypress).
else if (keynum == 17) guac_keyboard.modifiers.ctrl = false; window.setTimeout(function() {
else if (keynum == 18) guac_keyboard.modifiers.alt = false;
else
stopRepeat();
// Get corresponding character // Ctrl/Alt/Shift
var lastKeyDownChar = keydownChar[keynum]; 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();
// Clear character record // Get corresponding character
keydownChar[keynum] = null; var lastKeyDownChar = keydownChar[keynum];
// Send release event // Clear character record
sendKeyReleased(lastKeyDownChar); keydownChar[keynum] = null;
// Send release event
sendKeyReleased(lastKeyDownChar);
}, 0);
}; };