add left/right variants of alt, ctrl and meta

for picky apps, fixes GH-1579
This commit is contained in:
Helium314 2025-05-18 15:25:10 +02:00
parent 66c3dd7a81
commit 199f177c2d
3 changed files with 16 additions and 3 deletions

View file

@ -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()

View file

@ -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

View file

@ -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) {