GUAC-788: When a modifier results in a keysym being pressed, release that same keysym when clearing the modifier, even if the key releasing the modifier is different.

This commit is contained in:
Michael Jumper
2014-07-21 00:56:44 -07:00
parent f03baec73b
commit 5c049b02b9

View File

@@ -42,6 +42,15 @@ Guacamole.OnScreenKeyboard = function(url) {
*/ */
var modifiers = 0; var modifiers = 0;
/**
* Map of currently-set modifiers to the keysym associated with their
* original press. When the modifier is cleared, this keysym must be
* released.
*
* @type Object.<String, Number>
*/
var modifier_keysyms = {};
var scaledElements = []; var scaledElements = [];
var modifier_masks = {}; var modifier_masks = {};
@@ -357,6 +366,7 @@ Guacamole.OnScreenKeyboard = function(url) {
if (modifiers & modifierMask) { if (modifiers & modifierMask) {
addClass(keyboard, modifierClass); addClass(keyboard, modifierClass);
modifier_keysyms[cap.modifier] = cap.keysym;
// Send key event // Send key event
if (on_screen_keyboard.onkeydown && cap.keysym) if (on_screen_keyboard.onkeydown && cap.keysym)
@@ -367,11 +377,14 @@ Guacamole.OnScreenKeyboard = function(url) {
// Deactivate if not pressed // Deactivate if not pressed
else { else {
var original_keysym = modifier_keysyms[cap.modifier];
removeClass(keyboard, modifierClass); removeClass(keyboard, modifierClass);
delete modifier_keysyms[cap.modifier];
// Send key event // Send key event
if (on_screen_keyboard.onkeyup && cap.keysym) if (on_screen_keyboard.onkeyup && original_keysym)
on_screen_keyboard.onkeyup(cap.keysym); on_screen_keyboard.onkeyup(original_keysym);
} }