diff options
Diffstat (limited to 'srcs/juloo.keyboard2')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyModifier.java | 15 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/KeyboardData.java | 11 |
2 files changed, 22 insertions, 4 deletions
diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index 8d5fbbb..0ea80ab 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -51,7 +51,7 @@ public final class KeyModifier { switch (mod) { - case CTRL: + case CTRL: return apply_ctrl(k); case ALT: case META: return turn_into_keyevent(k); case FN: return apply_fn(k); @@ -440,6 +440,19 @@ public final class KeyModifier } } + private static KeyValue apply_ctrl(KeyValue k) + { + if (_modmap != null) + { + KeyValue mapped = _modmap.ctrl.get(k); + // Do not return the modified character right away, first turn it into a + // key event. + if (mapped != null) + k = mapped; + } + return turn_into_keyevent(k); + } + private static KeyValue turn_into_keyevent(KeyValue k) { if (k.getKind() != KeyValue.Kind.Char) diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index bd9296e..fdcf512 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -563,18 +563,20 @@ public final class KeyboardData { public final Map<KeyValue, KeyValue> shift; public final Map<KeyValue, KeyValue> fn; + public final Map<KeyValue, KeyValue> ctrl; - public Modmap(Map<KeyValue, KeyValue> s, Map<KeyValue, KeyValue> f) + public Modmap(Map<KeyValue, KeyValue> s, Map<KeyValue, KeyValue> f, Map<KeyValue, KeyValue> c) { shift = s; fn = f; + ctrl = c; } public static Modmap parse(XmlPullParser parser) throws Exception { HashMap<KeyValue, KeyValue> shift = new HashMap<KeyValue, KeyValue>(); HashMap<KeyValue, KeyValue> fn = new HashMap<KeyValue, KeyValue>(); - + HashMap<KeyValue, KeyValue> ctrl = new HashMap<KeyValue, KeyValue>(); while (next_tag(parser)) { switch (parser.getName()) @@ -585,12 +587,15 @@ public final class KeyboardData case "fn": parse_mapping(parser, fn); break; + case "ctrl": + parse_mapping(parser, ctrl); + break; default: throw error(parser, "Expecting tag <shift> or <fn>, got <" + parser.getName() + ">"); } } - return new Modmap(shift, fn); + return new Modmap(shift, fn, ctrl); } private static void parse_mapping(XmlPullParser parser, Map<KeyValue, KeyValue> dst) throws Exception |
