Extract handleSwitchLayerAction()
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user