]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - common/action_tapping.c
Merge branch 'tapping_fix60'
[tmk_firmware.git] / common / action_tapping.c
index 9b5512a8e8addcdc60fe548bac887dbbd0b8a96e..542949ddd3f30c884db0d5d3b92738fd4cf1fa07 100644 (file)
@@ -27,9 +27,7 @@ static uint8_t waiting_buffer_tail = 0;
 static bool process_tapping(keyrecord_t *record);
 static bool waiting_buffer_enq(keyrecord_t record);
 static void waiting_buffer_clear(void);
-#if TAPPING_TERM >= 500
 static bool waiting_buffer_typed(keyevent_t event);
-#endif
 static bool waiting_buffer_has_anykey_pressed(void);
 static void waiting_buffer_scan_tap(void);
 static void debug_tapping_key(void);
@@ -109,6 +107,13 @@ bool process_tapping(keyrecord_t *keyp)
                     return false;
                 }
 #endif
+                /* release a key pressed before tapping */
+                else if (!event.pressed && !waiting_buffer_typed(event)) {
+                    /* Unexpected repeating occurs unless this event is processed immedately. */
+                    debug("Tapping: release a key pressed before tapping\n");
+                    process_action(keyp);
+                    return true;
+                }
                 else {
                     // set interrupted flag when other key preesed during tapping
                     if (event.pressed) {
@@ -206,7 +211,7 @@ bool process_tapping(keyrecord_t *keyp)
                     if (!tapping_key.tap.interrupted && tapping_key.tap.count > 0) {
                         // sequential tap.
                         keyp->tap = tapping_key.tap;
-                        keyp->tap.count += 1;
+                        if (keyp->tap.count < 15) keyp->tap.count += 1;
                         debug("Tapping: Tap press("); debug_dec(keyp->tap.count); debug(")\n");
                         process_action(keyp);
                         tapping_key = *keyp;
@@ -289,7 +294,6 @@ void waiting_buffer_clear(void)
     waiting_buffer_tail = 0;
 }
 
-#if TAPPING_TERM >= 500
 bool waiting_buffer_typed(keyevent_t event)
 {
     for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) {
@@ -299,7 +303,6 @@ bool waiting_buffer_typed(keyevent_t event)
     }
     return false;
 }
-#endif
 
 bool waiting_buffer_has_anykey_pressed(void)
 {