diff options
| author | Jules Aguillon | 2022-06-05 17:26:34 +0200 |
|---|---|---|
| committer | Jules Aguillon | 2022-06-05 17:46:22 +0200 |
| commit | e10c587dc5286db64a6f55010637f0c3f9f62d59 (patch) | |
| tree | 2c39dd330f1915e3c1f8bb353c5db13c3a6c3bd4 /srcs/juloo.keyboard2/KeyEventHandler.java | |
| parent | d03e96da3e99e1e0edb78367499c22f574079583 (diff) | |
| download | unexpected-keyboard-e10c587dc5286db64a6f55010637f0c3f9f62d59.tar.gz unexpected-keyboard-e10c587dc5286db64a6f55010637f0c3f9f62d59.zip | |
Refactor: Abstract KeyValue fields
The meaning of the public fields of KeyValue was quite complicated and
not handled consistently accross the app.
Make these fields private and add a more abstract API on top.
The meaning of these fields changed recently and it wasn't an easy
change. I plan on making more changes in the future.
Diffstat (limited to 'srcs/juloo.keyboard2/KeyEventHandler.java')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyEventHandler.java | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/srcs/juloo.keyboard2/KeyEventHandler.java b/srcs/juloo.keyboard2/KeyEventHandler.java index 691e40d..90f4a1a 100644 --- a/srcs/juloo.keyboard2/KeyEventHandler.java +++ b/srcs/juloo.keyboard2/KeyEventHandler.java @@ -13,25 +13,40 @@ class KeyEventHandler implements Config.IKeyEventHandler public void handleKeyUp(KeyValue key, Pointers.Modifiers mods) { - if (key == null || (key.flags & KeyValue.FLAG_MODIFIER) != 0) + if (key == null) return; - switch (key.code) + int event; + switch (key.getKind()) { - case KeyValue.EVENT_CONFIG: _recv.showKeyboardConfig(); return; - case KeyValue.EVENT_SWITCH_TEXT: _recv.switchMain(); return; - case KeyValue.EVENT_SWITCH_NUMERIC: _recv.switchNumeric(); return; - case KeyValue.EVENT_SWITCH_EMOJI: _recv.setPane_emoji(); return; - case KeyValue.EVENT_SWITCH_BACK_EMOJI: _recv.setPane_normal(); return; - case KeyValue.EVENT_CHANGE_METHOD: _recv.switchToNextInputMethod(); return; - case KeyValue.EVENT_ACTION: _recv.performAction(); return; - case KeyValue.EVENT_SWITCH_PROGRAMMING: _recv.switchProgramming(); return; - default: - if (shouldSendEvents(key, mods)) - handleKeyUpWithModifier(key, mods); - else if (key.char_ != KeyValue.CHAR_NONE) - _recv.commitChar(key.char_); - else - _recv.commitText(key.symbol); + case Char: + // Send an event if some modifiers are active. + event = key.getCharEvent(); + if (shouldSendEvents(mods) && event != KeyValue.EVENT_NONE) + handleKeyUpWithModifier(event, mods); + _recv.commitChar(key.getChar()); + break; + case String: + _recv.commitText(key.getString()); + break; + case Event: + event = key.getEvent(); + switch (event) + { + case KeyValue.EVENT_CONFIG: _recv.showKeyboardConfig(); break; + case KeyValue.EVENT_SWITCH_TEXT: _recv.switchMain(); break; + case KeyValue.EVENT_SWITCH_NUMERIC: _recv.switchNumeric(); break; + case KeyValue.EVENT_SWITCH_EMOJI: _recv.setPane_emoji(); break; + case KeyValue.EVENT_SWITCH_BACK_EMOJI: _recv.setPane_normal(); break; + case KeyValue.EVENT_CHANGE_METHOD: _recv.switchToNextInputMethod(); break; + case KeyValue.EVENT_ACTION: _recv.performAction(); break; + case KeyValue.EVENT_SWITCH_PROGRAMMING: _recv.switchProgramming(); break; + default: + handleKeyUpWithModifier(event, mods); + break; + } + break; + case Modifier: + break; } } @@ -74,21 +89,21 @@ class KeyEventHandler implements Config.IKeyEventHandler /* * Don't set KeyEvent.FLAG_SOFT_KEYBOARD. */ - private void handleKeyUpWithModifier(KeyValue key, Pointers.Modifiers mods) + private void handleKeyUpWithModifier(int keyCode, Pointers.Modifiers mods) { - if (key.code == KeyValue.EVENT_NONE) + if (keyCode == KeyValue.EVENT_NONE) return ; int metaState = 0; for (int i = 0; i < mods.size(); i++) metaState = sendMetaKeyForModifier(mods.get(i), metaState, true); - _recv.sendKeyEvent(KeyEvent.ACTION_DOWN, key.code, metaState); - _recv.sendKeyEvent(KeyEvent.ACTION_UP, key.code, metaState); + _recv.sendKeyEvent(KeyEvent.ACTION_DOWN, keyCode, metaState); + _recv.sendKeyEvent(KeyEvent.ACTION_UP, keyCode, metaState); for (int i = mods.size() - 1; i >= 0; i--) metaState = sendMetaKeyForModifier(mods.get(i), metaState, false); } /** Whether to send up and down events (true) or commit the text (false). */ - private boolean shouldSendEvents(KeyValue key, Pointers.Modifiers mods) + private boolean shouldSendEvents(Pointers.Modifiers mods) { // Check for modifiers for (int i = 0; i < mods.size(); i++) @@ -101,9 +116,6 @@ class KeyEventHandler implements Config.IKeyEventHandler default: break; } } - // Key has no char but has a key event - if (key.char_ == KeyValue.CHAR_NONE && key.code >= 0) - return true; return false; } |
