aboutsummaryrefslogtreecommitdiff
path: root/quantum/process_keycode/process_leader.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/process_keycode/process_leader.c')
-rw-r--r--quantum/process_keycode/process_leader.c49
1 files changed, 32 insertions, 17 deletions
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index c87ef115a..897e9eabf 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -14,7 +14,7 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16 16
17#ifndef DISABLE_LEADER 17#ifdef LEADER_ENABLE
18 18
19#include "process_leader.h" 19#include "process_leader.h"
20 20
@@ -35,25 +35,40 @@ uint16_t leader_time = 0;
35uint16_t leader_sequence[5] = {0, 0, 0, 0, 0}; 35uint16_t leader_sequence[5] = {0, 0, 0, 0, 0};
36uint8_t leader_sequence_size = 0; 36uint8_t leader_sequence_size = 0;
37 37
38void qk_leader_start(void) {
39 if (leading) { return; }
40 leader_start();
41 leading = true;
42 leader_time = timer_read();
43 leader_sequence_size = 0;
44 leader_sequence[0] = 0;
45 leader_sequence[1] = 0;
46 leader_sequence[2] = 0;
47 leader_sequence[3] = 0;
48 leader_sequence[4] = 0;
49}
50
38bool process_leader(uint16_t keycode, keyrecord_t *record) { 51bool process_leader(uint16_t keycode, keyrecord_t *record) {
39 // Leader key set-up 52 // Leader key set-up
40 if (record->event.pressed) { 53 if (record->event.pressed) {
41 if (!leading && keycode == KC_LEAD) { 54 if (leading) {
42 leader_start(); 55 if (timer_elapsed(leader_time) < LEADER_TIMEOUT) {
43 leading = true; 56#ifndef LEADER_KEY_STRICT_KEY_PROCESSING
44 leader_time = timer_read(); 57 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
45 leader_sequence_size = 0; 58 keycode = keycode & 0xFF;
46 leader_sequence[0] = 0; 59 }
47 leader_sequence[1] = 0; 60#endif // LEADER_KEY_STRICT_KEY_PROCESSING
48 leader_sequence[2] = 0; 61 leader_sequence[leader_sequence_size] = keycode;
49 leader_sequence[3] = 0; 62 leader_sequence_size++;
50 leader_sequence[4] = 0; 63#ifdef LEADER_PER_KEY_TIMING
51 return false; 64 leader_time = timer_read();
52 } 65#endif
53 if (leading && timer_elapsed(leader_time) < LEADER_TIMEOUT) { 66 return false;
54 leader_sequence[leader_sequence_size] = keycode; 67 }
55 leader_sequence_size++; 68 } else {
56 return false; 69 if (keycode == KC_LEAD) {
70 qk_leader_start();
71 }
57 } 72 }
58 } 73 }
59 return true; 74 return true;