- // 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];