diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 5d214508a3..292369c1d6 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -1293,6 +1293,18 @@ private byte getModifierState(KeyEvent event) { if (event.isMetaPressed()) { modifier |= KeyboardPacket.MODIFIER_META; } + return applyKeySpecificModifiers(event.getKeyCode(), modifier); + } + + private byte getModifierState(int keyCode) { + return applyKeySpecificModifiers(keyCode, getModifierState()); + } + + private byte applyKeySpecificModifiers(int keyCode, byte modifier) { + if (keyCode == KeyEvent.KEYCODE_PLUS) { + // The host protocol has a single US =/+ virtual key, so Android's semantic plus key needs Shift. + modifier |= KeyboardPacket.MODIFIER_SHIFT; + } return modifier; } @@ -2612,10 +2624,10 @@ public void keyboardEvent(boolean buttonDown, short keyCode) { } if (buttonDown) { - conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_DOWN, getModifierState(), (byte)0); + conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_DOWN, getModifierState(keyCode), (byte)0); } else { - conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_UP, getModifierState(), (byte)0); + conn.sendKeyboardInput(keyMap, KeyboardPacket.KEY_UP, getModifierState(keyCode), (byte)0); } } }