No need for constant "GUAC" or reselection. Added oninput handler such that voice...
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Sat, 24 Mar 2012 06:18:41 +0000 (23:18 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Sat, 24 Mar 2012 06:18:41 +0000 (23:18 -0700)
src/main/webapp/client.xhtml
src/main/webapp/scripts/interface.js

index 9213907..2ac8a7a 100644 (file)
@@ -55,7 +55,7 @@
         </div>
 
         <!-- Keyboard event target for platforms with native OSKs -->
-        <textarea id="eventTarget">GUAC</textarea>
+        <textarea id="eventTarget"></textarea>
 
         <!-- Display -->
         <div id="display">
index be79b38..4fecbc7 100644 (file)
@@ -351,9 +351,7 @@ var GuacamoleUI = {
 
     // Reset event target (add content, reposition cursor in middle.
     GuacamoleUI.resetEventTarget = function() {
-        GuacamoleUI.eventTarget.value = "GUAC";
-        GuacamoleUI.eventTarget.selectionStart =
-        GuacamoleUI.eventTarget.selectionEnd   = 2;
+        GuacamoleUI.eventTarget.value = "";
     };
 
     // Detect long-press at bottom of screen
@@ -600,6 +598,41 @@ GuacamoleUI.attach = function(guac) {
         guac.disconnect();
     };
 
+    // If text is input directly into event target without typing (as with
+    // voice input, for example), type automatically.
+    GuacamoleUI.eventTarget.oninput = function(e) {
+
+        // Get input text
+        var text = GuacamoleUI.eventTarget.value;
+
+        // Send each character
+        for (var i=0; i<text.length; i++) {
+
+            // Get char code
+            var charCode = text.charCodeAt(i);
+
+            // Convert to keysym
+            var keysym = 0x003F; // Default to a question mark
+            if (charCode >= 0x0000 && charCode <= 0x00FF)
+                keysym = charCode;
+            else if (charCode >= 0x0100 && charCode <= 0x10FFFF)
+                keysym = 0x01000000 | charCode;
+
+            // Press and release key
+            guac.sendKeyEvent(1, keysym);
+            guac.sendKeyEvent(0, keysym);
+
+        }
+
+        // Reset target
+        GuacamoleUI.resetEventTarget();
+
+        // Stop event
+        e.preventDefault();
+        return false;
+
+    }
+
     // Handle clipboard events
     GuacamoleUI.clipboard.onchange = function() {