elput: Improve checks for keyboard & pointer devices

Some devices reported by libinput show up as both keyboard and mouse,
even tho they are physically only just a keyboard or just a mouse.
When a device gets added, we can verify if it is actually a mouse by
checking if the device has BTN_LEFT (and for keyboards, check
KEY_ENTER). This stops us from getting multiple mouse pointers
reported when we really only have one.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2016-12-08 14:30:41 -05:00
parent b66324644c
commit 8ebf4cd972
1 changed files with 4 additions and 2 deletions

View File

@ -1239,13 +1239,15 @@ _evdev_device_create(Elput_Seat *seat, struct libinput_device *device)
edev->seat = seat;
edev->device = device;
if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_KEYBOARD))
if ((libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_KEYBOARD)) &&
(libinput_device_keyboard_has_key(device, KEY_ENTER)))
{
_keyboard_init(seat, seat->manager->cached.keymap);
edev->caps |= EVDEV_SEAT_KEYBOARD;
}
if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_POINTER))
if ((libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_POINTER) &&
(libinput_device_pointer_has_button(device, BTN_LEFT))))
{
_pointer_init(seat);
edev->caps |= EVDEV_SEAT_POINTER;