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 <[email protected]>
Reviewed-by: Peter Hutterer <[email protected]> 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 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
