[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