Fix macro timeouts

master
Raheman Vaiya 4 years ago
parent 8fc5eb95ed
commit c1ba867e6f
  1. 12
      src/keyboard.c
  2. 3
      src/keyboard.h

@ -607,12 +607,12 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
macro = &kbd->config.macros[d->args[2].idx]; macro = &kbd->config.macros[d->args[2].idx];
timeout = d->args[0].timeout; timeout = d->args[0].timeout;
kbd->macro_repeat_timeout = d->args[1].timeout; kbd->macro_repeat_interval = d->args[1].timeout;
} else { } else {
macro = &kbd->config.macros[d->args[0].idx]; macro = &kbd->config.macros[d->args[0].idx];
timeout = kbd->config.macro_timeout; timeout = kbd->config.macro_timeout;
kbd->macro_repeat_timeout = kbd->config.macro_repeat_timeout; kbd->macro_repeat_interval = kbd->config.macro_repeat_timeout;
} }
clear_oneshot(kbd); clear_oneshot(kbd);
@ -620,6 +620,9 @@ static long process_descriptor(struct keyboard *kbd, uint8_t code,
execute_macro(kbd, dl, macro); execute_macro(kbd, dl, macro);
kbd->active_macro = macro; kbd->active_macro = macro;
kbd->active_macro_layer = dl; kbd->active_macro_layer = dl;
kbd->macro_timeout = time + kbd->config.macro_timeout;
schedule_timeout(kbd, kbd->macro_timeout);
} }
break; break;
@ -964,9 +967,10 @@ static long process_event(struct keyboard *kbd, uint8_t code, int pressed, long
if (code) { if (code) {
kbd->active_macro = NULL; kbd->active_macro = NULL;
update_mods(kbd, -1, 0); update_mods(kbd, -1, 0);
} else { } else if (time >= kbd->macro_timeout) {
execute_macro(kbd, kbd->active_macro_layer, kbd->active_macro); execute_macro(kbd, kbd->active_macro_layer, kbd->active_macro);
schedule_timeout(kbd, time+kbd->macro_repeat_timeout); kbd->macro_timeout = time+kbd->macro_repeat_interval;
schedule_timeout(kbd, kbd->macro_timeout);
} }
} }

@ -47,8 +47,9 @@ struct keyboard {
struct macro *active_macro; struct macro *active_macro;
int active_macro_layer; int active_macro_layer;
long macro_timeout;
long macro_repeat_timeout; long macro_repeat_interval;
long timeouts[64]; long timeouts[64];
size_t nr_timeouts; size_t nr_timeouts;

Loading…
Cancel
Save