Jelajahi Sumber

Fix Issue #9533 - Delayed shift state handling (#11220)

Co-authored-by: Ryan <fauxpark@gmail.com>
Joshua Diamond 4 tahun lalu
induk
melakukan
54e2bf3ede

+ 0 - 1
quantum/process_keycode/process_unicode_common.h

@@ -75,7 +75,6 @@ typedef union {
 } unicode_config_t;
 
 extern unicode_config_t unicode_config;
-extern uint8_t          unicode_saved_mods;
 
 void    unicode_input_mode_init(void);
 uint8_t get_unicode_input_mode(void);

+ 7 - 2
quantum/process_keycode/process_unicodemap.c

@@ -21,8 +21,13 @@ __attribute__((weak)) uint16_t unicodemap_index(uint16_t keycode) {
         // Keycode is a pair: extract index based on Shift / Caps Lock state
         uint16_t index = keycode - QK_UNICODEMAP_PAIR;
 
-        bool shift = unicode_saved_mods & MOD_MASK_SHIFT;
-        bool caps  = IS_HOST_LED_ON(USB_LED_CAPS_LOCK);
+        uint8_t mods = get_mods() | get_weak_mods();
+#ifndef NO_ACTION_ONESHOT
+        mods |= get_oneshot_mods();
+#endif
+
+        bool shift = mods & MOD_MASK_SHIFT;
+        bool caps  = host_keyboard_led_state().caps_lock;
         if (shift ^ caps) {
             index >>= 7;
         }