diff options
author | Drashna Jaelre <drashna@live.com> | 2019-07-16 01:37:19 -0700 |
---|---|---|
committer | Florian Didron <fdidron@users.noreply.github.com> | 2019-07-19 10:25:00 +0900 |
commit | ce1b51be8bab049f8f53ce381889357b2c615696 (patch) | |
tree | 7c3efefef3246d4dcc9bfaf932cb6bf4990e1c4d /quantum/process_keycode/process_combo.c | |
parent | 90853e60bbb0ffe3eb391ee9aadb8d9d0ddbc1a8 (diff) |
Allow Combo feature to be enabled/disabled live (#6318)
* Add ability to enable/disable combos
* Update documentation for Combo feature
* Change keycodes for appeasement
* Simplify combo_toggle function
* Update names
* Update combo docs to use tables
Diffstat (limited to 'quantum/process_keycode/process_combo.c')
-rw-r--r-- | quantum/process_keycode/process_combo.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index 2c6c9d0d5f..d3c3b1673c 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c @@ -28,6 +28,7 @@ static uint16_t timer = 0; static uint8_t current_combo_index = 0; static bool drop_buffer = false; static bool is_active = false; +static bool b_combo_enable = true; // defaults to enabled static uint8_t buffer_size = 0; #ifdef COMBO_ALLOW_ACTION_KEYS @@ -128,6 +129,23 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) { drop_buffer = false; bool no_combo_keys_pressed = true; + if (keycode == CMB_ON && record->event.pressed) { + combo_enable(); + return true; + } + + if (keycode == CMB_OFF && record->event.pressed) { + combo_disable(); + return true; + } + + if (keycode == CMB_TOG && record->event.pressed) { + combo_toggle(); + return true; + } + + if (!is_combo_enabled()) { return true; } + for (current_combo_index = 0; current_combo_index < COMBO_COUNT; ++current_combo_index) { combo_t *combo = &key_combos[current_combo_index]; @@ -166,7 +184,7 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) { } void matrix_scan_combo(void) { - if (is_active && timer && timer_elapsed(timer) > COMBO_TERM) { + if (b_combo_enable && is_active && timer && timer_elapsed(timer) > COMBO_TERM) { /* This disables the combo, meaning key events for this * combo will be handled by the next processors in the chain @@ -175,3 +193,26 @@ void matrix_scan_combo(void) { dump_key_buffer(true); } } + +void combo_enable(void) { + b_combo_enable = true; +} + +void combo_disable(void) { + b_combo_enable = is_active = false; + timer = 0; + dump_key_buffer(true); + +} + +void combo_toggle(void) { + if (b_combo_enable) { + combo_disable(); + } else { + combo_enable(); + } +} + +bool is_combo_enabled(void) { + return b_combo_enable; +} |