]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Fix process_combo which assign -1 to uint16_t
authorShihpin Tseng <deftsp@gmail.com>
Sun, 19 Aug 2018 18:16:06 +0000 (02:16 +0800)
committerShihpin Tseng <deftsp@gmail.com>
Sun, 19 Aug 2018 18:29:08 +0000 (02:29 +0800)
quantum/process_keycode/process_combo.c
quantum/process_keycode/process_combo.h

index 6e9c28e4fc0489cb95a2021cb2c25e8373c3b0d6..13f8bbb331278d746ed95fabf43ab192c83bf749 100644 (file)
@@ -18,9 +18,6 @@
 #include "print.h"
 
 
-#define COMBO_TIMER_ELAPSED -1
-
-
 __attribute__ ((weak))
 combo_t key_combos[COMBO_COUNT] = {
 
@@ -65,7 +62,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
     if (-1 == (int8_t)index) return false;
 
     /* The combos timer is used to signal whether the combo is active */
-    bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true;
+    bool is_combo_active = combo->is_active;
 
     if (record->event.pressed) {
         KEY_STATE_DOWN(index);
@@ -73,9 +70,10 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
         if (is_combo_active) {
             if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */
                 send_combo(combo->keycode, true);
-                combo->timer = COMBO_TIMER_ELAPSED;
+                combo->is_active = false;
             } else { /* Combo key was pressed */
                 combo->timer = timer_read();
+                combo->is_active = true;
 #ifdef COMBO_ALLOW_ACTION_KEYS
                 combo->prev_record = *record;
 #else
@@ -99,6 +97,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
             send_keyboard_report();
             unregister_code16(keycode);
 #endif
+            combo->is_active = false;
             combo->timer = 0;            
         }
 
@@ -106,6 +105,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t *
     }
 
     if (NO_COMBO_KEYS_ARE_DOWN) {
+        combo->is_active = true;
         combo->timer = 0;
     }
 
@@ -132,14 +132,14 @@ void matrix_scan_combo(void)
         #pragma GCC diagnostic ignored "-Warray-bounds"
         combo_t *combo = &key_combos[i];
         #pragma GCC diagnostic pop
-        if (combo->timer &&
-            combo->timer != COMBO_TIMER_ELAPSED && 
+        if (combo->is_active &&
+            combo->timer &&
             timer_elapsed(combo->timer) > COMBO_TERM) {
-            
+
             /* This disables the combo, meaning key events for this
              * combo will be handled by the next processors in the chain 
              */
-            combo->timer = COMBO_TIMER_ELAPSED;
+            combo->is_active = false;
 
 #ifdef COMBO_ALLOW_ACTION_KEYS
             process_action(&combo->prev_record, 
index a5dbd788a42ce292ba6cdb752d2f9d9262e3f418..a5787c9ed3676ea7ac20ad35ebb55e4bedef5f18 100644 (file)
@@ -33,6 +33,7 @@ typedef struct
     uint8_t state;
 #endif
     uint16_t timer;
+    bool is_active;
 #ifdef COMBO_ALLOW_ACTION_KEYS
     keyrecord_t prev_record;
 #else