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;
}
# 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;
'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;