diff options
| author | Joel Challis <git@zvecr.com> | 2024-11-21 13:02:49 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-21 13:02:49 +0000 |
| commit | 968a611476c7add787f737be9521d2968d1f4451 (patch) | |
| tree | 57038a01ca75e2a33870696a84665d452ce6cc98 /quantum/process_keycode | |
| parent | 65a8a5ff69289a5cb8fce6555b774573e4452a79 (diff) | |
Review fixes for layer lock feature (#24627)
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_layer_lock.c | 17 | ||||
| -rw-r--r-- | quantum/process_keycode/process_layer_lock.h | 48 |
2 files changed, 2 insertions, 63 deletions
diff --git a/quantum/process_keycode/process_layer_lock.c b/quantum/process_keycode/process_layer_lock.c index 1e36d8844e..6946d3c886 100644 --- a/quantum/process_keycode/process_layer_lock.c +++ b/quantum/process_keycode/process_layer_lock.c | |||
| @@ -12,14 +12,6 @@ | |||
| 12 | // See the License for the specific language governing permissions and | 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. | 13 | // limitations under the License. |
| 14 | 14 | ||
| 15 | /** | ||
| 16 | * @file layer_lock.c | ||
| 17 | * @brief Layer Lock implementation | ||
| 18 | * | ||
| 19 | * For full documentation, see | ||
| 20 | * <https://getreuer.info/posts/keyboards/layer-lock> | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include "layer_lock.h" | 15 | #include "layer_lock.h" |
| 24 | #include "process_layer_lock.h" | 16 | #include "process_layer_lock.h" |
| 25 | #include "quantum_keycodes.h" | 17 | #include "quantum_keycodes.h" |
| @@ -27,12 +19,9 @@ | |||
| 27 | 19 | ||
| 28 | // The current lock state. The kth bit is on if layer k is locked. | 20 | // The current lock state. The kth bit is on if layer k is locked. |
| 29 | extern layer_state_t locked_layers; | 21 | extern layer_state_t locked_layers; |
| 30 | #if defined(LAYER_LOCK_IDLE_TIMEOUT) && LAYER_LOCK_IDLE_TIMEOUT > 0 | ||
| 31 | extern uint32_t layer_lock_timer; | ||
| 32 | #endif | ||
| 33 | 22 | ||
| 34 | // Handles an event on an `MO` or `TT` layer switch key. | 23 | // Handles an event on an `MO` or `TT` layer switch key. |
| 35 | static bool handle_mo_or_tt(uint8_t layer, keyrecord_t* record) { | 24 | static inline bool handle_mo_or_tt(uint8_t layer, keyrecord_t* record) { |
| 36 | if (is_layer_locked(layer)) { | 25 | if (is_layer_locked(layer)) { |
| 37 | if (record->event.pressed) { // On press, unlock the layer. | 26 | if (record->event.pressed) { // On press, unlock the layer. |
| 38 | layer_lock_invert(layer); | 27 | layer_lock_invert(layer); |
| @@ -44,9 +33,7 @@ static bool handle_mo_or_tt(uint8_t layer, keyrecord_t* record) { | |||
| 44 | 33 | ||
| 45 | bool process_layer_lock(uint16_t keycode, keyrecord_t* record) { | 34 | bool process_layer_lock(uint16_t keycode, keyrecord_t* record) { |
| 46 | #ifndef NO_ACTION_LAYER | 35 | #ifndef NO_ACTION_LAYER |
| 47 | # if defined(LAYER_LOCK_IDLE_TIMEOUT) && LAYER_LOCK_IDLE_TIMEOUT > 0 | 36 | layer_lock_activity_trigger(); |
| 48 | layer_lock_timer = timer_read32(); | ||
| 49 | # endif // LAYER_LOCK_IDLE_TIMEOUT > 0 | ||
| 50 | 37 | ||
| 51 | // The intention is that locked layers remain on. If something outside of | 38 | // The intention is that locked layers remain on. If something outside of |
| 52 | // this feature turned any locked layers off, unlock them. | 39 | // this feature turned any locked layers off, unlock them. |
diff --git a/quantum/process_keycode/process_layer_lock.h b/quantum/process_keycode/process_layer_lock.h index b54c0f6f10..6795110029 100644 --- a/quantum/process_keycode/process_layer_lock.h +++ b/quantum/process_keycode/process_layer_lock.h | |||
| @@ -12,54 +12,6 @@ | |||
| 12 | // See the License for the specific language governing permissions and | 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. | 13 | // limitations under the License. |
| 14 | 14 | ||
| 15 | /** | ||
| 16 | * @file layer_lock.h | ||
| 17 | * @brief Layer Lock, a key to stay in the current layer. | ||
| 18 | * | ||
| 19 | * Overview | ||
| 20 | * -------- | ||
| 21 | * | ||
| 22 | * Layers are often accessed by holding a button, e.g. with a momentary layer | ||
| 23 | * switch `MO(layer)` or layer tap `LT(layer, key)` key. But you may sometimes | ||
| 24 | * want to "lock" or "toggle" the layer so that it stays on without having to | ||
| 25 | * hold down a button. One way to do that is with a tap-toggle `TT` layer key, | ||
| 26 | * but here is an alternative. | ||
| 27 | * | ||
| 28 | * This library implements a "Layer Lock key". When tapped, it "locks" the | ||
| 29 | * highest layer to stay active, assuming the layer was activated by one of the | ||
| 30 | * following keys: | ||
| 31 | * | ||
| 32 | * * `MO(layer)` momentary layer switch | ||
| 33 | * * `LT(layer, key)` layer tap | ||
| 34 | * * `OSL(layer)` one-shot layer | ||
| 35 | * * `TT(layer)` layer tap toggle | ||
| 36 | * * `LM(layer, mod)` layer-mod key (the layer is locked, but not the mods) | ||
| 37 | * | ||
| 38 | * Tapping the Layer Lock key again unlocks and turns off the layer. | ||
| 39 | * | ||
| 40 | * @note When a layer is "locked", other layer keys such as `TO(layer)` or | ||
| 41 | * manually calling `layer_off(layer)` will override and unlock the layer. | ||
| 42 | * | ||
| 43 | * Configuration | ||
| 44 | * ------------- | ||
| 45 | * | ||
| 46 | * Optionally, a timeout may be defined so that Layer Lock disables | ||
| 47 | * automatically if not keys are pressed for `LAYER_LOCK_IDLE_TIMEOUT` | ||
| 48 | * milliseconds. Define `LAYER_LOCK_IDLE_TIMEOUT` in your config.h, for instance | ||
| 49 | * | ||
| 50 | * #define LAYER_LOCK_IDLE_TIMEOUT 60000 // Turn off after 60 seconds. | ||
| 51 | * | ||
| 52 | * and call `layer_lock_task()` from your `matrix_scan_user()` in keymap.c: | ||
| 53 | * | ||
| 54 | * void matrix_scan_user(void) { | ||
| 55 | * layer_lock_task(); | ||
| 56 | * // Other tasks... | ||
| 57 | * } | ||
| 58 | * | ||
| 59 | * For full documentation, see | ||
| 60 | * <https://getreuer.info/posts/keyboards/layer-lock> | ||
| 61 | */ | ||
| 62 | |||
| 63 | #pragma once | 15 | #pragma once |
| 64 | 16 | ||
| 65 | #include <stdint.h> | 17 | #include <stdint.h> |
