diff options
Diffstat (limited to 'quantum/quantum.c')
| -rw-r--r-- | quantum/quantum.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index 8c928441c..48c338fc8 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -225,27 +225,39 @@ static uint16_t scs_timer[2] = {0, 0}; | |||
| 225 | */ | 225 | */ |
| 226 | static bool grave_esc_was_shifted = false; | 226 | static bool grave_esc_was_shifted = false; |
| 227 | 227 | ||
| 228 | bool process_record_quantum(keyrecord_t *record) { | 228 | /* Convert record into usable keycode via the contained event. */ |
| 229 | uint16_t get_record_keycode(keyrecord_t *record) { | ||
| 230 | return get_event_keycode(record->event); | ||
| 231 | } | ||
| 229 | 232 | ||
| 230 | /* This gets the keycode from the key pressed */ | 233 | |
| 231 | keypos_t key = record->event.key; | 234 | /* Convert event into usable keycode. Checks the layer cache to ensure that it |
| 232 | uint16_t keycode; | 235 | * retains the correct keycode after a layer change, if the key is still pressed. |
| 236 | */ | ||
| 237 | uint16_t get_event_keycode(keyevent_t event) { | ||
| 233 | 238 | ||
| 234 | #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) | 239 | #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) |
| 235 | /* TODO: Use store_or_get_action() or a similar function. */ | 240 | /* TODO: Use store_or_get_action() or a similar function. */ |
| 236 | if (!disable_action_cache) { | 241 | if (!disable_action_cache) { |
| 237 | uint8_t layer; | 242 | uint8_t layer; |
| 238 | 243 | ||
| 239 | if (record->event.pressed) { | 244 | if (event.pressed) { |
| 240 | layer = layer_switch_get_layer(key); | 245 | layer = layer_switch_get_layer(event.key); |
| 241 | update_source_layers_cache(key, layer); | 246 | update_source_layers_cache(event.key, layer); |
| 242 | } else { | 247 | } else { |
| 243 | layer = read_source_layers_cache(key); | 248 | layer = read_source_layers_cache(event.key); |
| 244 | } | 249 | } |
| 245 | keycode = keymap_key_to_keycode(layer, key); | 250 | return keymap_key_to_keycode(layer, event.key); |
| 246 | } else | 251 | } else |
| 247 | #endif | 252 | #endif |
| 248 | keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key); | 253 | return keymap_key_to_keycode(layer_switch_get_layer(event.key), event.key); |
| 254 | } | ||
| 255 | |||
| 256 | /* Main keycode processing function. Hands off handling to other functions, | ||
| 257 | * then processes internal Quantum keycodes, then processes ACTIONs. | ||
| 258 | */ | ||
| 259 | bool process_record_quantum(keyrecord_t *record) { | ||
| 260 | uint16_t keycode = get_record_keycode(record); | ||
| 249 | 261 | ||
| 250 | // This is how you use actions here | 262 | // This is how you use actions here |
| 251 | // if (keycode == KC_LEAD) { | 263 | // if (keycode == KC_LEAD) { |
