From b9c5edddef6081b5b68d4a780e7a0d87565552d8 Mon Sep 17 00:00:00 2001 From: Dave Lane <42013603+ReenigneArcher@users.noreply.github.com> Date: Tue, 1 Sep 2026 02:21:36 -0400 Subject: [PATCH] Fix missing shift modifier for plus key (#1582) --- app/src/main/java/com/limelight/Game.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 5d214508a..292369c1d 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -1293,6 +1293,18 @@ public class Game extends Activity implements SurfaceHolder.Callback, 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 class Game extends Activity implements SurfaceHolder.Callback, } 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); } } }