From ad10112c296fbae87f6f38300cc4e9cba5ddb0e1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 8 Apr 2012 15:56:11 -0700 Subject: [PATCH] Implement touch-specific menu. --- src/main/webapp/client.xhtml | 13 ++++ .../webapp/images/menu-icons/tango/edit-paste.png | Bin 0 -> 5758 bytes .../images/menu-icons/tango/input-keyboard.png | Bin 0 -> 7761 bytes .../images/menu-icons/tango/system-log-out.png | Bin 0 -> 9901 bytes src/main/webapp/scripts/interface.js | 62 ++++++++++++-------- src/main/webapp/styles/client.css | 10 ++++ 6 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 src/main/webapp/images/menu-icons/tango/edit-paste.png create mode 100644 src/main/webapp/images/menu-icons/tango/input-keyboard.png create mode 100644 src/main/webapp/images/menu-icons/tango/system-log-out.png diff --git a/src/main/webapp/client.xhtml b/src/main/webapp/client.xhtml index 2ac8a7a..ce52831 100644 --- a/src/main/webapp/client.xhtml +++ b/src/main/webapp/client.xhtml @@ -84,6 +84,19 @@ + +
+
+ +
+ + + +
+ +
+
+ diff --git a/src/main/webapp/images/menu-icons/tango/edit-paste.png b/src/main/webapp/images/menu-icons/tango/edit-paste.png new file mode 100644 index 0000000000000000000000000000000000000000..28dc0fecf3c975f7a89bcbf8c5943781d402f3c3 GIT binary patch literal 5758 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/menu-icons/tango/input-keyboard.png b/src/main/webapp/images/menu-icons/tango/input-keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c28b9284dd1fec11ef88db5a144129ea15a4e6 GIT binary patch literal 7761 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 ADF6Tf literal 0 HcmV?d00001 diff --git a/src/main/webapp/scripts/interface.js b/src/main/webapp/scripts/interface.js index e7ad4c3..ee0f497 100644 --- a/src/main/webapp/scripts/interface.js +++ b/src/main/webapp/scripts/interface.js @@ -37,7 +37,11 @@ var GuacamoleUI = { "showKeyboard" : document.getElementById("showKeyboard"), "ctrlAltDelete": document.getElementById("ctrlAltDelete"), "reconnect" : document.getElementById("reconnect"), - "logout" : document.getElementById("logout") + "logout" : document.getElementById("logout"), + + "touchShowClipboard" : document.getElementById("touchShowClipboard"), + "touchShowKeyboard" : document.getElementById("touchShowKeyboard"), + "touchLogout" : document.getElementById("touchLogout") }, @@ -133,6 +137,14 @@ var GuacamoleUI = { GuacamoleUI.display.style.opacity = "0.1"; }; + GuacamoleUI.hideTouchMenu = function() { + GuacamoleUI.touchMenu.style.visibility = "hidden"; + }; + + GuacamoleUI.showTouchMenu = function() { + GuacamoleUI.touchMenu.style.visibility = "visible"; + }; + GuacamoleUI.shadeMenu = function() { if (!menu_shaded) { @@ -212,8 +224,10 @@ var GuacamoleUI = { }; - // Assume no native OSK by default - GuacamoleUI.oskMode = GuacamoleUI.OSK_MODE_GUAC; + GuacamoleUI.buttons.touchShowClipboard.onclick = function() { + // FIXME: Implement + alert("Not yet implemented... Sorry."); + }; // Show/Hide keyboard var keyboardResizeInterval = null; @@ -228,22 +242,9 @@ var GuacamoleUI = { window.onresize = null; window.clearInterval(keyboardResizeInterval); } - - // If not shown ... action depends on OSK mode. - else { - - // If we think the platform has a native OSK, use the event target to - // cause it to display. - if (GuacamoleUI.oskMode == GuacamoleUI.OSK_MODE_NATIVE) { - - // ...but use the Guac OSK if clicked again - GuacamoleUI.oskMode = GuacamoleUI.OSK_MODE_GUAC; - // Try to show native OSK by focusing eventTarget. - GuacamoleUI.eventTarget.focus(); - return; - - } + // Otherwise, show it + else { // Ensure event target is NOT focused if we are using the Guac OSK. GuacamoleUI.eventTarget.blur(); @@ -253,18 +254,30 @@ var GuacamoleUI = { // Automatically update size window.onresize = updateKeyboardSize; - keyboardResizeInterval = window.setInterval(updateKeyboardSize, GuacamoleUI.KEYBOARD_AUTO_RESIZE_INTERVAL); + keyboardResizeInterval = window.setInterval(updateKeyboardSize, + GuacamoleUI.KEYBOARD_AUTO_RESIZE_INTERVAL); updateKeyboardSize(); + } - }; + // Touch-specific keyboard show + GuacamoleUI.buttons.touchShowKeyboard.ontouchstart = + GuacamoleUI.buttons.touchShowKeyboard.onclick = + function(e) { + GuacamoleUI.eventTarget.focus(); + GuacamoleUI.hideTouchMenu(); + e.preventDefault(); + }; + // Logout - GuacamoleUI.buttons.logout.onclick = function() { - window.location.href = "logout"; - }; + GuacamoleUI.buttons.logout.onclick = + GuacamoleUI.buttons.touchLogout.onclick = + function() { + window.location.href = "logout"; + }; // Timeouts for detecting if users wants menu to open or close var detectMenuOpenTimeout = null; @@ -350,7 +363,7 @@ var GuacamoleUI = { // Assume native OSK if menu shown via long-press GuacamoleUI.oskMode = GuacamoleUI.OSK_MODE_NATIVE; - GuacamoleUI.showMenu(); + GuacamoleUI.showTouchMenu(); }, GuacamoleUI.LONG_PRESS_DETECT_TIMEOUT); @@ -367,6 +380,7 @@ var GuacamoleUI = { // Close menu if shown GuacamoleUI.shadeMenu(); + GuacamoleUI.hideTouchMenu(); // Record touch location if (e.touches.length == 1) { diff --git a/src/main/webapp/styles/client.css b/src/main/webapp/styles/client.css index 9765833..ebed759 100644 --- a/src/main/webapp/styles/client.css +++ b/src/main/webapp/styles/client.css @@ -255,4 +255,14 @@ textarea#eventTarget { opacity: 0; overflow: hidden; +} + +/* Touch-specific menu */ + +div#touchMenu { + display: inline-block; + background: black; + border: 1px solid silver; + padding: 1em; + opacity: 0.8; } \ No newline at end of file -- 1.7.10.4