]> git.donarmstrong.com Git - qmk_firmware.git/commit
tap-dance: Major rework, to make it more reliable
authorGergely Nagy <algernon@madhouse-project.org>
Wed, 17 Aug 2016 11:04:50 +0000 (13:04 +0200)
committerGergely Nagy <algernon@madhouse-project.org>
Wed, 17 Aug 2016 13:05:58 +0000 (15:05 +0200)
commit29f64d7a93d941167c6c6e95f893ab84586b2205
tree673ae25744608863609e022dbb0600c830893157
parentd78058cc75a9b05a6885991506d5f807ebb2a9f9
tap-dance: Major rework, to make it more reliable

This reworks how the tap-dance feature works: instead of one global
state, we have a state for each tap-dance key, so we can cancel them
when another tap-dance key is in flight. This fixes #527.

Since we have a state for each key, we can avoid situation where a keyup
would mess with our global state. This fixes #563.

And while here, we also make sure to fire events only once, and this
fixes #574.

There is one breaking change, though: tap-dance debugging support was
removed, because dumping the whole state would increase the firmware
size too much. Any keymap that made use of this, will have to be
updated (but there's no such keymap in the repo).

Also, there's a nice trick used in this rework: we need to iterate
through tap_dance_actions in a few places, to check for timeouts, and so
on. For this, we'd need to know the size of the array. We can't discover
that at compile-time, because tap-dance gets compiled separately. We'd
like to avoid having to terminate the list with a sentinel value,
because that would require updates to all keymaps that use the feature.
So, we keep track of the highest tap-dance code seen so far, and iterate
until that index.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
keyboards/ergodox/keymaps/algernon/keymap.c
keyboards/preonic/keymaps/kinesis/keymap.c
quantum/process_keycode/process_tap_dance.c
quantum/process_keycode/process_tap_dance.h
readme.md