From ba6d62dee2a1c0dae63eb758551b089a7cd9ffc1 Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sat, 19 Mar 2022 16:27:57 +0100 Subject: [PATCH] Add F11 and F12 These keys are shown only when Fn is activated, "placeholder" keys are placed in the layouts. --- res/xml/azerty.xml | 4 +-- res/xml/dvorak.xml | 4 +-- res/xml/local_bgph1.xml | 4 +-- res/xml/local_ru_jcuken.xml | 4 +-- res/xml/numeric.xml | 4 +-- res/xml/qwerty.xml | 2 +- res/xml/qwerty_es.xml | 2 +- res/xml/qwerty_lv.xml | 4 +-- res/xml/qwerty_pt.xml | 4 +-- res/xml/qwerty_sv_se.xml | 35 ++++++++++++----------- res/xml/qwertz.xml | 4 +-- srcs/juloo.keyboard2/KeyModifier.java | 40 +++++++++++++++++---------- srcs/juloo.keyboard2/KeyValue.java | 2 ++ 13 files changed, 63 insertions(+), 50 deletions(-) diff --git a/res/xml/azerty.xml b/res/xml/azerty.xml index 2369539..6e59882 100644 --- a/res/xml/azerty.xml +++ b/res/xml/azerty.xml @@ -9,8 +9,8 @@ - - + + diff --git a/res/xml/dvorak.xml b/res/xml/dvorak.xml index 6c12bd1..5fe2741 100644 --- a/res/xml/dvorak.xml +++ b/res/xml/dvorak.xml @@ -2,8 +2,8 @@ - - + + diff --git a/res/xml/local_bgph1.xml b/res/xml/local_bgph1.xml index 7b31586..00dfbe7 100644 --- a/res/xml/local_bgph1.xml +++ b/res/xml/local_bgph1.xml @@ -4,8 +4,8 @@ - - + + diff --git a/res/xml/local_ru_jcuken.xml b/res/xml/local_ru_jcuken.xml index 6e8535f..3869eb2 100644 --- a/res/xml/local_ru_jcuken.xml +++ b/res/xml/local_ru_jcuken.xml @@ -11,8 +11,8 @@ - - + + diff --git a/res/xml/numeric.xml b/res/xml/numeric.xml index b8161db..ec5b773 100644 --- a/res/xml/numeric.xml +++ b/res/xml/numeric.xml @@ -28,8 +28,8 @@ - - + + diff --git a/res/xml/qwerty.xml b/res/xml/qwerty.xml index ffd7ed7..70640c0 100644 --- a/res/xml/qwerty.xml +++ b/res/xml/qwerty.xml @@ -10,7 +10,7 @@ - + diff --git a/res/xml/qwerty_es.xml b/res/xml/qwerty_es.xml index 69642db..2db0cfb 100644 --- a/res/xml/qwerty_es.xml +++ b/res/xml/qwerty_es.xml @@ -10,7 +10,7 @@ - + diff --git a/res/xml/qwerty_lv.xml b/res/xml/qwerty_lv.xml index 665cd60..e828851 100644 --- a/res/xml/qwerty_lv.xml +++ b/res/xml/qwerty_lv.xml @@ -4,8 +4,8 @@ - - + + diff --git a/res/xml/qwerty_pt.xml b/res/xml/qwerty_pt.xml index 139cbde..3b02cec 100644 --- a/res/xml/qwerty_pt.xml +++ b/res/xml/qwerty_pt.xml @@ -4,8 +4,8 @@ - - + + diff --git a/res/xml/qwerty_sv_se.xml b/res/xml/qwerty_sv_se.xml index 26a8fe5..3ecea43 100644 --- a/res/xml/qwerty_sv_se.xml +++ b/res/xml/qwerty_sv_se.xml @@ -5,38 +5,37 @@ - + - - + + - - + + - + - - - - - - + + + + + + - - - - - + + + + - + diff --git a/res/xml/qwertz.xml b/res/xml/qwertz.xml index a0cb1ec..6c9597b 100644 --- a/res/xml/qwertz.xml +++ b/res/xml/qwertz.xml @@ -4,8 +4,8 @@ - - + + diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java index a44794e..713b4db 100644 --- a/srcs/juloo.keyboard2/KeyModifier.java +++ b/srcs/juloo.keyboard2/KeyModifier.java @@ -7,27 +7,29 @@ import java.util.HashMap; class KeyModifier { - /* Cache key is KeyValue's name */ + /** Cache key is KeyValue's name */ private static HashMap> _cache = new HashMap>(); - /* Modify a key according to modifiers. */ + /** Represents a removed key, because a cache entry can't be [null]. */ + private static final KeyValue removed_key = KeyValue.getKeyByName("removed"); + + /** Modify a key according to modifiers. */ public static KeyValue handleFlags(KeyValue k, int flags) { - if (k == null || flags == 0) // No modifier - return k; + if (k == null) + return null; SparseArray ks = cacheEntry(k); KeyValue r = ks.get(flags); - if (r != null) // Found in cache - return r; - r = k; - r = handleFn(r, flags); - if (r != null) + if (r == null) // Cold cache + { + r = k; + r = handleFn(r, flags); r = handleShift(r, flags); - if (r != null) r = handleAccents(r, flags); - ks.put(flags, r); - return r; + ks.put(flags, r); + } + return (r == removed_key) ? null : r; } private static KeyValue handleAccents(KeyValue k, int flags) @@ -185,7 +187,15 @@ class KeyModifier private static KeyValue handleFn(KeyValue k, int flags) { if ((flags & KeyValue.FLAG_FN) == 0) - return k; + { + switch (k.name) + { + // Remove some keys when Fn is *not* activated + case "f11_placeholder": + case "f12_placeholder": return removed_key; + default: return k; + } + } String name; switch (k.name) { @@ -199,6 +209,8 @@ class KeyModifier case "8": name = "f8"; break; case "9": name = "f9"; break; case "0": name = "f10"; break; + case "f11_placeholder": name = "f11"; break; + case "f12_placeholder": name = "f12"; break; case "up": name = "page_up"; break; case "down": name = "page_down"; break; case "left": name = "home"; break; @@ -213,7 +225,7 @@ class KeyModifier case "#": name = "£"; break; case "*": name = "°"; break; case "tab": name = "\\t"; break; - case "€": case "£": return null; // Avoid showing these twice + case "€": case "£": return removed_key; // Avoid showing these twice default: return k; } return KeyValue.getKeyByName(name); diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index 450f585..f290709 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -259,6 +259,8 @@ class KeyValue addEventKey("f8", "F8", KeyEvent.KEYCODE_F8); addEventKey("f9", "F9", KeyEvent.KEYCODE_F9); addEventKey("f10", "F10", KeyEvent.KEYCODE_F10); + addEventKey("f11", "F11", KeyEvent.KEYCODE_F11, FLAG_SMALLER_FONT); + addEventKey("f12", "F12", KeyEvent.KEYCODE_F12, FLAG_SMALLER_FONT); addEventKey("tab", "↹", KeyEvent.KEYCODE_TAB); addKey("\\t", "\\t", '\t', EVENT_NONE, 0); // Send the tab character