[PATCH weston 2/2] libinput: Ignore non seat wide keyboard key events

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


Keyboard key events will be received from a device where a key has
been pressed, even though an equivalent key has been pressed (same
key code) on a device connected to the same seat. notify_key()
expects to only be called as if there was only one keyboard 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>
---
 src/libinput-device.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/libinput-device.c b/src/libinput-device.c
index 5c5b9b9..567e5ea 100644
--- a/src/libinput-device.c
+++ b/src/libinput-device.c
@@ -59,6 +59,17 @@ handle_keyboard_key(struct libinput_device *libinput_device,
 {
 	struct evdev_device *device =
 		libinput_device_get_user_data(libinput_device);
+	int key_state =
+		libinput_event_keyboard_get_key_state(keyboard_event);
+	int seat_key_count =
+		libinput_event_keyboard_get_seat_key_count(keyboard_event);
+
+	/* Ignore key events that are not seat wide state changes. */
+	if ((key_state == LIBINPUT_KEY_STATE_PRESSED &&
+	     seat_key_count != 1) ||
+	    (key_state == LIBINPUT_KEY_STATE_RELEASED &&
+	     seat_key_count != 0))
+		return;
 
 	notify_key(device->seat,
 		   libinput_event_keyboard_get_time(keyboard_event),
-- 
2.1.0



More information about the wayland-devel mailing list