mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 12:55:58 +01:00
backend/libinput: ignore multiple events for same pointer button
If the same button is pressed on two devices on the same seat, ignore the second event. This is also what Mutter does. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3665
This commit is contained in:
parent
670915eeea
commit
e1c6801b65
1 changed files with 10 additions and 0 deletions
|
@ -63,12 +63,22 @@ void handle_pointer_button(struct libinput_event *event,
|
||||||
wlr_event.time_msec =
|
wlr_event.time_msec =
|
||||||
usec_to_msec(libinput_event_pointer_get_time_usec(pevent));
|
usec_to_msec(libinput_event_pointer_get_time_usec(pevent));
|
||||||
wlr_event.button = libinput_event_pointer_get_button(pevent);
|
wlr_event.button = libinput_event_pointer_get_button(pevent);
|
||||||
|
// Ignore events which aren't a seat-wide state change. For instance, if
|
||||||
|
// the same button is pressed twice on the same seat, ignore the second
|
||||||
|
// press.
|
||||||
|
uint32_t seat_count = libinput_event_pointer_get_seat_button_count(pevent);
|
||||||
switch (libinput_event_pointer_get_button_state(pevent)) {
|
switch (libinput_event_pointer_get_button_state(pevent)) {
|
||||||
case LIBINPUT_BUTTON_STATE_PRESSED:
|
case LIBINPUT_BUTTON_STATE_PRESSED:
|
||||||
wlr_event.state = WLR_BUTTON_PRESSED;
|
wlr_event.state = WLR_BUTTON_PRESSED;
|
||||||
|
if (seat_count != 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LIBINPUT_BUTTON_STATE_RELEASED:
|
case LIBINPUT_BUTTON_STATE_RELEASED:
|
||||||
wlr_event.state = WLR_BUTTON_RELEASED;
|
wlr_event.state = WLR_BUTTON_RELEASED;
|
||||||
|
if (seat_count != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
wl_signal_emit_mutable(&pointer->events.button, &wlr_event);
|
wl_signal_emit_mutable(&pointer->events.button, &wlr_event);
|
||||||
|
|
Loading…
Reference in a new issue