~ruther/qmk_firmware

c0e6a28bc62f659b0564a203df670d81a89a3bb4 — Jason Ken Adhinarta 2 years ago de19cb7
Prevent tap dance from wiping dynamic macros (#17880)

1 files changed, 14 insertions(+), 8 deletions(-)

M quantum/process_keycode/process_dynamic_macro.c
M quantum/process_keycode/process_dynamic_macro.c => quantum/process_keycode/process_dynamic_macro.c +14 -8
@@ 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;