diff --git a/right/src/config_parser/parse_keymap.c b/right/src/config_parser/parse_keymap.c index d9a6675..b45efb5 100644 --- a/right/src/config_parser/parse_keymap.c +++ b/right/src/config_parser/parse_keymap.c @@ -48,7 +48,7 @@ static parser_error_t parseKeyStrokeAction(key_action_t *keyAction, uint8_t keyS static parser_error_t parseSwitchLayerAction(key_action_t *KeyAction, config_buffer_t *buffer) { uint8_t layer = ReadUInt8(buffer) + 1; - uint8_t mode = ReadUInt8(buffer); + switch_layer_mode_t mode = ReadUInt8(buffer); KeyAction->type = KeyActionType_SwitchLayer; KeyAction->switchLayer.layer = layer; diff --git a/right/src/layer.c b/right/src/layer.c index b012079..ca901ba 100644 --- a/right/src/layer.c +++ b/right/src/layer.c @@ -5,12 +5,12 @@ #include "keymap.h" static bool heldLayers[LAYER_COUNT]; -static switch_layer_mode_t pressedLayers[LAYER_COUNT]; +static bool toggledLayers[LAYER_COUNT]; void updateLayerStates(void) { memset(heldLayers, false, LAYER_COUNT); - memset(pressedLayers, false, LAYER_COUNT); + memset(toggledLayers, false, LAYER_COUNT); for (uint8_t slotId=0; slotIdprevious && keyState->current) { - pressedLayers[action.switchLayer.layer] = action.switchLayer.mode; + } else if (!keyState->previous && keyState->current) { + toggledLayers[action.switchLayer.layer] = action.switchLayer.mode; } } } @@ -40,11 +39,11 @@ layer_id_t GetActiveLayer() // Handle toggled layers for (layer_id_t layerId=LayerId_Mod; layerId<=LayerId_Mouse; layerId++) { - if (pressedLayers[layerId]) { + if (toggledLayers[layerId]) { if (ToggledLayer == layerId) { ToggledLayer = LayerId_Base; break; - } else if (ToggledLayer == LayerId_Base && pressedLayers[layerId] == SwitchLayerMode_Toggle) { + } else if (ToggledLayer == LayerId_Base && toggledLayers[layerId] == SwitchLayerMode_Toggle) { ToggledLayer = layerId; break; }