diff --git a/right/src/layer.c b/right/src/layer.c index 0cc851f..9ad9541 100644 --- a/right/src/layer.c +++ b/right/src/layer.c @@ -20,8 +20,7 @@ void updateLayerStates(void) if (action.type == KeyActionType_SwitchLayer) { if (action.switchLayer.mode != SwitchLayerMode_Toggle) { heldLayers[action.switchLayer.layer] = true; - } - if (action.switchLayer.mode != SwitchLayerMode_Hold && !keyState->previous && keyState->current) { + } else if (!keyState->previous) { toggledLayers[action.switchLayer.layer] = true; } } diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 6c450dc..637ec8b 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -200,6 +200,7 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action) static key_state_t *doubleTapSwitchLayerKey; static uint32_t doubleTapSwitchLayerStartTime; static uint32_t doubleTapSwitchLayerTriggerTime; + static bool IsLayerDoubleTapToggled; if (keyState->suppressed) { return; @@ -209,6 +210,11 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action) doubleTapSwitchLayerKey = NULL; } + if (!keyState->previous && IsLayerDoubleTapToggled && ToggledLayer == action->switchLayer.layer) { + ToggledLayer = LayerId_Base; + IsLayerDoubleTapToggled = false; + } + switch (action->type) { case KeyActionType_Keystroke: ActiveUsbBasicKeyboardReport->modifiers |= action->keystroke.modifiers; @@ -247,6 +253,7 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action) if (!keyState->previous && previousLayer == LayerId_Base && action->switchLayer.mode == SwitchLayerMode_HoldAndDoubleTapToggle) { if (doubleTapSwitchLayerKey && Timer_GetElapsedTimeAndSetCurrent(&doubleTapSwitchLayerStartTime) < DoubleTapSwitchLayerTimeout) { ToggledLayer = action->switchLayer.layer; + IsLayerDoubleTapToggled = true; doubleTapSwitchLayerTriggerTime = Timer_GetCurrentTime(); } else { doubleTapSwitchLayerKey = keyState;