forked from mirrors/qmk_firmware
Fix Tapping: release of a key pressed before tap
- immediately process release event of a key pressed before tapping
This commit is contained in:
parent
c7faa51ee8
commit
4d0b3aace0
1 changed files with 7 additions and 4 deletions
|
@ -27,9 +27,7 @@ static uint8_t waiting_buffer_tail = 0;
|
||||||
static bool process_tapping(keyrecord_t *record);
|
static bool process_tapping(keyrecord_t *record);
|
||||||
static bool waiting_buffer_enq(keyrecord_t record);
|
static bool waiting_buffer_enq(keyrecord_t record);
|
||||||
static void waiting_buffer_clear(void);
|
static void waiting_buffer_clear(void);
|
||||||
#if TAPPING_TERM >= 500
|
|
||||||
static bool waiting_buffer_typed(keyevent_t event);
|
static bool waiting_buffer_typed(keyevent_t event);
|
||||||
#endif
|
|
||||||
static bool waiting_buffer_has_anykey_pressed(void);
|
static bool waiting_buffer_has_anykey_pressed(void);
|
||||||
static void waiting_buffer_scan_tap(void);
|
static void waiting_buffer_scan_tap(void);
|
||||||
static void debug_tapping_key(void);
|
static void debug_tapping_key(void);
|
||||||
|
@ -109,6 +107,13 @@ bool process_tapping(keyrecord_t *keyp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#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 {
|
else {
|
||||||
// set interrupted flag when other key preesed during tapping
|
// set interrupted flag when other key preesed during tapping
|
||||||
if (event.pressed) {
|
if (event.pressed) {
|
||||||
|
@ -289,7 +294,6 @@ void waiting_buffer_clear(void)
|
||||||
waiting_buffer_tail = 0;
|
waiting_buffer_tail = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TAPPING_TERM >= 500
|
|
||||||
bool waiting_buffer_typed(keyevent_t event)
|
bool waiting_buffer_typed(keyevent_t event)
|
||||||
{
|
{
|
||||||
for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
bool waiting_buffer_has_anykey_pressed(void)
|
bool waiting_buffer_has_anykey_pressed(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue