~ruther/qmk_firmware

4d0b3aace09e26b92ae207f94cf889878e709b35 — tmk 12 years ago c7faa51
Fix Tapping: release of a key pressed before tap

- immediately process release event of a key pressed before tapping
1 files changed, 7 insertions(+), 4 deletions(-)

M common/action_tapping.c
M common/action_tapping.c => common/action_tapping.c +7 -4
@@ 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) {


@@ 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)
{