abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyEventHandler.java
diff options
context:
space:
mode:
authorJules Aguillon2022-06-05 17:26:34 +0200
committerJules Aguillon2022-06-05 17:46:22 +0200
commite10c587dc5286db64a6f55010637f0c3f9f62d59 (patch)
tree2c39dd330f1915e3c1f8bb353c5db13c3a6c3bd4 /srcs/juloo.keyboard2/KeyEventHandler.java
parentd03e96da3e99e1e0edb78367499c22f574079583 (diff)
downloadunexpected-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.java62
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;
}