diff options
author | Joshua Diamond <josh@windowoffire.com> | 2020-12-22 12:51:47 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-23 04:51:47 +1100 |
commit | f40b56468366212ffa23de5dd424f24e42bb88bb (patch) | |
tree | 3b712b43779dc12a3215b4db82d75a34ddddb876 /quantum/process_keycode | |
parent | 2843e7f995fd1c8a011f541802aaad254278d6d4 (diff) | |
download | qmk_firmware-f40b56468366212ffa23de5dd424f24e42bb88bb.tar.gz qmk_firmware-f40b56468366212ffa23de5dd424f24e42bb88bb.zip |
Partial fix for Issue #9405 - Caps Lock not working with Unicode Map's XP on Linux (#11232)
Diffstat (limited to 'quantum/process_keycode')
-rw-r--r-- | quantum/process_keycode/process_unicode_common.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c index 80be31623..bac9fbcc0 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c | |||
@@ -21,6 +21,7 @@ | |||
21 | 21 | ||
22 | unicode_config_t unicode_config; | 22 | unicode_config_t unicode_config; |
23 | uint8_t unicode_saved_mods; | 23 | uint8_t unicode_saved_mods; |
24 | bool unicode_saved_caps_lock; | ||
24 | 25 | ||
25 | #if UNICODE_SELECTED_MODES != -1 | 26 | #if UNICODE_SELECTED_MODES != -1 |
26 | static uint8_t selected[] = {UNICODE_SELECTED_MODES}; | 27 | static uint8_t selected[] = {UNICODE_SELECTED_MODES}; |
@@ -77,6 +78,16 @@ void cycle_unicode_input_mode(int8_t offset) { | |||
77 | void persist_unicode_input_mode(void) { eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode); } | 78 | void persist_unicode_input_mode(void) { eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode); } |
78 | 79 | ||
79 | __attribute__((weak)) void unicode_input_start(void) { | 80 | __attribute__((weak)) void unicode_input_start(void) { |
81 | unicode_saved_caps_lock = host_keyboard_led_state().caps_lock; | ||
82 | |||
83 | // Note the order matters here! | ||
84 | // Need to do this before we mess around with the mods, or else | ||
85 | // UNICODE_KEY_LNX (which is usually Ctrl-Shift-U) might not work | ||
86 | // correctly in the shifted case. | ||
87 | if (unicode_config.input_mode == UC_LNX && unicode_saved_caps_lock) { | ||
88 | tap_code(KC_CAPS); | ||
89 | } | ||
90 | |||
80 | unicode_saved_mods = get_mods(); // Save current mods | 91 | unicode_saved_mods = get_mods(); // Save current mods |
81 | clear_mods(); // Unregister mods to start from a clean state | 92 | clear_mods(); // Unregister mods to start from a clean state |
82 | 93 | ||
@@ -107,6 +118,9 @@ __attribute__((weak)) void unicode_input_finish(void) { | |||
107 | break; | 118 | break; |
108 | case UC_LNX: | 119 | case UC_LNX: |
109 | tap_code(KC_SPC); | 120 | tap_code(KC_SPC); |
121 | if (unicode_saved_caps_lock) { | ||
122 | tap_code(KC_CAPS); | ||
123 | } | ||
110 | break; | 124 | break; |
111 | case UC_WIN: | 125 | case UC_WIN: |
112 | unregister_code(KC_LALT); | 126 | unregister_code(KC_LALT); |
@@ -125,6 +139,11 @@ __attribute__((weak)) void unicode_input_cancel(void) { | |||
125 | unregister_code(UNICODE_KEY_MAC); | 139 | unregister_code(UNICODE_KEY_MAC); |
126 | break; | 140 | break; |
127 | case UC_LNX: | 141 | case UC_LNX: |
142 | tap_code(KC_ESC); | ||
143 | if (unicode_saved_caps_lock) { | ||
144 | tap_code(KC_CAPS); | ||
145 | } | ||
146 | break; | ||
128 | case UC_WINC: | 147 | case UC_WINC: |
129 | tap_code(KC_ESC); | 148 | tap_code(KC_ESC); |
130 | break; | 149 | break; |