From 199f177c2d54e788cf4d1e10a10c5c34db8c8b97 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sun, 18 May 2025 15:25:10 +0200 Subject: [PATCH] add left/right variants of alt, ctrl and meta for picky apps, fixes GH-1579 --- .../keyboard/keyboard/KeyboardActionListenerImpl.kt | 6 ++++++ .../keyboard/internal/keyboard_parser/floris/KeyCode.kt | 8 +++++++- .../helium314/keyboard/latin/inputlogic/InputLogic.java | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt index b01d162aa..9df3a9682 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt @@ -32,9 +32,15 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp private fun adjustMetaState(code: Int, remove: Boolean) { val metaCode = when (code) { KeyCode.CTRL -> KeyEvent.META_CTRL_ON + KeyCode.CTRL_LEFT -> KeyEvent.META_CTRL_LEFT_ON + KeyCode.CTRL_RIGHT -> KeyEvent.META_CTRL_RIGHT_ON KeyCode.ALT -> KeyEvent.META_ALT_ON + KeyCode.ALT_LEFT -> KeyEvent.META_ALT_LEFT_ON + KeyCode.ALT_RIGHT -> KeyEvent.META_ALT_RIGHT_ON KeyCode.FN -> KeyEvent.META_FUNCTION_ON KeyCode.META -> KeyEvent.META_META_ON + KeyCode.META_LEFT -> KeyEvent.META_META_LEFT_ON + KeyCode.META_RIGHT -> KeyEvent.META_META_RIGHT_ON else -> return } metaState = if (remove) metaState and metaCode.inv() diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt index e47942501..73d69e3ac 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt @@ -168,6 +168,12 @@ object KeyCode { const val SELECT_LEFT = -10041 const val SELECT_RIGHT = -10042 const val TIMESTAMP = -10043 + const val CTRL_LEFT = -10044 + const val CTRL_RIGHT = -10045 + const val ALT_LEFT = -10046 + const val ALT_RIGHT = -10047 + const val META_LEFT = -10048 + const val META_RIGHT = -10049 /** to make sure a FlorisBoard code works when reading a JSON layout */ fun Int.checkAndConvertCode(): Int = if (this > 0) this else when (this) { @@ -184,7 +190,7 @@ object KeyCode { ACTION_NEXT, ACTION_PREVIOUS, NOT_SPECIFIED, CLIPBOARD_COPY_ALL, WORD_LEFT, WORD_RIGHT, PAGE_UP, PAGE_DOWN, META, TAB, ESCAPE, INSERT, SLEEP, MEDIA_PLAY, MEDIA_PAUSE, MEDIA_PLAY_PAUSE, MEDIA_NEXT, MEDIA_PREVIOUS, VOL_UP, VOL_DOWN, MUTE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, BACK, - TIMESTAMP + TIMESTAMP, CTRL_LEFT, CTRL_RIGHT, ALT_LEFT, ALT_RIGHT, META_LEFT, META_RIGHT -> this // conversion diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index 9deabf6d0..e2ef27e6a 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -815,8 +815,9 @@ public final class InputLogic { // We need to switch to the shortcut IME. This is handled by LatinIME since the // input logic has no business with IME switching. case KeyCode.CAPS_LOCK, KeyCode.SYMBOL_ALPHA, KeyCode.ALPHA, KeyCode.SYMBOL, KeyCode.NUMPAD, KeyCode.EMOJI, - KeyCode.TOGGLE_ONE_HANDED_MODE, KeyCode.SWITCH_ONE_HANDED_MODE, - KeyCode.CTRL, KeyCode.ALT, KeyCode.FN, KeyCode.META: + KeyCode.TOGGLE_ONE_HANDED_MODE, KeyCode.SWITCH_ONE_HANDED_MODE, KeyCode.FN, + KeyCode.CTRL, KeyCode.CTRL_LEFT, KeyCode.CTRL_RIGHT, KeyCode.ALT, KeyCode.ALT_LEFT, KeyCode.ALT_RIGHT, + KeyCode.META, KeyCode.META_LEFT, KeyCode.META_RIGHT: break; default: if (event.getMMetaState() != 0) {