[PATCH libinput] evdev: Be more careful about what we consider a joystick

Peter Hutterer peter.hutterer at who-t.net
Wed Jan 21 19:34:32 PST 2015


On Wed, Jan 21, 2015 at 12:04:48PM +0100, Hans de Goede wrote:
> After switching my main workstation over to using xf86-input-libinput, I
> noticed that the multi-media keys like play/pause on my keyboard no longer
> worked.
> 
> It turns out that the second hid interface on my keyboard which has the
> multimedia-keys, also declares having: BTN_BASE6 and BTN_MODE which both
> fell into the range we were using to test for something being a joystick.
> 
> The commit makes our joystick test mode strict, restoring functionality
> of the multi-media keys on the keyboard in question.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

pushed, thanks. I decided to splurge a bit and rename it to
has_joystick_button though. we can afford the extra storage required :)

Cheers,
   Peter

> ---
>  src/evdev.c | 25 ++++++++++++++++---------
>  1 file changed, 16 insertions(+), 9 deletions(-)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index 6edacba..b2bb2aa 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1324,7 +1324,7 @@ evdev_configure_device(struct evdev_device *device)
>  	struct libevdev *evdev = device->evdev;
>  	const struct input_absinfo *absinfo;
>  	int has_abs, has_rel, has_mt;
> -	int has_button, has_keyboard, has_touch;
> +	int has_button, has_keyboard, has_touch, has_joy_button;
>  	struct mt_slot *slots;
>  	int num_slots;
>  	int active_slot;
> @@ -1336,17 +1336,24 @@ evdev_configure_device(struct evdev_device *device)
>  	has_abs = 0;
>  	has_mt = 0;
>  	has_button = 0;
> +	has_joy_button = 0;
>  	has_keyboard = 0;
>  	has_touch = 0;
>  
> -        for (i = BTN_JOYSTICK; i < BTN_DIGI; i++) {
> -                if (libevdev_has_event_code(evdev, EV_KEY, i)) {
> -                        log_info(libinput,
> -                                 "input device '%s', %s is a joystick, ignoring\n",
> -                                 device->devname, devnode);
> -                        return -1;
> -                }
> -        }
> +	for (i = BTN_JOYSTICK; i <= BTN_PINKIE; i++)
> +		if (libevdev_has_event_code(evdev, EV_KEY, i))
> +			has_joy_button = 1;
> +
> +	for (i = BTN_GAMEPAD; i <= BTN_TR2; i++)
> +		if (libevdev_has_event_code(evdev, EV_KEY, i))
> +			has_joy_button = 1;
> +
> +	if (has_joy_button) {
> +		log_info(libinput,
> +			 "input device '%s', %s is a joystick, ignoring\n",
> +			 device->devname, devnode);
> +		return -1;
> +	}
>  
>  	if (libevdev_has_event_type(evdev, EV_ABS)) {
>  
> -- 
> 2.1.0
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> 


More information about the wayland-devel mailing list