diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 7139427c..de1a1922 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -908,7 +908,12 @@ public class Game extends Activity implements SurfaceHolder.Callback, return false; } - conn.sendKeyboardInput(translated, KeyboardPacket.KEY_DOWN, getModifierState(event)); + byte modifiers = getModifierState(event); + if (KeyboardTranslator.needsShift(event.getKeyCode())) { + modifiers |= KeyboardPacket.MODIFIER_SHIFT; + conn.sendKeyboardInput((short) 0x8010, KeyboardPacket.KEY_DOWN, modifiers); + } + conn.sendKeyboardInput(translated, KeyboardPacket.KEY_DOWN, modifiers); } return true; @@ -959,7 +964,14 @@ public class Game extends Activity implements SurfaceHolder.Callback, return false; } - conn.sendKeyboardInput(translated, KeyboardPacket.KEY_UP, getModifierState(event)); + byte modifiers = getModifierState(event); + if (KeyboardTranslator.needsShift(event.getKeyCode())) { + modifiers |= KeyboardPacket.MODIFIER_SHIFT; + } + conn.sendKeyboardInput(translated, KeyboardPacket.KEY_UP, modifiers); + if (KeyboardTranslator.needsShift(event.getKeyCode())) { + conn.sendKeyboardInput((short) 0x8010, KeyboardPacket.KEY_UP, getModifierState(event)); + } } return true; diff --git a/app/src/main/java/com/limelight/binding/input/KeyboardTranslator.java b/app/src/main/java/com/limelight/binding/input/KeyboardTranslator.java index b5cf812b..00bea126 100644 --- a/app/src/main/java/com/limelight/binding/input/KeyboardTranslator.java +++ b/app/src/main/java/com/limelight/binding/input/KeyboardTranslator.java @@ -47,7 +47,21 @@ public class KeyboardTranslator { public static final int VK_BACK_QUOTE = 192; public static final int VK_QUOTE = 222; public static final int VK_PAUSE = 19; - + + public static boolean needsShift(int keycode) { + switch (keycode) + { + case KeyEvent.KEYCODE_AT: + case KeyEvent.KEYCODE_POUND: + case KeyEvent.KEYCODE_PLUS: + case KeyEvent.KEYCODE_STAR: + return true; + + default: + return false; + } + } + /** * Translates the given keycode and returns the GFE keycode * @param keycode the code to be translated @@ -116,7 +130,8 @@ public class KeyboardTranslator { case KeyEvent.KEYCODE_ENTER: translated = 0x0d; break; - + + case KeyEvent.KEYCODE_PLUS: case KeyEvent.KEYCODE_EQUALS: translated = 0xbb; break; @@ -257,7 +272,19 @@ public class KeyboardTranslator { case KeyEvent.KEYCODE_NUMPAD_DOT: translated = 0x6E; break; - + + case KeyEvent.KEYCODE_AT: + translated = 2 + VK_0; + break; + + case KeyEvent.KEYCODE_POUND: + translated = 3 + VK_0; + break; + + case KeyEvent.KEYCODE_STAR: + translated = 8 + VK_0; + break; + default: System.out.println("No key for "+keycode); return 0;