Clear held keybinding when clicking mouse buttons with modifiers

When handling a button click with one or more modifiers, or using the
mouse with the floating modifier, assume that the modifiers are not
intended as a standalone keybinding, and clear the held_binding from
the keyboard. This way it is possible to use a single modifier (e.g.
Super) as main modifier, floating modifier, and as a standalone
keybinding (with --release). Fixes #4505
This commit is contained in:
Livanh 2023-10-06 21:09:18 +02:00
parent 801bc76ce3
commit 2ea6ceb6bb
3 changed files with 10 additions and 1 deletions

View file

@ -130,7 +130,7 @@ static void seat_send_activate(struct sway_node *node, struct sway_seat *seat) {
}
}
static struct sway_keyboard *sway_keyboard_for_wlr_keyboard(
struct sway_keyboard *sway_keyboard_for_wlr_keyboard(
struct sway_seat *seat, struct wlr_keyboard *wlr_keyboard) {
struct sway_seat_device *seat_device;
wl_list_for_each(seat_device, &seat->devices, link) {

View file

@ -368,6 +368,11 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
return;
}
// Clear pending keyboard bindings, if any
if (state == WL_POINTER_BUTTON_STATE_PRESSED && modifiers != 0) {
sway_keyboard_for_wlr_keyboard(seat, keyboard)->held_binding = NULL;
}
// Handle clicking an empty workspace
if (node && node->type == N_WORKSPACE) {
if (state == WL_POINTER_BUTTON_STATE_PRESSED) {