aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/quantum.c13
-rw-r--r--quantum/quantum.h4
2 files changed, 10 insertions, 7 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 76a48cc77..2053a1a5f 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -149,18 +149,21 @@ void reset_keyboard(void) {
149} 149}
150 150
151/* Convert record into usable keycode via the contained event. */ 151/* Convert record into usable keycode via the contained event. */
152uint16_t get_record_keycode(keyrecord_t *record) { return get_event_keycode(record->event); } 152uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache) { return get_event_keycode(record->event, update_layer_cache); }
153 153
154/* Convert event into usable keycode. Checks the layer cache to ensure that it 154/* Convert event into usable keycode. Checks the layer cache to ensure that it
155 * retains the correct keycode after a layer change, if the key is still pressed. 155 * retains the correct keycode after a layer change, if the key is still pressed.
156 * "update_layer_cache" is to ensure that it only updates the layer cache when
157 * appropriate, otherwise, it will update it and cause layer tap (and other keys)
158 * from triggering properly.
156 */ 159 */
157uint16_t get_event_keycode(keyevent_t event) { 160uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache) {
158#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) 161#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE)
159 /* TODO: Use store_or_get_action() or a similar function. */ 162 /* TODO: Use store_or_get_action() or a similar function. */
160 if (!disable_action_cache) { 163 if (!disable_action_cache) {
161 uint8_t layer; 164 uint8_t layer;
162 165
163 if (event.pressed) { 166 if (event.pressed && update_layer_cache) {
164 layer = layer_switch_get_layer(event.key); 167 layer = layer_switch_get_layer(event.key);
165 update_source_layers_cache(event.key, layer); 168 update_source_layers_cache(event.key, layer);
166 } else { 169 } else {
@@ -174,7 +177,7 @@ uint16_t get_event_keycode(keyevent_t event) {
174 177
175/* Get keycode, and then call keyboard function */ 178/* Get keycode, and then call keyboard function */
176void post_process_record_quantum(keyrecord_t *record) { 179void post_process_record_quantum(keyrecord_t *record) {
177 uint16_t keycode = get_record_keycode(record); 180 uint16_t keycode = get_record_keycode(record, false);
178 post_process_record_kb(keycode, record); 181 post_process_record_kb(keycode, record);
179} 182}
180 183
@@ -182,7 +185,7 @@ void post_process_record_quantum(keyrecord_t *record) {
182 then processes internal quantum keycodes, and then processes 185 then processes internal quantum keycodes, and then processes
183 ACTIONs. */ 186 ACTIONs. */
184bool process_record_quantum(keyrecord_t *record) { 187bool process_record_quantum(keyrecord_t *record) {
185 uint16_t keycode = get_record_keycode(record); 188 uint16_t keycode = get_record_keycode(record, true);
186 189
187 // This is how you use actions here 190 // This is how you use actions here
188 // if (keycode == KC_LEAD) { 191 // if (keycode == KC_LEAD) {
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 4b94ebcc0..45f44f49a 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -252,8 +252,8 @@ void matrix_init_kb(void);
252void matrix_scan_kb(void); 252void matrix_scan_kb(void);
253void matrix_init_user(void); 253void matrix_init_user(void);
254void matrix_scan_user(void); 254void matrix_scan_user(void);
255uint16_t get_record_keycode(keyrecord_t *record); 255uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache);
256uint16_t get_event_keycode(keyevent_t event); 256uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache);
257bool process_action_kb(keyrecord_t *record); 257bool process_action_kb(keyrecord_t *record);
258bool process_record_kb(uint16_t keycode, keyrecord_t *record); 258bool process_record_kb(uint16_t keycode, keyrecord_t *record);
259bool process_record_user(uint16_t keycode, keyrecord_t *record); 259bool process_record_user(uint16_t keycode, keyrecord_t *record);