diff options
Diffstat (limited to 'quantum/action.c')
-rw-r--r-- | quantum/action.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/quantum/action.c b/quantum/action.c index 7d3f40a950..41686b5a5e 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "host.h" #include "keycode.h" #include "keyboard.h" -#include "keymap.h" #include "mousekey.h" #include "programmable_button.h" #include "command.h" @@ -30,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "action.h" #include "wait.h" #include "keycode_config.h" +#include "debug.h" #ifdef BACKLIGHT_ENABLE # include "backlight.h" @@ -435,39 +435,32 @@ void process_action(keyrecord_t *record, action_t action) { } else { if (event.pressed) { if (tap_count == 0) { + // Not a tap, but a hold: register the held mod ac_dprintf("MODS_TAP: Oneshot: 0\n"); - register_mods(mods | get_oneshot_mods()); + register_mods(mods); } else if (tap_count == 1) { ac_dprintf("MODS_TAP: Oneshot: start\n"); - set_oneshot_mods(mods | get_oneshot_mods()); + add_oneshot_mods(mods); # if defined(ONESHOT_TAP_TOGGLE) && ONESHOT_TAP_TOGGLE > 1 } else if (tap_count == ONESHOT_TAP_TOGGLE) { ac_dprintf("MODS_TAP: Toggling oneshot"); register_mods(mods); - clear_oneshot_mods(); - set_oneshot_locked_mods(mods | get_oneshot_locked_mods()); + del_oneshot_mods(mods); + add_oneshot_locked_mods(mods); # endif - } else { - register_mods(mods | get_oneshot_mods()); } } else { if (tap_count == 0) { - clear_oneshot_mods(); + // Release hold: unregister the held mod and its variants unregister_mods(mods); - } else if (tap_count == 1) { - // Retain Oneshot mods + del_oneshot_mods(mods); + del_oneshot_locked_mods(mods); # if defined(ONESHOT_TAP_TOGGLE) && ONESHOT_TAP_TOGGLE > 1 - if (mods & get_mods()) { - unregister_mods(mods); - clear_oneshot_mods(); - set_oneshot_locked_mods(~mods & get_oneshot_locked_mods()); - } - } else if (tap_count == ONESHOT_TAP_TOGGLE) { - // Toggle Oneshot Layer -# endif - } else { + } else if (tap_count == 1 && (mods & get_mods())) { unregister_mods(mods); - clear_oneshot_mods(); + del_oneshot_mods(mods); + del_oneshot_locked_mods(mods); +# endif } } } @@ -487,7 +480,7 @@ void process_action(keyrecord_t *record, action_t action) { default: if (event.pressed) { if (tap_count > 0) { -# if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY) +# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY if ( # ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY get_hold_on_other_key_press(get_event_keycode(record->event, false), record) && |