if (IS_NOEVENT(event)) { return; }
- action_t action = layer_switch_get_action(event.key);
+ action_t action = layer_switch_get_action(event);
dprint("ACTION: "); debug_action(action);
#ifndef NO_ACTION_LAYER
dprint(" layer_state: "); layer_debug();
{
uint8_t mods = (action.kind.id == ACT_LMODS_TAP) ? action.key.mods :
action.key.mods<<4;
- switch (action.layer_tap.code) {
+ switch (action.key.code) {
#ifndef NO_ACTION_ONESHOT
case MODS_ONESHOT:
// Oneshot modifier
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
switch (action.layer_tap.code) {
- case 0xe0 ... 0xef:
- /* layer On/Off with modifiers(left only) */
+ case 0xc0 ... 0xdf:
+ /* layer On/Off with modifiers */
if (event.pressed) {
layer_on(action.layer_tap.val);
- register_mods(action.layer_tap.code & 0x0f);
+ register_mods((action.layer_tap.code & 0x10) ?
+ (action.layer_tap.code & 0x0f) << 4 :
+ (action.layer_tap.code & 0x0f));
} else {
layer_off(action.layer_tap.val);
- unregister_mods(action.layer_tap.code & 0x0f);
+ unregister_mods((action.layer_tap.code & 0x10) ?
+ (action.layer_tap.code & 0x0f) << 4 :
+ (action.layer_tap.code & 0x0f));
}
break;
case OP_TAP_TOGGLE:
#endif
}
-bool is_tap_key(keypos_t key)
+bool is_tap_key(keyevent_t event)
{
- action_t action = layer_switch_get_action(key);
+ action_t action = layer_switch_get_action(event);
switch (action.kind.id) {
case ACT_LMODS_TAP:
case ACT_RMODS_TAP:
+ switch (action.key.code) {
+ case MODS_ONESHOT:
+ case MODS_TAP_TOGGLE:
+ case KC_A ... KC_EXSEL: // tap key
+ case KC_LCTRL ... KC_RGUI: // tap key
+ return true;
+ }
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
switch (action.layer_tap.code) {
- case 0x00 ... 0xdf:
+ case 0xc0 ... 0xdf: // with modifiers
+ return false;
+ case KC_A ... KC_EXSEL: // tap key
+ case KC_LCTRL ... KC_RGUI: // tap key
case OP_TAP_TOGGLE:
return true;
}