abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/Keyboard2.java
diff options
context:
space:
mode:
authorjuloo2015-08-02 21:32:11 +0200
committerjuloo2015-08-02 21:32:11 +0200
commit85eb9daa46f169375d553c8b6f8f75b7568c17f6 (patch)
treeebeb919e307c427b313643b63b35d47a7e925721 /srcs/juloo.keyboard2/Keyboard2.java
parent12a04ae2c77e09131339f4f9ca160e63e12b216e (diff)
downloadunexpected-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.java50
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));
}
}