libinput: Only forward first and last press and release for a key
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@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
This commit is contained in:
parent
e90b9e9b59
commit
90d1ac8d49
@ -59,6 +59,17 @@ handle_keyboard_key(struct libinput_device *libinput_device,
|
|||||||
{
|
{
|
||||||
struct evdev_device *device =
|
struct evdev_device *device =
|
||||||
libinput_device_get_user_data(libinput_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,
|
notify_key(device->seat,
|
||||||
libinput_event_keyboard_get_time(keyboard_event),
|
libinput_event_keyboard_get_time(keyboard_event),
|
||||||
|
Loading…
Reference in New Issue
Block a user