From 4b50ea15a954de2e6062aa7228bd1f9f76669ce7 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 01:37:46 +0200 Subject: dynamic_macro.h: Do not save the keys being held when stopping the recording More specifically, we save them and then place the `macro_end` pointer before them so they are essentially ignored and the other macro may freely overwrite them. --- quantum/dynamic_macro.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'quantum') diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 9e7845c99..c4017aec9 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -127,10 +127,22 @@ void dynamic_macro_record_key( * End recording of the dynamic macro. Essentially just update the * pointer to the end of the macro. */ -void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end) +void dynamic_macro_record_end( + keyrecord_t *macro_buffer, + keyrecord_t *macro_pointer, + int8_t direction, + keyrecord_t **macro_end) { dynamic_macro_led_blink(); + /* Do not save the keys being held when stopping the recording, + * i.e. the keys used to access the layer DYN_REC_STOP is on. + */ + while (macro_pointer != macro_buffer && + (macro_pointer - direction)->event.pressed) { + macro_pointer -= direction; + } + *macro_end = macro_pointer; } @@ -222,10 +234,10 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) * starts. */ switch (macro_id) { case 1: - dynamic_macro_record_end(macro_pointer, ¯o_end); + dynamic_macro_record_end(macro_buffer, macro_pointer, +1, ¯o_end); break; case 2: - dynamic_macro_record_end(macro_pointer, &r_macro_end); + dynamic_macro_record_end(r_macro_buffer, macro_pointer, -1, &r_macro_end); break; } macro_id = 0; -- cgit v1.2.3