Make the double tap to lock feature behave well.

This commit is contained in:
László Monda
2018-06-07 14:42:23 +02:00
parent 2c91ef51db
commit b0d85795f4
2 changed files with 8 additions and 2 deletions

View File

@@ -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;
}
}

View File

@@ -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;