lid: tighten the lid-keyboard pairing
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 22 May 2017 03:51:11 +0000 (13:51 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 23 May 2017 05:10:10 +0000 (15:10 +1000)
Only pair if the keyboard is either tagged as internal device.

This has another (unlikely) behaviour change: previously we would override the
paired keyboards with ones that look more accurate (e.g. a usb keyboard paired
before a serial would be unpaired and the serial keyboard takes its place).
Now we assume there can only be one internal keyboard, once we have it we
ignore all others. This shouldn't matter in real life provided the tagging is
correct.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/evdev-lid.c

index 9815b8fa488543274676f00769247cc01d1066fd..8090780133f5fbbb75cca243f89d235f8822023a 100644 (file)
@@ -202,29 +202,23 @@ lid_switch_pair_keyboard(struct evdev_device *lid_switch,
 {
        struct lid_switch_dispatch *dispatch =
                lid_dispatch(lid_switch->dispatch);
-       unsigned int bus_kbd = libevdev_get_id_bustype(keyboard->evdev);
 
        if ((keyboard->tags & EVDEV_TAG_KEYBOARD) == 0)
                return;
 
-       /* If we already have a keyboard paired, override it if the new one
-        * is a serio device. Otherwise keep the current one */
-       if (dispatch->keyboard.keyboard) {
-               if (bus_kbd != BUS_I8042)
-                       return;
-
-               libinput_device_remove_event_listener(&dispatch->keyboard.listener);
-               libinput_device_init_event_listener(&dispatch->keyboard.listener);
-       }
+       if (dispatch->keyboard.keyboard)
+               return;
 
-       dispatch->keyboard.keyboard = keyboard;
-       evdev_log_debug(lid_switch,
-                       "lid: keyboard paired with %s<->%s\n",
-                       lid_switch->devname,
-                       keyboard->devname);
+       if (keyboard->tags & EVDEV_TAG_INTERNAL_KEYBOARD) {
+               dispatch->keyboard.keyboard = keyboard;
+               evdev_log_debug(lid_switch,
+                               "lid: keyboard paired with %s<->%s\n",
+                               lid_switch->devname,
+                               keyboard->devname);
 
-       /* We don't init the event listener yet - we don't care about
-        * keyboard events until the lid is closed */
+               /* We don't init the event listener yet - we don't care
+                * about keyboard events until the lid is closed */
+       }
 }
 
 static void