summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErez Zukerman <bulk@ezuk.org>2017-02-02 02:12:44 +0100
committerGitHub <noreply@github.com>2017-02-02 02:12:44 +0100
commit45e5b3278126ef1e99f2b1323246789f6d8ad55e (patch)
tree3d087b85cf899f47262b6463ff642f7301bfe79a
parenta5d10e8c2e5d314083a2529460683210b00bf98a (diff)
parent5a860b71a1943358d0722ace9d2c13bd5c77c971 (diff)
downloadqmk_firmware-45e5b3278126ef1e99f2b1323246789f6d8ad55e.tar.gz
qmk_firmware-45e5b3278126ef1e99f2b1323246789f6d8ad55e.tar.xz
Merge pull request #1049 from SjB/tap_dance_save_oneshot_mods
race condition between oneshot_mods and tap_dance
-rw-r--r--quantum/process_keycode/process_tap_dance.c7
-rw-r--r--quantum/process_keycode/process_tap_dance.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c
index 6ae362c4c..403dca538 100644
--- a/quantum/process_keycode/process_tap_dance.c
+++ b/quantum/process_keycode/process_tap_dance.c
@@ -43,12 +43,16 @@ static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_acti
if (action->state.finished)
return;
action->state.finished = true;
+ add_mods(action->state.oneshot_mods);
+ send_keyboard_report();
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
}
static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action)
{
_process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
+ del_mods(action->state.oneshot_mods);
+ send_keyboard_report();
}
bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
@@ -70,6 +74,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
action->state.keycode = keycode;
action->state.count++;
action->state.timer = timer_read();
+ action->state.oneshot_mods = get_oneshot_mods();
process_tap_dance_action_on_each_tap (action);
if (last_td && last_td != keycode) {
@@ -109,7 +114,7 @@ void matrix_scan_tap_dance () {
if (highest_td == -1)
return;
- for (int i = 0; i <= highest_td; i++) {
+for (int i = 0; i <= highest_td; i++) {
qk_tap_dance_action_t *action = &tap_dance_actions[i];
if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) {
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index f753cbba6..726752ecc 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -9,6 +9,7 @@
typedef struct
{
uint8_t count;
+ uint8_t oneshot_mods;
uint16_t keycode;
uint16_t timer;
bool interrupted;