diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index f74d0658d..6bbf74f73 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c @@ -163,7 +163,7 @@ static void get_active_binding(const struct sway_shortcut_state *state, bool binding_inhibited = (binding->flags & BINDING_INHIBITED) != 0; bool binding_release = binding->flags & BINDING_RELEASE; - if (modifiers ^ binding->modifiers || + if ((modifiers ^ binding->modifiers && !release) || release != binding_release || locked > binding_locked || inhibited > binding_inhibited || diff --git a/sway/input/seatop_default.c b/sway/input/seatop_default.c index 0c6f7c5e3..d4c408294 100644 --- a/sway/input/seatop_default.c +++ b/sway/input/seatop_default.c @@ -131,7 +131,7 @@ static struct sway_binding* get_active_mouse_binding( struct sway_binding *current = NULL; for (int i = 0; i < bindings->length; ++i) { struct sway_binding *binding = bindings->items[i]; - if (modifiers ^ binding->modifiers || + if ((modifiers ^ binding->modifiers && !release) || e->pressed_button_count != (size_t)binding->keys->length || release != (binding->flags & BINDING_RELEASE) || !(click_region & binding->flags) ||