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.c51
1 files changed, 31 insertions, 20 deletions
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index b32fc1db6..57fccdc7e 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -35,31 +35,42 @@ 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) {
54 if (leading) {
55 if (timer_elapsed(leader_time) < LEADER_TIMEOUT) {
56#ifndef LEADER_KEY_STRICT_KEY_PROCESSING
57 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
58 keycode = keycode & 0xFF;
59 }
60#endif // LEADER_KEY_STRICT_KEY_PROCESSING
61 leader_sequence[leader_sequence_size] = keycode;
62 leader_sequence_size++;
41#ifdef LEADER_PER_KEY_TIMING 63#ifdef LEADER_PER_KEY_TIMING
42 leader_time = timer_read(); 64 leader_time = timer_read();
43#endif 65#endif
44 if (!leading && keycode == KC_LEAD) { 66 return false;
45 leader_start(); 67 }
46 leading = true; 68 } else {
47#ifndef LEADER_PER_KEY_TIMING 69 if (keycode == KC_LEAD) {
48 leader_time = timer_read(); 70 qk_leader_start();
49#endif 71 return false;
50 leader_time = timer_read(); 72 }
51 leader_sequence_size = 0; 73 break;
52 leader_sequence[0] = 0;
53 leader_sequence[1] = 0;
54 leader_sequence[2] = 0;
55 leader_sequence[3] = 0;
56 leader_sequence[4] = 0;
57 return false;
58 }
59 if (leading && timer_elapsed(leader_time) < LEADER_TIMEOUT) {
60 leader_sequence[leader_sequence_size] = keycode;
61 leader_sequence_size++;
62 return false;
63 } 74 }
64 } 75 }
65 return true; 76 return true;