From d66f3af6788506557da2aa6ac5d18445dad488b2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 9 Mar 2012 16:38:17 -0800 Subject: [PATCH] For OSK modifiers, call keydown/keyup events only on press, calling keydown if modifier activated, and keyup if modifier deactivated. Do not call keyup on release if key is a modifier. --- src/main/resources/oskeyboard.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/resources/oskeyboard.js b/src/main/resources/oskeyboard.js index ba7ea72..dc5833a 100644 --- a/src/main/resources/oskeyboard.js +++ b/src/main/resources/oskeyboard.js @@ -324,17 +324,31 @@ Guacamole.OnScreenKeyboard = function(url) { on_screen_keyboard.modifiers ^= modifierFlag; // Activate modifier if pressed - if (on_screen_keyboard.modifiers & modifierFlag) + if (on_screen_keyboard.modifiers & modifierFlag) { + addClass(keyboard, modifierClass); + + // Send key event + if (on_screen_keyboard.onkeydown && cap.keysym) + on_screen_keyboard.onkeydown(cap.keysym); + + } // Deactivate if not pressed - else + else { + removeClass(keyboard, modifierClass); + + // Send key event + if (on_screen_keyboard.onkeyup && cap.keysym) + on_screen_keyboard.onkeyup(cap.keysym); + + } } - // Send key event - if (on_screen_keyboard.onkeydown && cap.keysym) + // If not modifier, send key event now + else if (on_screen_keyboard.onkeydown && cap.keysym) on_screen_keyboard.onkeydown(cap.keysym); // Mark key as pressed @@ -346,9 +360,6 @@ Guacamole.OnScreenKeyboard = function(url) { }; - key_element.addEventListener("mousedown", press, true); - key_element.addEventListener("touchstart", press, true); - function release(e) { // Release key if currently pressed @@ -359,8 +370,8 @@ Guacamole.OnScreenKeyboard = function(url) { removeClass(key_element, "guac-keyboard-pressed"); - // Send key event - if (on_screen_keyboard.onkeyup && cap.keysym) + // Send key event if not a modifier key + if (!cap.modifier && on_screen_keyboard.onkeyup && cap.keysym) on_screen_keyboard.onkeyup(cap.keysym); // Mark key as released @@ -372,6 +383,9 @@ Guacamole.OnScreenKeyboard = function(url) { }; + key_element.addEventListener("mousedown", press, true); + key_element.addEventListener("touchstart", press, true); + key_element.addEventListener("mouseup", release, true); key_element.addEventListener("mouseout", release, true); key_element.addEventListener("touchend", release, true); -- 1.7.10.4