From 6ebbec239d15f64d07d6e9cc90e6bbdd43046c78 Mon Sep 17 00:00:00 2001 From: Anshul Gangwar Date: Fri, 3 Jan 2014 17:03:36 +0530 Subject: [PATCH] CLOUDSTACK-5716: fixed can't type special character in console view --- .../adapter/AwtRdpKeyboardAdapter.java | 2 +- .../consoleproxy/ConsoleProxyRdpClient.java | 29 +++++++------------ .../consoleproxy/rdp/KeysymToKeycode.java | 27 +++++++++++++++-- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java b/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java index f2b19e1af49..2d1e8fca6c3 100755 --- a/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java +++ b/services/console-proxy-rdp/rdpconsole/src/main/java/rdpclient/adapter/AwtRdpKeyboardAdapter.java @@ -343,7 +343,7 @@ public class AwtRdpKeyboardAdapter extends BaseElement { default: System.err.println("Key is not mapped: " + event + "."); - return 57; // Space + return event.getKeyCode(); } } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java index 6b317ffc66a..d5a3fcd3639 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyRdpClient.java @@ -57,8 +57,6 @@ public class ConsoleProxyRdpClient extends ConsoleProxyClientBase { private Thread _worker; private volatile boolean _workerDone = false; - private int _lastModifierStates = 0; - private AwtMouseEventSource _mouseEventSource = null; private AwtKeyEventSource _keyEventSource = null; @@ -203,26 +201,19 @@ public class ConsoleProxyRdpClient extends ConsoleProxyClientBase { private int mapModifier(int modifiers) { int mod = 0; - if ((modifiers & SHIFT_KEY_MASK) != (_lastModifierStates & SHIFT_KEY_MASK)) { - if ((modifiers & SHIFT_KEY_MASK) != 0) - mod = mod | InputEvent.SHIFT_DOWN_MASK; - } - if ((modifiers & CTRL_KEY_MASK) != (_lastModifierStates & CTRL_KEY_MASK)) { - if ((modifiers & CTRL_KEY_MASK) != 0) - mod = mod | InputEvent.CTRL_DOWN_MASK; - } + if ((modifiers & SHIFT_KEY_MASK) != 0) + mod = mod | InputEvent.SHIFT_DOWN_MASK; - if ((modifiers & META_KEY_MASK) != (_lastModifierStates & META_KEY_MASK)) { - if ((modifiers & META_KEY_MASK) != 0) - mod = mod | InputEvent.META_DOWN_MASK; - } + if ((modifiers & CTRL_KEY_MASK) != 0) + mod = mod | InputEvent.CTRL_DOWN_MASK; + + if ((modifiers & META_KEY_MASK) != 0) + mod = mod | InputEvent.META_DOWN_MASK; + + if ((modifiers & ALT_KEY_MASK) != 0) + mod = mod | InputEvent.ALT_DOWN_MASK; - if ((modifiers & ALT_KEY_MASK) != (_lastModifierStates & ALT_KEY_MASK)) { - if ((modifiers & ALT_KEY_MASK) != 0) - mod = mod | InputEvent.ALT_DOWN_MASK; - } - _lastModifierStates = mod; return mod; } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java b/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java index 10282ad0af3..f13dfe6c419 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/rdp/KeysymToKeycode.java @@ -20,7 +20,7 @@ import java.awt.event.KeyEvent; public class KeysymToKeycode { - // this keymap is taken from http://openwonderland.googlecode.com/svn/trunk/modules/foundation/xremwin/src/classes/org/jdesktop/wonderland/modules/xremwin/client/KeycodeToKeysym.java + // some of this keymap is taken from http://openwonderland.googlecode.com/svn/trunk/modules/foundation/xremwin/src/classes/org/jdesktop/wonderland/modules/xremwin/client/KeycodeToKeysym.java private final static int[][] map = { /* XK_BackSpace */{0xFF08, KeyEvent.VK_BACK_SPACE}, /* XK_Tab */{0xFF09, KeyEvent.VK_TAB}, @@ -101,10 +101,33 @@ public class KeysymToKeycode { /* XK_x */{0x0078, KeyEvent.VK_X}, /* XK_y */{0x0079, KeyEvent.VK_Y}, /* XK_z */{0x007a, KeyEvent.VK_Z}, + {0x0060, KeyEvent.VK_BACK_QUOTE}, + {0x007e, KeyEvent.VK_BACK_QUOTE}, + {0x0021, KeyEvent.VK_1}, + {0x0040, KeyEvent.VK_2}, + {0x0023, KeyEvent.VK_3}, + {0x0024, KeyEvent.VK_4}, + {0x0025, KeyEvent.VK_5}, + {0x005e, KeyEvent.VK_6}, + {0x0026, KeyEvent.VK_7}, + {0x002A, KeyEvent.VK_8}, + {0x0028, KeyEvent.VK_9}, + {0x0029, KeyEvent.VK_0}, + {0x005f, KeyEvent.VK_MINUS}, + {0x002b, KeyEvent.VK_EQUALS}, + {0x007b, KeyEvent.VK_OPEN_BRACKET}, + {0x007d, KeyEvent.VK_CLOSE_BRACKET}, + {0x007c, KeyEvent.VK_BACK_SLASH}, + {0x003a, KeyEvent.VK_SEMICOLON}, + {0x0027, KeyEvent.VK_QUOTE}, + {0x0022, KeyEvent.VK_QUOTE}, + {0x003c, KeyEvent.VK_COMMA}, + {0x003e, KeyEvent.VK_PERIOD}, + {0x003f, KeyEvent.VK_SLASH}, }; public static int getKeycode(int keysym) { - for (int i = 0; i < (map.length - 1); i++) { + for (int i = 0; i < (map.length); i++) { if (map[i][0] == keysym) { return map[i][1]; }