diff options
author | Joshua Diamond <josh@windowoffire.com> | 2020-06-18 03:07:48 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-18 08:07:48 +0100 |
commit | 9c1097e768aed90e4c56a3a18f6c1cc9cac52391 (patch) | |
tree | 76b783dd8fc4a7b685a1702e64e1c2d058e9f81a /tmk_core/common/action.c | |
parent | f7eb030e917a8fa360ad7cc7bb26d804cf4c5f6c (diff) |
Fix for One Shot Layer not being cleaned up after some actions (#8832)
Diffstat (limited to 'tmk_core/common/action.c')
-rw-r--r-- | tmk_core/common/action.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index b39836f0fb..82be9cc920 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -192,7 +192,14 @@ void process_record(keyrecord_t *record) { return; } - if (!process_record_quantum(record)) return; + if (!process_record_quantum(record)) { +#ifndef NO_ACTION_ONESHOT + if (is_oneshot_layer_active() && record->event.pressed) { + clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); + } +#endif + return; + } process_record_handler(record); post_process_record_quantum(record); @@ -231,7 +238,7 @@ void process_action(keyrecord_t *record, action_t action) { #ifndef NO_ACTION_ONESHOT bool do_release_oneshot = false; // notice we only clear the one shot layer if the pressed key is not a modifier. - if (is_oneshot_layer_active() && event.pressed && !IS_MOD(action.key.code) + if (is_oneshot_layer_active() && event.pressed && (action.kind.id == ACT_USAGE || !IS_MOD(action.key.code)) # ifdef SWAP_HANDS_ENABLE && !(action.kind.id == ACT_SWAP_HANDS && action.swap.code == OP_SH_ONESHOT) # endif |