From 130b3ce3a9cf249e96719f8f90f2ac462112cca7 Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Sat, 17 Mar 2018 23:28:23 +0200 Subject: [PATCH] Check for B_UPON_KEYRELEASE_IGNORE_MODS with bindsyms From 548d74015c50d7fae14bfb8bb1989acde5fc22ae: > 1. press $mod, press x, release x, release $mod > 2. press $mod, press x, release $mod, release x case (2.) didn't work, now it should be fixed. --- src/bindings.c | 3 ++- testcases/t/258-keypress-release.t | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/bindings.c b/src/bindings.c index 9edc04dc..823730ff 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -236,7 +236,8 @@ static Binding *get_binding(i3_event_state_mask_t state_filtered, bool is_releas const bool mods_match = (modifiers_mask == modifiers_state); DLOG("binding_keycode->modifiers = %d, modifiers_mask = %d, modifiers_state = %d, mods_match = %s\n", binding_keycode->modifiers, modifiers_mask, modifiers_state, (mods_match ? "yes" : "no")); - if (binding_keycode->keycode == input_keycode && mods_match) { + if (binding_keycode->keycode == input_keycode && + (mods_match || (bind->release == B_UPON_KEYRELEASE_IGNORE_MODS && is_release))) { found_keycode = true; break; } diff --git a/testcases/t/258-keypress-release.t b/testcases/t/258-keypress-release.t index 8bca0d86..b92f723f 100644 --- a/testcases/t/258-keypress-release.t +++ b/testcases/t/258-keypress-release.t @@ -29,6 +29,8 @@ bindsym --release Control+Print nop Control+Print # see issue #2442 bindsym Mod1+b nop Mod1+b bindsym --release Mod1+Shift+b nop Mod1+Shift+b release + +bindsym --release Shift+x nop Shift+x EOT use i3test::XTEST; use ExtUtils::PkgConfig; @@ -85,6 +87,29 @@ is(listen_for_binding( 'Mod1+Shift+b release', 'triggered the "Mod1+Shift+b" release keybinding'); +is(listen_for_binding( + sub { + xtest_key_press(50); # Shift + xtest_key_press(53); # x + xtest_key_release(53); # x + xtest_key_release(50); # Shift + xtest_sync_with_i3; + }, + ), + 'Shift+x', + 'triggered the "Shift+x" keybinding by releasing x first'); + +is(listen_for_binding( + sub { + xtest_key_press(50); # Shift + xtest_key_press(53); # x + xtest_key_release(50); # Shift + xtest_key_release(53); # x + xtest_sync_with_i3; + }, + ), + 'Shift+x', + 'triggered the "Shift+x" keybinding by releasing Shift first'); } done_testing;