diff options
Diffstat (limited to 'quantum/action.c')
| -rw-r--r-- | quantum/action.c | 51 | 
1 files changed, 30 insertions, 21 deletions
| diff --git a/quantum/action.c b/quantum/action.c index 7d3f40a950..9a6bbcca11 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" @@ -39,6 +39,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #    include "pointing_device.h"  #endif +#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) && defined(SWAP_HANDS_ENABLE) +#    include "encoder.h" +#endif +  int tp_buttons;  #if defined(RETRO_TAPPING) || defined(RETRO_TAPPING_PER_KEY) || (defined(AUTO_SHIFT_ENABLE) && defined(RETRO_SHIFT)) @@ -161,6 +165,18 @@ void set_swap_hands_state(size_t index, uint8_t *swap_state, bool on) {      }  } +void swap_hands_on(void) { +    swap_hands = true; +} + +void swap_hands_off(void) { +    swap_hands = false; +} + +void swap_hands_toggle(void) { +    swap_hands = !swap_hands; +} +  bool is_swap_hands_on(void) {      return swap_hands;  } @@ -435,39 +451,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 +496,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) && | 
