diff options
author | Joshua Diamond <josh@windowoffire.com> | 2020-12-22 12:51:47 -0500 |
---|---|---|
committer | Drashna Jael're <drashna@live.com> | 2021-01-12 22:46:10 -0800 |
commit | dc9d8297fa2c93c7f0695c544ffa1296cae02cf2 (patch) | |
tree | 82d41f68d74257fe981d62737b314c8c8a6a55c2 /quantum | |
parent | 9af1faa040488c9b3034e589187656b37b75f916 (diff) |
Partial fix for Issue #9405 - Caps Lock not working with Unicode Map's XP on Linux (#11232)
Diffstat (limited to 'quantum')
-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 80be316232..bac9fbcc0f 100644 --- a/quantum/process_keycode/process_unicode_common.c +++ b/quantum/process_keycode/process_unicode_common.c @@ -21,6 +21,7 @@ unicode_config_t unicode_config; uint8_t unicode_saved_mods; +bool unicode_saved_caps_lock; #if UNICODE_SELECTED_MODES != -1 static uint8_t selected[] = {UNICODE_SELECTED_MODES}; @@ -77,6 +78,16 @@ void cycle_unicode_input_mode(int8_t offset) { void persist_unicode_input_mode(void) { eeprom_update_byte(EECONFIG_UNICODEMODE, unicode_config.input_mode); } __attribute__((weak)) void unicode_input_start(void) { + unicode_saved_caps_lock = host_keyboard_led_state().caps_lock; + + // Note the order matters here! + // Need to do this before we mess around with the mods, or else + // UNICODE_KEY_LNX (which is usually Ctrl-Shift-U) might not work + // correctly in the shifted case. + if (unicode_config.input_mode == UC_LNX && unicode_saved_caps_lock) { + tap_code(KC_CAPS); + } + unicode_saved_mods = get_mods(); // Save current mods clear_mods(); // Unregister mods to start from a clean state @@ -107,6 +118,9 @@ __attribute__((weak)) void unicode_input_finish(void) { break; case UC_LNX: tap_code(KC_SPC); + if (unicode_saved_caps_lock) { + tap_code(KC_CAPS); + } break; case UC_WIN: unregister_code(KC_LALT); @@ -125,6 +139,11 @@ __attribute__((weak)) void unicode_input_cancel(void) { unregister_code(UNICODE_KEY_MAC); break; case UC_LNX: + tap_code(KC_ESC); + if (unicode_saved_caps_lock) { + tap_code(KC_CAPS); + } + break; case UC_WINC: tap_code(KC_ESC); break; |