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

Peter Hutterer peter.hutterer at who-t.net
Tue Jan 27 20:55:08 PST 2015


On Wed, Jan 28, 2015 at 12:18:01PM +0800, Jonas Ådahl wrote:
> 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>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
for both

Cheers,
   Peter

> ---
>  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