diff options
| author | Pascal Getreuer <[email protected]> | 2022-08-13 06:48:51 -0700 | 
|---|---|---|
| committer | GitHub <[email protected]> | 2022-08-13 23:48:51 +1000 | 
| commit | 6a0d90f81a9b9938591b32f9321530e68e5cea0b (patch) | |
| tree | 138714ab3bc8e6f7c373a73f67424e6c3d7711a0 /quantum/process_keycode | |
| parent | 4eeafbebabfac04eada98f75dedbecdbbd16298c (diff) | |
| download | qmk_firmware-6a0d90f81a9b9938591b32f9321530e68e5cea0b.tar.gz qmk_firmware-6a0d90f81a9b9938591b32f9321530e68e5cea0b.zip | |
Fix Caps Word capitalization when used with Combos + Auto Shift. (#17549)
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_auto_shift.c | 7 | ||||
| -rw-r--r-- | quantum/process_keycode/process_caps_word.c | 4 | ||||
| -rw-r--r-- | quantum/process_keycode/process_combo.c | 9 | 
3 files changed, 19 insertions, 1 deletions
| diff --git a/quantum/process_keycode/process_auto_shift.c b/quantum/process_keycode/process_auto_shift.c index 8cb45bc0ae..3ff188ba7e 100644 --- a/quantum/process_keycode/process_auto_shift.c +++ b/quantum/process_keycode/process_auto_shift.c @@ -123,7 +123,12 @@ bool get_autoshift_shift_state(uint16_t keycode) {  /** \brief Restores the shift key if it was cancelled by Auto Shift */  static void autoshift_flush_shift(void) {      autoshift_flags.holding_shift = false; -    del_weak_mods(MOD_BIT(KC_LSFT)); +#    ifdef CAPS_WORD_ENABLE +    if (!is_caps_word_on()) +#    endif // CAPS_WORD_ENABLE +    { +        del_weak_mods(MOD_BIT(KC_LSFT)); +    }      if (autoshift_flags.cancelling_lshift) {          autoshift_flags.cancelling_lshift = false;          add_mods(MOD_BIT(KC_LSFT)); diff --git a/quantum/process_keycode/process_caps_word.c b/quantum/process_keycode/process_caps_word.c index ffd509a914..bc4369846c 100644 --- a/quantum/process_keycode/process_caps_word.c +++ b/quantum/process_keycode/process_caps_word.c @@ -131,7 +131,11 @@ bool process_caps_word(uint16_t keycode, keyrecord_t* record) {  #endif // SWAP_HANDS_ENABLE          } +#ifdef AUTO_SHIFT_ENABLE +        del_weak_mods(get_autoshift_state() ? ~MOD_BIT(KC_LSFT) : 0xff); +#else          clear_weak_mods(); +#endif // AUTO_SHIFT_ENABLE          if (caps_word_press_user(keycode)) {              send_keyboard_report();              return true; diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index d5a649adb3..e5135e5a64 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c @@ -227,7 +227,16 @@ static inline void dump_key_buffer(void) {  #endif          }          record->event.time = 0; + +#if defined(CAPS_WORD_ENABLE) && defined(AUTO_SHIFT_ENABLE) +        // Edge case: preserve the weak Left Shift mod if both Caps Word and +        // Auto Shift are on. Caps Word capitalizes by setting the weak Left +        // Shift mod during the press event, but Auto Shift doesn't send the +        // key until it receives the release event. +        del_weak_mods((is_caps_word_on() && get_autoshift_state()) ? ~MOD_BIT(KC_LSFT) : 0xff); +#else          clear_weak_mods(); +#endif // defined(CAPS_WORD_ENABLE) && defined(AUTO_SHIFT_ENABLE)  #if TAP_CODE_DELAY > 0          // only delay once and for a non-tapping key | 
