diff options
| -rw-r--r-- | quantum/process_keycode/process_combo.c | 4 | ||||
| -rw-r--r-- | tests/combo/test_combo.cpp | 15 | ||||
| -rw-r--r-- | tests/combo/test_combos.c | 6 |
3 files changed, 23 insertions, 2 deletions
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c index c99a66a74b..b02b7f5433 100644 --- a/quantum/process_keycode/process_combo.c +++ b/quantum/process_keycode/process_combo.c | |||
| @@ -347,6 +347,10 @@ void apply_combo(uint16_t combo_index, combo_t *combo) { | |||
| 347 | qrecord->combo_index = combo_index; | 347 | qrecord->combo_index = combo_index; |
| 348 | ACTIVATE_COMBO(combo); | 348 | ACTIVATE_COMBO(combo); |
| 349 | 349 | ||
| 350 | if (key_count == 1) { | ||
| 351 | release_combo(combo_index, combo); | ||
| 352 | } | ||
| 353 | |||
| 350 | break; | 354 | break; |
| 351 | } else { | 355 | } else { |
| 352 | // key was part of the combo but not the last one, "disable" it | 356 | // key was part of the combo but not the last one, "disable" it |
diff --git a/tests/combo/test_combo.cpp b/tests/combo/test_combo.cpp index d78ec55990..cc6425a94c 100644 --- a/tests/combo/test_combo.cpp +++ b/tests/combo/test_combo.cpp | |||
| @@ -54,3 +54,18 @@ TEST_F(Combo, combo_osmshift_tapped) { | |||
| 54 | tap_key(key_i); | 54 | tap_key(key_i); |
| 55 | VERIFY_AND_CLEAR(driver); | 55 | VERIFY_AND_CLEAR(driver); |
| 56 | } | 56 | } |
| 57 | |||
| 58 | TEST_F(Combo, combo_single_key_twice) { | ||
| 59 | TestDriver driver; | ||
| 60 | KeymapKey key_a(0, 0, 1, KC_A); | ||
| 61 | set_keymap({key_a}); | ||
| 62 | |||
| 63 | EXPECT_REPORT(driver, (KC_B)); | ||
| 64 | tap_combo({key_a}); | ||
| 65 | VERIFY_AND_CLEAR(driver); | ||
| 66 | |||
| 67 | EXPECT_REPORT(driver, (KC_B)); | ||
| 68 | EXPECT_EMPTY_REPORT(driver); | ||
| 69 | tap_combo({key_a}); | ||
| 70 | VERIFY_AND_CLEAR(driver); | ||
| 71 | } | ||
diff --git a/tests/combo/test_combos.c b/tests/combo/test_combos.c index 8dcb364c6e..9a0465a9b4 100644 --- a/tests/combo/test_combos.c +++ b/tests/combo/test_combos.c | |||
| @@ -4,14 +4,16 @@ | |||
| 4 | // SPDX-License-Identifier: GPL-2.0-or-later | 4 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 5 | #include "quantum.h" | 5 | #include "quantum.h" |
| 6 | 6 | ||
| 7 | enum combos { modtest, osmshift }; | 7 | enum combos { modtest, osmshift, single_key }; |
| 8 | 8 | ||
| 9 | uint16_t const modtest_combo[] = {KC_Y, KC_U, COMBO_END}; | 9 | uint16_t const modtest_combo[] = {KC_Y, KC_U, COMBO_END}; |
| 10 | uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END}; | 10 | uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END}; |
| 11 | uint16_t const single_key_combo[] = {KC_A, COMBO_END}; | ||
| 11 | 12 | ||
| 12 | // clang-format off | 13 | // clang-format off |
| 13 | combo_t key_combos[] = { | 14 | combo_t key_combos[] = { |
| 14 | [modtest] = COMBO(modtest_combo, RSFT_T(KC_SPACE)), | 15 | [modtest] = COMBO(modtest_combo, RSFT_T(KC_SPACE)), |
| 15 | [osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT)) | 16 | [osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT)), |
| 17 | [single_key] = COMBO(single_key_combo, KC_B), | ||
| 16 | }; | 18 | }; |
| 17 | // clang-format on | 19 | // clang-format on |
