Przeglądaj źródła

Prevent tap dance from wiping dynamic macros (#17880)

Jason Ken Adhinarta 2 lat temu
rodzic
commit
c0e6a28bc6
1 zmienionych plików z 14 dodań i 8 usunięć
  1. 14 8
      quantum/process_keycode/process_dynamic_macro.c

+ 14 - 8
quantum/process_keycode/process_dynamic_macro.c

@@ -45,6 +45,10 @@ __attribute__((weak)) void dynamic_macro_record_end_user(int8_t direction) {
     dynamic_macro_led_blink();
 }
 
+__attribute__((weak)) bool dynamic_macro_valid_key_user(uint16_t keycode, keyrecord_t *record) {
+    return true;
+}
+
 /* Convenience macros used for retrieving the debug info. All of them
  * need a `direction` variable accessible at the call site.
  */
@@ -252,14 +256,16 @@ bool process_dynamic_macro(uint16_t keycode, keyrecord_t *record) {
                 return false;
 #endif
             default:
-                /* Store the key in the macro buffer and process it normally. */
-                switch (macro_id) {
-                    case 1:
-                        dynamic_macro_record_key(macro_buffer, &macro_pointer, r_macro_end, +1, record);
-                        break;
-                    case 2:
-                        dynamic_macro_record_key(r_macro_buffer, &macro_pointer, macro_end, -1, record);
-                        break;
+                if (dynamic_macro_valid_key_user(keycode, record)) {
+                    /* Store the key in the macro buffer and process it normally. */
+                    switch (macro_id) {
+                        case 1:
+                            dynamic_macro_record_key(macro_buffer, &macro_pointer, r_macro_end, +1, record);
+                            break;
+                        case 2:
+                            dynamic_macro_record_key(r_macro_buffer, &macro_pointer, macro_end, -1, record);
+                            break;
+                    }
                 }
                 return true;
                 break;