Track pressed status of keys. Only release/press keys if not already in that status.

This commit is contained in:
Michael Jumper
2012-01-23 15:24:35 -08:00
parent 4aef4fe804
commit 692186f0c9

View File

@@ -269,47 +269,65 @@ Guacamole.OnScreenKeyboard = function(url) {
key_element.onmousedown =
key_element.ontouchstart = function() {
key_element.classList.add("guac-keyboard-pressed");
// Press key if not yet pressed
if (!key.pressed) {
// Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers);
key_element.classList.add("guac-keyboard-pressed");
// Update modifier state
if (cap.modifier) {
// Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers);
// Construct classname for modifier
var modifierClass = "guac-keyboard-modifier-" + cap.modifier;
var modifierFlag = getModifier(cap.modifier);
// Update modifier state
if (cap.modifier) {
// Toggle modifier state
on_screen_keyboard.modifiers ^= modifierFlag;
// Construct classname for modifier
var modifierClass = "guac-keyboard-modifier-" + cap.modifier;
var modifierFlag = getModifier(cap.modifier);
// Activate modifier if pressed
if (on_screen_keyboard.modifiers & modifierFlag)
keyboard.classList.add(modifierClass);
// Toggle modifier state
on_screen_keyboard.modifiers ^= modifierFlag;
// Deactivate if not pressed
else
keyboard.classList.remove(modifierClass);
// Activate modifier if pressed
if (on_screen_keyboard.modifiers & modifierFlag)
keyboard.classList.add(modifierClass);
// Deactivate if not pressed
else
keyboard.classList.remove(modifierClass);
}
// Send key event
if (on_screen_keyboard.onkeydown && cap.keysym)
on_screen_keyboard.onkeydown(cap.keysym);
// Mark key as pressed
key.pressed = true;
}
if (on_screen_keyboard.onkeydown && cap.keysym)
on_screen_keyboard.onkeydown(cap.keysym);
};
key_element.onmouseup =
key_element.onmouseout =
key_element.ontouchend = function() {
// Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers);
// Release key if currently pressed
if (key.pressed) {
key_element.classList.remove("guac-keyboard-pressed");
// Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers);
if (on_screen_keyboard.onkeyup && cap.keysym)
on_screen_keyboard.onkeyup(cap.keysym);
key_element.classList.remove("guac-keyboard-pressed");
// Send key event
if (on_screen_keyboard.onkeyup && cap.keysym)
on_screen_keyboard.onkeyup(cap.keysym);
// Mark key as released
key.pressed = false;
}
};
@@ -409,6 +427,11 @@ Guacamole.OnScreenKeyboard.Key = function() {
var key = this;
/**
* Whether this key is currently pressed.
*/
this.pressed = false;
/**
* Width of the key, relative to the size of the keyboard.
*/