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,6 +269,9 @@ Guacamole.OnScreenKeyboard = function(url) {
key_element.onmousedown =
key_element.ontouchstart = function() {
// Press key if not yet pressed
if (!key.pressed) {
key_element.classList.add("guac-keyboard-pressed");
// Get current cap based on modifier state
@@ -294,23 +297,38 @@ Guacamole.OnScreenKeyboard = function(url) {
}
// Send key event
if (on_screen_keyboard.onkeydown && cap.keysym)
on_screen_keyboard.onkeydown(cap.keysym);
// Mark key as pressed
key.pressed = true;
}
};
key_element.onmouseup =
key_element.onmouseout =
key_element.ontouchend = function() {
// Release key if currently pressed
if (key.pressed) {
// Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers);
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.
*/