]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
dynamic_macro.h: Do not save the keys being held when stopping the recording
authorWojciech Siewierski <wojciech.siewierski@onet.pl>
Wed, 3 May 2017 23:37:46 +0000 (01:37 +0200)
committerWojciech Siewierski <wojciech.siewierski@onet.pl>
Wed, 3 May 2017 23:42:09 +0000 (01:42 +0200)
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

index 9e7845c9928563be754a16101e0f353c632a5d9d..c4017aec97962045638032468550a3cd9d383b56 100644 (file)
@@ -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, &macro_end);
+                    dynamic_macro_record_end(macro_buffer, macro_pointer, +1, &macro_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;