Extract handleSwitchLayerAction()

This commit is contained in:
László Monda
2018-06-07 14:50:49 +02:00
parent b0d85795f4
commit 462595ef03

View File

@@ -191,21 +191,14 @@ static void processMouseActions()
} }
static layer_id_t previousLayer = LayerId_Base; static layer_id_t previousLayer = LayerId_Base;
static uint8_t basicScancodeIndex = 0;
static uint8_t mediaScancodeIndex = 0;
static uint8_t systemScancodeIndex = 0;
static void applyKeyAction(key_state_t *keyState, key_action_t *action) static void handleSwitchLayerAction(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; static bool IsLayerDoubleTapToggled;
if (keyState->suppressed) {
return;
}
if (doubleTapSwitchLayerKey && doubleTapSwitchLayerKey != keyState && !keyState->previous) { if (doubleTapSwitchLayerKey && doubleTapSwitchLayerKey != keyState && !keyState->previous) {
doubleTapSwitchLayerKey = NULL; doubleTapSwitchLayerKey = NULL;
} }
@@ -215,6 +208,40 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action)
IsLayerDoubleTapToggled = false; IsLayerDoubleTapToggled = false;
} }
if (action->type != KeyActionType_SwitchLayer) {
return;
}
if (keyState->previous && doubleTapSwitchLayerKey == keyState &&
Timer_GetElapsedTime(&doubleTapSwitchLayerTriggerTime) > DoubleTapSwitchLayerReleaseTimeout)
{
ToggledLayer = LayerId_Base;
}
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;
}
doubleTapSwitchLayerStartTime = Timer_GetCurrentTime();
}
}
static uint8_t basicScancodeIndex = 0;
static uint8_t mediaScancodeIndex = 0;
static uint8_t systemScancodeIndex = 0;
static void applyKeyAction(key_state_t *keyState, key_action_t *action)
{
if (keyState->suppressed) {
return;
}
handleSwitchLayerAction(keyState, action);
switch (action->type) { switch (action->type) {
case KeyActionType_Keystroke: case KeyActionType_Keystroke:
ActiveUsbBasicKeyboardReport->modifiers |= action->keystroke.modifiers; ActiveUsbBasicKeyboardReport->modifiers |= action->keystroke.modifiers;
@@ -244,22 +271,7 @@ static void applyKeyAction(key_state_t *keyState, key_action_t *action)
activeMouseStates[action->mouseAction] = true; activeMouseStates[action->mouseAction] = true;
break; break;
case KeyActionType_SwitchLayer: case KeyActionType_SwitchLayer:
if (keyState->previous && doubleTapSwitchLayerKey == keyState && // Handled by handleSwitchLayerAction()
Timer_GetElapsedTime(&doubleTapSwitchLayerTriggerTime) > DoubleTapSwitchLayerReleaseTimeout)
{
ToggledLayer = LayerId_Base;
}
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;
}
doubleTapSwitchLayerStartTime = Timer_GetCurrentTime();
}
break; break;
case KeyActionType_SwitchKeymap: case KeyActionType_SwitchKeymap:
if (!keyState->previous) { if (!keyState->previous) {