diff --git a/quantum/quantum.c b/quantum/quantum.c index 8190050793..771dafac73 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -179,12 +179,14 @@ void post_process_record_quantum(keyrecord_t *record) { post_process_record_kb(keycode, record); } +bool process_record_quantum(keyrecord_t *record) { + uint16_t keycode = get_record_keycode(record, true); + return process_record_quantum_helper(keycode, record); +} /* Core keycode function, hands off handling to other functions, then processes internal quantum keycodes, and then processes ACTIONs. */ -bool process_record_quantum(keyrecord_t *record) { - uint16_t keycode = get_record_keycode(record, true); - +bool process_record_quantum_helper(uint16_t keycode, keyrecord_t *record) { // This is how you use actions here // if (keycode == KC_LEAD) { // action_t action; diff --git a/quantum/quantum.h b/quantum/quantum.h index b1600dd724..333dfa17b7 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -257,6 +257,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record); bool process_record_user(uint16_t keycode, keyrecord_t *record); void post_process_record_kb(uint16_t keycode, keyrecord_t *record); void post_process_record_user(uint16_t keycode, keyrecord_t *record); +bool process_record_quantum_helper(uint16_t keycode, keyrecord_t *record); #ifndef BOOTMAGIC_LITE_COLUMN # define BOOTMAGIC_LITE_COLUMN 0 diff --git a/quantum/vial.c b/quantum/vial.c index 8009a6613c..85cfe6daf6 100644 --- a/quantum/vial.c +++ b/quantum/vial.c @@ -176,15 +176,23 @@ static void exec_keycode(uint16_t keycode) { #else g_vial_magic_keycode_override = keycode; - action_exec((keyevent_t){ - .key = (keypos_t){.row = VIAL_ENCODER_MATRIX_MAGIC, .col = VIAL_ENCODER_MATRIX_MAGIC}, .pressed = 1, .time = (timer_read() | 1) /* time should not be 0 */ - }); + keyrecord_t record = {.event = (keyevent_t){.key = { VIAL_ENCODER_MATRIX_MAGIC, VIAL_ENCODER_MATRIX_MAGIC }, .pressed = true, .time = (timer_read() | 1)}}; + + if (keycode <= QK_MODS_MAX) + register_code16(keycode); + else + process_record_quantum_helper(keycode, &record); + #if VIAL_ENCODER_KEYCODE_DELAY > 0 wait_ms(VIAL_ENCODER_KEYCODE_DELAY); #endif - action_exec((keyevent_t){ - .key = (keypos_t){.row = VIAL_ENCODER_MATRIX_MAGIC, .col = VIAL_ENCODER_MATRIX_MAGIC}, .pressed = 0, .time = (timer_read() | 1) /* time should not be 0 */ - }); + record.event.time = timer_read() | 1; + record.event.pressed = false; + + if (keycode <= QK_MODS_MAX) + unregister_code16(keycode); + else + process_record_quantum_helper(keycode, &record); #endif }