From 9c1097e768aed90e4c56a3a18f6c1cc9cac52391 Mon Sep 17 00:00:00 2001 From: Joshua Diamond Date: Thu, 18 Jun 2020 03:07:48 -0400 Subject: [PATCH] Fix for One Shot Layer not being cleaned up after some actions (#8832) --- tmk_core/common/action.c | 11 +++++++++-- 1 file 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