Only release ctrl/alt in keypress handler if character is not a control character. Beware that this causes a regression in Firefox as it sends keypress for Alt+combinations and Ctrl+combinations even though they will not type anything.

This commit is contained in:
Michael Jumper
2012-05-14 13:44:17 -07:00
parent d3f5d003ea
commit b8ad66ab6e

View File

@@ -292,13 +292,22 @@ Guacamole.Keyboard = function(element) {
} }
function getKeySymFromCharCode(keyCode) { function isControlCharacter(codepoint) {
return codepoint <= 0x1F || (codepoint >= 0x7F && codepoint <= 0x9F);
}
if (keyCode >= 0x0000 && keyCode <= 0x00FF) function getKeySymFromCharCode(codepoint) {
return keyCode;
if (keyCode >= 0x0100 && keyCode <= 0x10FFFF) // Keysyms for control characters
return 0x01000000 | keyCode; if (isControlCharacter(codepoint)) return 0xFF00 | codepoint;
// Keysyms for ASCII chars
if (codepoint >= 0x0000 && codepoint <= 0x00FF)
return codepoint;
// Keysyms for Unicode
if (codepoint >= 0x0100 && codepoint <= 0x10FFFF)
return 0x01000000 | codepoint;
return null; return null;
@@ -399,8 +408,7 @@ Guacamole.Keyboard = function(element) {
var codepoint = parseInt(hex, 16); var codepoint = parseInt(hex, 16);
// If control character, not typable // If control character, not typable
if (codepoint <= 0x1F) return false; if (isControlCharacter(codepoint)) return false;
if (codepoint >= 0x7F && codepoint <= 0x9F) return false;
// Otherwise, typable // Otherwise, typable
return true; return true;
@@ -465,10 +473,12 @@ Guacamole.Keyboard = function(element) {
keypress_keysym = getKeySymFromCharCode(keynum); keypress_keysym = getKeySymFromCharCode(keynum);
// If event identified as a typable character (keypress involved) // If event identified as a typable character
// then release Ctrl and Alt (if pressed) // then release Ctrl and Alt (if pressed)
if (guac_keyboard.modifiers.ctrl) sendKeyReleased(0xFFE3); if (!isControlCharacter(keynum)) {
if (guac_keyboard.modifiers.alt) sendKeyReleased(0xFFE9); if (guac_keyboard.modifiers.ctrl) sendKeyReleased(0xFFE3);
if (guac_keyboard.modifiers.alt) sendKeyReleased(0xFFE9);
}
// Defer handling of event until after any other pending // Defer handling of event until after any other pending
// key events. // key events.