From d4b8194304cdc15cdfeace2db5cec140731566f5 Mon Sep 17 00:00:00 2001 From: Raheman Vaiya Date: Sun, 1 May 2022 01:41:50 -0400 Subject: [PATCH] Preserve layer flags on reset (#200) --- src/keyboard.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index 6434791..dbf81da 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -648,13 +648,18 @@ void kbd_reset(struct keyboard *kbd) { uint8_t ad[MAX_LAYERS]; long at[MAX_LAYERS]; + uint8_t flags[MAX_LAYERS]; + size_t i; /* Preserve layer state to facilitate hotswapping (TODO: make this more robust) */ for (i = 0; i < kbd->config.layer_table.nr_layers; i++) { - ad[i] = kbd->layer_table.layers[i].active; - at[i] = kbd->layer_table.layers[i].activation_time; + struct layer *layer = &kbd->layer_table.layers[i]; + + ad[i] = layer->active; + flags[i] = layer->flags; + at[i] = layer->activation_time; } memcpy(&kbd->layer_table, @@ -662,8 +667,11 @@ void kbd_reset(struct keyboard *kbd) sizeof(kbd->layer_table)); for (i = 0; i < kbd->config.layer_table.nr_layers; i++) { - kbd->layer_table.layers[i].active = ad[i]; - kbd->layer_table.layers[i].activation_time = at[i]; + struct layer *layer = &kbd->layer_table.layers[i]; + + layer->active = ad[i]; + layer->flags = flags[i]; + layer->activation_time = at[i]; } }