[PATCH weston 1/2] libinput: Ignore non seat wide pointer button events

Jonas Ådahl jadahl at gmail.com
Tue Jan 27 20:18:00 PST 2015


Pointer button events will be received from a device where a button has
been pressed, even though an equivalent button has been pressed (same
button code) on a device connected to the same seat. notify_button()
expects to only be called as if there was only one pointer device
associated with the given seat, so to achieve this, ignore every event
where forwarding it would result in multiple 'pressed' or 'released'
notifications.

Signed-off-by: Jonas Ådahl <jadahl at gmail.com>
---

These two should be safe for the upcoming stable release IMO.


Jonas

 src/libinput-device.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/libinput-device.c b/src/libinput-device.c
index 3ce74b8..5c5b9b9 100644
--- a/src/libinput-device.c
+++ b/src/libinput-device.c
@@ -119,6 +119,17 @@ handle_pointer_button(struct libinput_device *libinput_device,
 {
 	struct evdev_device *device =
 		libinput_device_get_user_data(libinput_device);
+	int button_state =
+		libinput_event_pointer_get_button_state(pointer_event);
+	int seat_button_count =
+		libinput_event_pointer_get_seat_button_count(pointer_event);
+
+	/* Ignore button events that are not seat wide state changes. */
+	if ((button_state == LIBINPUT_BUTTON_STATE_PRESSED &&
+	     seat_button_count != 1) ||
+	    (button_state == LIBINPUT_BUTTON_STATE_RELEASED &&
+	     seat_button_count != 0))
+		return;
 
 	notify_button(device->seat,
 		      libinput_event_pointer_get_time(pointer_event),
-- 
2.1.0



More information about the wayland-devel mailing list