From 1ba7004dbc0af62e65221ac6fa0fb59204a5e81e Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 14 Apr 2015 14:41:39 +1000 Subject: [PATCH] evdev: enable middle button configuration on some devices Devices that have left and right buttons but no middle button get middle button emulation (without config). Devices that have a middle button too get a config option but default to off. Most mice have LMR set as buttons, regardless whether they have a middle button. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index 6ca874a1..da33eaeb 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1143,6 +1143,24 @@ fallback_dispatch_create(struct libinput_device *device) evdev_init_calibration(evdev_device, dispatch); evdev_init_sendevents(evdev_device, dispatch); + /* BTN_MIDDLE is set on mice even when it's not present. So + * we can only use the absense of BTN_MIDDLE to mean something, i.e. + * we enable it by default on anything that only has L&R. + * If we have L&R and no middle, we don't expose it as config + * option */ + if (libevdev_has_event_code(evdev_device->evdev, EV_KEY, BTN_LEFT) && + libevdev_has_event_code(evdev_device->evdev, EV_KEY, BTN_RIGHT)) { + bool has_middle = libevdev_has_event_code(evdev_device->evdev, + EV_KEY, + BTN_MIDDLE); + bool want_config = has_middle; + bool enable_by_default = !has_middle; + + evdev_init_middlebutton(evdev_device, + enable_by_default, + want_config); + } + return dispatch; }