summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorprecondition <57645186+precondition@users.noreply.github.com>2022-12-13 12:20:07 +0100
committerGitHub <noreply@github.com>2022-12-13 22:20:07 +1100
commit515dd18c2801663bbac0e59f683c2a93e4bd9b1a (patch)
treea60fa641a1d5e0e3ff08fbb0a6718c8aa5280f15 /quantum
parentca13734f912e64c632daf816e700b1b176d0ac8e (diff)
Remove IGNORE_MOD_TAP_INTERRUPT_PER_KEY in favour of HOLD_ON_OTHER_KEY_PRESS_PER_KEY (#15741)
Diffstat (limited to 'quantum')
-rw-r--r--quantum/action.c10
-rw-r--r--quantum/action_tapping.c14
-rw-r--r--quantum/process_keycode/process_auto_shift.c41
3 files changed, 30 insertions, 35 deletions
diff --git a/quantum/action.c b/quantum/action.c
index abf9834d2f..ea6a24ea5c 100644
--- a/quantum/action.c
+++ b/quantum/action.c
@@ -55,8 +55,8 @@ int retro_tapping_counter = 0;
 #    include "process_auto_shift.h"
 #endif
 
-#ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-__attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+#ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
+__attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
     return false;
 }
 #endif
@@ -484,10 +484,10 @@ void process_action(keyrecord_t *record, action_t action) {
                 default:
                     if (event.pressed) {
                         if (tap_count > 0) {
-#    if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY)
+#    if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
                             if (
-#        ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-                                !get_ignore_mod_tap_interrupt(get_event_keycode(record->event, false), record) &&
+#        ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
+                                get_hold_on_other_key_press(get_event_keycode(record->event, false), record) &&
 #        endif
                                 record->tap.interrupted) {
                                 dprint("mods_tap: tap: cancel: add_mods\n");
diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c
index 0350495ae5..ca0f31f12e 100644
--- a/quantum/action_tapping.c
+++ b/quantum/action_tapping.c
@@ -15,6 +15,14 @@
 
 #ifndef NO_ACTION_TAPPING
 
+#    if defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY)
+#        error "IGNORE_MOD_TAP_INTERRUPT_PER_KEY has been removed; the code needs to be ported to use HOLD_ON_OTHER_KEY_PRESS_PER_KEY instead."
+#    elif !defined(IGNORE_MOD_TAP_INTERRUPT)
+#        if !defined(PERMISSIVE_HOLD) && !defined(PERMISSIVE_HOLD_PER_KEY) && !defined(HOLD_ON_OTHER_KEY_PRESS) && !defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
+#            pragma message "The default behavior of mod-taps will change to mimic IGNORE_MOD_TAP_INTERRUPT in the future.\nIf you wish to keep the old default behavior of mod-taps, please use HOLD_ON_OTHER_KEY_PRESS."
+#        endif
+#    endif
+
 #    define IS_TAPPING() !IS_NOEVENT(tapping_key.event)
 #    define IS_TAPPING_PRESSED() (IS_TAPPING() && tapping_key.event.pressed)
 #    define IS_TAPPING_RELEASED() (IS_TAPPING() && !tapping_key.event.pressed)
@@ -162,9 +170,7 @@ void action_tapping_process(keyrecord_t record) {
 #        define TAP_GET_HOLD_ON_OTHER_KEY_PRESS false
 #    endif
 
-#    ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-#        define TAP_GET_IGNORE_MOD_TAP_INTERRUPT get_ignore_mod_tap_interrupt(tapping_keycode, &tapping_key)
-#    elif defined(IGNORE_MOD_TAP_INTERRUPT)
+#    if defined(IGNORE_MOD_TAP_INTERRUPT)
 #        define TAP_GET_IGNORE_MOD_TAP_INTERRUPT true
 #    else
 #        define TAP_GET_IGNORE_MOD_TAP_INTERRUPT false
@@ -216,7 +222,7 @@ bool process_tapping(keyrecord_t *keyp) {
                             // Rolled over the two keys.
                             (tapping_key.tap.interrupted == true && (
                                 (TAP_IS_LT && TAP_GET_HOLD_ON_OTHER_KEY_PRESS) ||
-                                (TAP_IS_MT && !TAP_GET_IGNORE_MOD_TAP_INTERRUPT)
+                                (TAP_IS_MT && TAP_GET_HOLD_ON_OTHER_KEY_PRESS)
                                 )
                             )
                             // Makes Retro Shift ignore [IGNORE_MOD_TAP_INTERRUPT's
diff --git a/quantum/process_keycode/process_auto_shift.c b/quantum/process_keycode/process_auto_shift.c
index 35d4851ee5..b7ac449198 100644
--- a/quantum/process_keycode/process_auto_shift.c
+++ b/quantum/process_keycode/process_auto_shift.c
@@ -397,8 +397,17 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
                 break;
 #    endif
         }
-        // If Retro Shift is disabled, possible custom actions shouldn't happen.
-        // clang-format off
+            // If Retro Shift is disabled, possible custom actions shouldn't happen.
+            // clang-format off
+#   if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
+#       if defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
+            const bool is_hold_on_interrupt = get_hold_on_other_key_press(keycode, record);
+#       elif defined(IGNORE_MOD_TAP_INTERRUPT)
+            const bool is_hold_on_interrupt = false;
+#       else
+            const bool is_hold_on_interrupt = IS_MT(keycode);
+#       endif
+#   endif
         if (IS_RETRO(keycode)
 #    if defined(RETRO_SHIFT) && !defined(NO_ACTION_TAPPING)
             // Not tapped or #defines mean that rolls should use hold action.
@@ -407,27 +416,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
 #        ifdef RETRO_TAPPING_PER_KEY
                 || !get_retro_tapping(keycode, record)
 #        endif
-                || (record->tap.interrupted && (IS_LT(keycode)
-#        if defined(HOLD_ON_OTHER_KEY_PRESS) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
-#            ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
-                    ? get_hold_on_other_key_press(keycode, record)
-#            else
-                    ? true
-#            endif
-#        else
-                    ? false
-#        endif
-#        if defined(IGNORE_MOD_TAP_INTERRUPT) || defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY)
-#            ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-                    : !get_ignore_mod_tap_interrupt(keycode, record)
-#            else
-                    : false
-#            endif
-#        else
-                    : true
-#        endif
-                ))
-            )
+                || (record->tap.interrupted && is_hold_on_interrupt))
 #    endif
         ) {
             // clang-format on
@@ -454,10 +443,10 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
 #    endif
         ) {
             // Fixes modifiers not being applied to rolls with AUTO_SHIFT_MODIFIERS set.
-#    if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(IGNORE_MOD_TAP_INTERRUPT_PER_KEY)
+#    if !defined(IGNORE_MOD_TAP_INTERRUPT) || defined(HOLD_ON_OTHER_KEY_PRESS_PER_KEY)
             if (autoshift_flags.in_progress
-#        ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-                && !get_ignore_mod_tap_interrupt(keycode, record)
+#        ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
+                && get_hold_on_other_key_press(keycode, record)
 #        endif
             ) {
                 autoshift_end(KC_NO, now, false, &autoshift_lastrecord);