diff options
Diffstat (limited to 'srcs/juloo.keyboard2/Keyboard2.java')
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2.java | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java index d02b239..30ef5fc 100644 --- a/srcs/juloo.keyboard2/Keyboard2.java +++ b/srcs/juloo.keyboard2/Keyboard2.java @@ -32,41 +32,43 @@ public class Keyboard2 extends InputMethodService if (getCurrentInputConnection() == null) 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)); - } + handleMetaKeyUp(key, flags); else if (key.getEventCode() == KeyEvent.KEYCODE_DEL) - { - getCurrentInputConnection().deleteSurroundingText(1, 0); - } + handleDelKey(1, 0); else if (key.getEventCode() == KeyEvent.KEYCODE_FORWARD_DEL) - { - getCurrentInputConnection().deleteSurroundingText(0, 1); - } + handleDelKey(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)); - } + handleMetaKeyUp(key, flags); else if (key.getChar(false) != KeyValue.CHAR_NONE) - { sendKeyChar(key.getChar((flags & KeyValue.FLAG_SHIFT) != 0)); - } + } + + private void handleDelKey(int before, int after) + { + CharSequence selection = getCurrentInputConnection().getSelectedText(0); + + if (selection != null && selection.length() > 0) + getCurrentInputConnection().commitText("", 1); + else + getCurrentInputConnection().deleteSurroundingText(before, after); + } + + private void handleMetaKeyUp(KeyValue key, int flags) + { + 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)); } public static void log(String str) |
