abouttreesummaryrefslogcommitdiff
path: root/srcs
diff options
context:
space:
mode:
Diffstat (limited to 'srcs')
-rw-r--r--srcs/juloo.keyboard2/KeyEventHandler.java51
-rw-r--r--srcs/juloo.keyboard2/Keyboard2.java6
2 files changed, 38 insertions, 19 deletions
diff --git a/srcs/juloo.keyboard2/KeyEventHandler.java b/srcs/juloo.keyboard2/KeyEventHandler.java
index dad6642..86cfc8c 100644
--- a/srcs/juloo.keyboard2/KeyEventHandler.java
+++ b/srcs/juloo.keyboard2/KeyEventHandler.java
@@ -25,11 +25,11 @@ class KeyEventHandler implements Config.IKeyEventHandler
case KeyValue.EVENT_ACTION: _recv.performAction(); return;
default:
if ((flags & (KeyValue.FLAG_CTRL | KeyValue.FLAG_ALT | KeyValue.FLAG_META)) != 0)
- handleMetaKeyUp(key, flags);
+ handleKeyUpWithModifier(key, flags);
else if (key.char_ != KeyValue.CHAR_NONE)
_recv.commitChar(key.char_);
else if (key.eventCode != KeyValue.EVENT_NONE)
- handleMetaKeyUp(key, flags);
+ handleKeyUpWithModifier(key, flags);
else
_recv.commitText(key.symbol);
}
@@ -45,22 +45,43 @@ class KeyEventHandler implements Config.IKeyEventHandler
// getCurrentInputConnection().deleteSurroundingText(before, after);
// }
- private void handleMetaKeyUp(KeyValue key, int flags)
+ private int sendMetaKey(int eventCode, int metaFlags, int metaState, boolean down)
{
- int meta = 0;
- if (key.eventCode == KeyValue.EVENT_NONE)
- return ;
- if ((flags & KeyValue.FLAG_CTRL) != 0)
- meta |= KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_CTRL_ON;
- if ((flags & KeyValue.FLAG_ALT) != 0)
- meta |= KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_ON;
- if ((flags & KeyValue.FLAG_SHIFT) != 0)
- meta |= KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON;
+ int action;
+ int updatedMetaState;
+ if (down) { action = KeyEvent.ACTION_DOWN; updatedMetaState = metaState | metaFlags; }
+ else { action = KeyEvent.ACTION_UP; updatedMetaState = metaState & ~metaFlags; }
+ _recv.sendKeyEvent(action, eventCode, metaState);
+ return updatedMetaState;
+ }
+
+ /* Send key events corresponding to pressed modifier keys. */
+ private int sendMetaKeys(int flags, int metaState, boolean down)
+ {
+ if ((flags & KeyValue.FLAG_CTRL) != 0)
+ metaState = sendMetaKey(KeyEvent.KEYCODE_CTRL_LEFT, KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_CTRL_ON, metaState, down);
+ if ((flags & KeyValue.FLAG_ALT) != 0)
+ metaState = sendMetaKey(KeyEvent.KEYCODE_ALT_LEFT, KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_ON, metaState, down);
+ if ((flags & KeyValue.FLAG_SHIFT) != 0)
+ metaState = sendMetaKey(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_ON, metaState, down);
if ((flags & KeyValue.FLAG_META) != 0)
- meta |= KeyEvent.META_META_LEFT_ON | KeyEvent.META_META_ON;
- _recv.sendKeyEvent(key.eventCode, meta);
+ metaState = sendMetaKey(KeyEvent.KEYCODE_META_LEFT, KeyEvent.META_META_LEFT_ON | KeyEvent.META_META_ON, metaState, down);
+ return metaState;
}
+ /*
+ * Don't set KeyEvent.FLAG_SOFT_KEYBOARD.
+ */
+ private void handleKeyUpWithModifier(KeyValue key, int flags)
+ {
+ if (key.eventCode == KeyValue.EVENT_NONE)
+ return ;
+ int metaState = sendMetaKeys(flags, 0, true);
+ _recv.sendKeyEvent(KeyEvent.ACTION_DOWN, key.eventCode, metaState);
+ _recv.sendKeyEvent(KeyEvent.ACTION_UP, key.eventCode, metaState);
+ sendMetaKeys(flags, metaState, false);
+ }
+
public static interface IReceiver
{
public void switchToNextInputMethod();
@@ -72,7 +93,7 @@ class KeyEventHandler implements Config.IKeyEventHandler
/** 'res_id' is '-1' for the currently selected layout. */
public void setLayout(int res_id);
- public void sendKeyEvent(int eventCode, int meta);
+ public void sendKeyEvent(int eventAction, int eventCode, int meta);
public void commitText(String text);
public void commitChar(char c);
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index 0ce3af8..44b36a1 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -256,14 +256,12 @@ public class Keyboard2 extends InputMethodService
_keyboardView.setKeyboard(getLayout(res_id));
}
- public void sendKeyEvent(int eventCode, int meta)
+ public void sendKeyEvent(int eventAction, int eventCode, int meta)
{
InputConnection conn = getCurrentInputConnection();
if (conn == null)
return;
- KeyEvent event = new KeyEvent(1, 1, KeyEvent.ACTION_DOWN, eventCode, 0, meta);
- conn.sendKeyEvent(event);
- conn.sendKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP));
+ conn.sendKeyEvent(new KeyEvent(1, 1, eventAction, eventCode, 0, meta));
}
public void showKeyboardConfig()