diff options
| author | juloo | 2015-08-02 21:32:11 +0200 |
|---|---|---|
| committer | juloo | 2015-08-02 21:32:11 +0200 |
| commit | 85eb9daa46f169375d553c8b6f8f75b7568c17f6 (patch) | |
| tree | ebeb919e307c427b313643b63b35d47a7e925721 /srcs/juloo.keyboard2/Keyboard2.java | |
| parent | 12a04ae2c77e09131339f4f9ca160e63e12b216e (diff) | |
| download | unexpected-keyboard-85eb9daa46f169375d553c8b6f8f75b7568c17f6.tar.gz unexpected-keyboard-85eb9daa46f169375d553c8b6f8f75b7568c17f6.zip | |
Send Ctrl/Alt(/Shift) to the application
Diffstat (limited to 'srcs/juloo.keyboard2/Keyboard2.java')
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2.java | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index 03f71bf..fd86ccc 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -29,25 +29,43 @@ public class Keyboard2 extends InputMethodService public void handleKeyUp(KeyValue key, int flags) { - int eventCode = key.getEventCode(); - if (getCurrentInputConnection() == null) - return ; // TODO wait a little before give up - switch (eventCode) + return ; + if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT)) != 0) + { + int metaState = 0; + KeyEvent event; + + if (key.getEventCode() == KeyValue.EVENT_NONE) + return ; + if ((flags & KeyValue.FLAG_CTRL) != 0) + metaState |= KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_CTRL_ON; + if ((flags & KeyValue.FLAG_ALT) != 0) + metaState |= KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_ON; + if ((flags & KeyValue.FLAG_SHIFT) != 0) + metaState |= KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON; + event = new KeyEvent(1, 1, KeyEvent.ACTION_DOWN, key.getEventCode(), 1, metaState); + getCurrentInputConnection().sendKeyEvent(event); + getCurrentInputConnection().sendKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP)); + } + else if (key.getEventCode() == KeyEvent.KEYCODE_DEL) { - case KeyValue.EVENT_NONE: - sendKeyChar(key.getChar((flags & KeyValue.FLAG_SHIFT) != 0)); - break ; - case KeyValue.EVENT_DELETE: - getCurrentInputConnection().deleteSurroundingText(0, 1); - break ; - case KeyValue.EVENT_BACKSPACE: getCurrentInputConnection().deleteSurroundingText(1, 0); - break ; - default: - getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, eventCode)); - getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, eventCode)); - break ; + } + else if (key.getEventCode() == KeyEvent.KEYCODE_FORWARD_DEL) + { + getCurrentInputConnection().deleteSurroundingText(0, 1); + } + else if (key.getChar(false) == KeyValue.CHAR_NONE && key.getEventCode() != KeyValue.EVENT_NONE) + { + KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, key.getEventCode()); + + getCurrentInputConnection().sendKeyEvent(event); + getCurrentInputConnection().sendKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP)); + } + else + { + sendKeyChar(key.getChar((flags & KeyValue.FLAG_SHIFT) != 0)); } } |
