fix(behaviors): Fix bug in nested sticky keys
If multiple sticky keys with quick release were nested, only the first one was properly released. This fix makes sure all of them are released properly. Fixes https://github.com/zmkfirmware/zmk/issues/1149
This commit is contained in:
parent
459972fddd
commit
ad5a12a7bc
4 changed files with 85 additions and 3 deletions
1
app/tests/sticky-keys/10-sl-sl-kp/events.patterns
Normal file
1
app/tests/sticky-keys/10-sl-sl-kp/events.patterns
Normal file
|
|
@ -0,0 +1 @@
|
|||
s/.*hid_listener_keycode_//p
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00
|
||||
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||
pressed: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x1e implicit_mods 0x00 explicit_mods 0x00
|
||||
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||
65
app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap
Normal file
65
app/tests/sticky-keys/10-sl-sl-kp/native_posix.keymap
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
#include <dt-bindings/zmk/keys.h>
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/kscan-mock.h>
|
||||
|
||||
/*
|
||||
sticky layers should quick-release.
|
||||
Thus, the second keypress should be on the default layer, not on the lower_layer.
|
||||
*/
|
||||
|
||||
/ {
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
label ="Default keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&sl 1 &kp A
|
||||
&none &none>;
|
||||
};
|
||||
|
||||
layer_1 {
|
||||
bindings = <
|
||||
&sl 2 &none
|
||||
&none &none>;
|
||||
};
|
||||
|
||||
layer_2 {
|
||||
bindings = <
|
||||
&none &kp NUM_1
|
||||
&none &none>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&kscan {
|
||||
events = <
|
||||
/* press sl 1 */
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_RELEASE(0,0,10)
|
||||
/* press sl 2 */
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_RELEASE(0,0,10)
|
||||
/* press 1 */
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_RELEASE(0,1,10)
|
||||
/* press A */
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_RELEASE(0,1,10)
|
||||
|
||||
/* repeat test to check if cleanup is done correctly */
|
||||
/* press sl 1 */
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_RELEASE(0,0,10)
|
||||
/* press sl 2 */
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_RELEASE(0,0,10)
|
||||
/* press 1 */
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_RELEASE(0,1,10)
|
||||
/* press A */
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_RELEASE(0,1,10)
|
||||
|
||||
>;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue