~ruther/qmk_firmware

f40b56468366212ffa23de5dd424f24e42bb88bb — Joshua Diamond 4 years ago 2843e7f
Partial fix for Issue #9405 - Caps Lock not working with Unicode Map's XP on Linux (#11232)

1 files changed, 19 insertions(+), 0 deletions(-)

M quantum/process_keycode/process_unicode_common.c
M quantum/process_keycode/process_unicode_common.c => quantum/process_keycode/process_unicode_common.c +19 -0
@@ 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;