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.onmousedown =
key_element.ontouchstart = function() { key_element.ontouchstart = function() {
// Press key if not yet pressed
if (!key.pressed) {
key_element.classList.add("guac-keyboard-pressed"); key_element.classList.add("guac-keyboard-pressed");
// Get current cap based on modifier state // 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) if (on_screen_keyboard.onkeydown && cap.keysym)
on_screen_keyboard.onkeydown(cap.keysym); on_screen_keyboard.onkeydown(cap.keysym);
// Mark key as pressed
key.pressed = true;
}
}; };
key_element.onmouseup = key_element.onmouseup =
key_element.onmouseout = key_element.onmouseout =
key_element.ontouchend = function() { key_element.ontouchend = function() {
// Release key if currently pressed
if (key.pressed) {
// Get current cap based on modifier state // Get current cap based on modifier state
var cap = key.getCap(on_screen_keyboard.modifiers); var cap = key.getCap(on_screen_keyboard.modifiers);
key_element.classList.remove("guac-keyboard-pressed"); key_element.classList.remove("guac-keyboard-pressed");
// Send key event
if (on_screen_keyboard.onkeyup && cap.keysym) if (on_screen_keyboard.onkeyup && cap.keysym)
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; var key = this;
/**
* Whether this key is currently pressed.
*/
this.pressed = false;
/** /**
* Width of the key, relative to the size of the keyboard. * Width of the key, relative to the size of the keyboard.
*/ */