Browse Source

Added cancel_key_lock function (#15321)

wheredoesyourmindgo 3 years ago
parent
commit
7f67504993

+ 2 - 1
docs/feature_key_lock.md

@@ -19,4 +19,5 @@ First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Th
 Key Lock is only able to hold standard action keys and [One Shot modifier](one_shot_keys.md) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
 This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
 
-Switching layers will not cancel the Key Lock.
+Switching layers will not cancel the Key Lock. The Key Lock can be cancelled by calling the `cancel_key_lock()` function.
+

+ 5 - 0
quantum/process_keycode/process_key_lock.c

@@ -56,6 +56,11 @@ static inline uint16_t translate_keycode(uint16_t keycode) {
     }
 }
 
+void cancel_key_lock(void) {
+    watching = false;
+    UNSET_KEY_STATE(0x0);
+}
+
 bool process_key_lock(uint16_t *keycode, keyrecord_t *record) {
     // We start by categorizing the keypress event. In the event of a down
     // event, there are several possibilities:

+ 1 - 0
quantum/process_keycode/process_key_lock.h

@@ -18,4 +18,5 @@
 
 #include "quantum.h"
 
+void cancel_key_lock(void);
 bool process_key_lock(uint16_t *keycode, keyrecord_t *record);