~ruther/qmk_firmware

9c1097e768aed90e4c56a3a18f6c1cc9cac52391 — Joshua Diamond 5 years ago f7eb030
Fix for One Shot Layer not being cleaned up after some actions (#8832)

1 files changed, 9 insertions(+), 2 deletions(-)

M tmk_core/common/action.c
M tmk_core/common/action.c => tmk_core/common/action.c +9 -2
@@ 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