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
+1 -2
View File
@@ -20,8 +20,7 @@ void updateLayerStates(void)
if (action.type == KeyActionType_SwitchLayer) { if (action.type == KeyActionType_SwitchLayer) {
if (action.switchLayer.mode != SwitchLayerMode_Toggle) { if (action.switchLayer.mode != SwitchLayerMode_Toggle) {
heldLayers[action.switchLayer.layer] = true; heldLayers[action.switchLayer.layer] = true;
} } else if (!keyState->previous) {
if (action.switchLayer.mode != SwitchLayerMode_Hold && !keyState->previous && keyState->current) {
toggledLayers[action.switchLayer.layer] = true; toggledLayers[action.switchLayer.layer] = true;
} }
} }
+7
View File
@@ -200,6 +200,7 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action)
static key_state_t *doubleTapSwitchLayerKey; static key_state_t *doubleTapSwitchLayerKey;
static uint32_t doubleTapSwitchLayerStartTime; static uint32_t doubleTapSwitchLayerStartTime;
static uint32_t doubleTapSwitchLayerTriggerTime; static uint32_t doubleTapSwitchLayerTriggerTime;
static bool IsLayerDoubleTapToggled;
if (keyState->suppressed) { if (keyState->suppressed) {
return; return;
@@ -209,6 +210,11 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action)
doubleTapSwitchLayerKey = NULL; doubleTapSwitchLayerKey = NULL;
} }
if (!keyState->previous && IsLayerDoubleTapToggled && ToggledLayer == action->switchLayer.layer) {
ToggledLayer = LayerId_Base;
IsLayerDoubleTapToggled = false;
}
switch (action->type) { switch (action->type) {
case KeyActionType_Keystroke: case KeyActionType_Keystroke:
ActiveUsbBasicKeyboardReport->modifiers |= action->keystroke.modifiers; 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 (!keyState->previous && previousLayer == LayerId_Base && action->switchLayer.mode == SwitchLayerMode_HoldAndDoubleTapToggle) {
if (doubleTapSwitchLayerKey && Timer_GetElapsedTimeAndSetCurrent(&doubleTapSwitchLayerStartTime) < DoubleTapSwitchLayerTimeout) { if (doubleTapSwitchLayerKey && Timer_GetElapsedTimeAndSetCurrent(&doubleTapSwitchLayerStartTime) < DoubleTapSwitchLayerTimeout) {
ToggledLayer = action->switchLayer.layer; ToggledLayer = action->switchLayer.layer;
IsLayerDoubleTapToggled = true;
doubleTapSwitchLayerTriggerTime = Timer_GetCurrentTime(); doubleTapSwitchLayerTriggerTime = Timer_GetCurrentTime();
} else { } else {
doubleTapSwitchLayerKey = keyState; doubleTapSwitchLayerKey = keyState;