[PATCH libinput 1/4] evdev: factor out resolution changing code

Hans de Goede hdegoede at redhat.com
Wed Nov 5 04:08:02 PST 2014


Hi,

Series looks good and is:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


On 11/05/2014 05:44 AM, Peter Hutterer wrote:
> No functional changes.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  src/evdev.c | 57 ++++++++++++++++++++++++++++++++-------------------------
>  1 file changed, 32 insertions(+), 25 deletions(-)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index 3aa87a7..ecf105d 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1038,13 +1038,31 @@ evdev_tag_device(struct evdev_device *device)
>  	udev_unref(udev);
>  }
>  
> +static inline int
> +evdev_fix_abs_resolution(struct libevdev *evdev,
> +			 unsigned int code,
> +			 const struct input_absinfo *absinfo)
> +{
> +	struct input_absinfo fixed;
> +
> +	if (absinfo->resolution == 0) {
> +		fixed = *absinfo;
> +		fixed.resolution = 1;
> +		/* libevdev_set_abs_info() changes the absinfo we already
> +		   have a pointer to, no need to fetch it again */
> +		libevdev_set_abs_info(evdev, code, &fixed);
> +		return 1;
> +	} else {
> +		return 0;
> +	}
> +}
> +
>  static int
>  evdev_configure_device(struct evdev_device *device)
>  {
>  	struct libinput *libinput = device->base.seat->libinput;
>  	struct libevdev *evdev = device->evdev;
>  	const struct input_absinfo *absinfo;
> -	struct input_absinfo fixed;
>  	int has_abs, has_rel, has_mt;
>  	int has_button, has_keyboard, has_touch;
>  	struct mt_slot *slots;
> @@ -1063,22 +1081,18 @@ evdev_configure_device(struct evdev_device *device)
>  	if (libevdev_has_event_type(evdev, EV_ABS)) {
>  
>  		if ((absinfo = libevdev_get_abs_info(evdev, ABS_X))) {
> -			if (absinfo->resolution == 0) {
> -				fixed = *absinfo;
> -				fixed.resolution = 1;
> -				libevdev_set_abs_info(evdev, ABS_X, &fixed);
> +			if (evdev_fix_abs_resolution(evdev,
> +						     ABS_X,
> +						     absinfo))
>  				device->abs.fake_resolution = 1;
> -			}
>  			device->abs.absinfo_x = absinfo;
>  			has_abs = 1;
>  		}
>  		if ((absinfo = libevdev_get_abs_info(evdev, ABS_Y))) {
> -			if (absinfo->resolution == 0) {
> -				fixed = *absinfo;
> -				fixed.resolution = 1;
> -				libevdev_set_abs_info(evdev, ABS_Y, &fixed);
> +			if (evdev_fix_abs_resolution(evdev,
> +						     ABS_Y,
> +						     absinfo))
>  				device->abs.fake_resolution = 1;
> -			}
>  			device->abs.absinfo_y = absinfo;
>  			has_abs = 1;
>  		}
> @@ -1088,24 +1102,17 @@ evdev_configure_device(struct evdev_device *device)
>  		if (libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_X) &&
>  		    libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_Y)) {
>  			absinfo = libevdev_get_abs_info(evdev, ABS_MT_POSITION_X);
> -			if (absinfo->resolution == 0) {
> -				fixed = *absinfo;
> -				fixed.resolution = 1;
> -				libevdev_set_abs_info(evdev,
> -						      ABS_MT_POSITION_X,
> -						      &fixed);
> +			if (evdev_fix_abs_resolution(evdev,
> +						     ABS_MT_POSITION_X,
> +						     absinfo))
>  				device->abs.fake_resolution = 1;
> -			}
>  			device->abs.absinfo_x = absinfo;
> +
>  			absinfo = libevdev_get_abs_info(evdev, ABS_MT_POSITION_Y);
> -			if (absinfo->resolution == 0) {
> -				fixed = *absinfo;
> -				fixed.resolution = 1;
> -				libevdev_set_abs_info(evdev,
> -						      ABS_MT_POSITION_Y,
> -						      &fixed);
> +			if (evdev_fix_abs_resolution(evdev,
> +						     ABS_MT_POSITION_Y,
> +						     absinfo))
>  				device->abs.fake_resolution = 1;
> -			}
>  			device->abs.absinfo_y = absinfo;
>  			device->is_mt = 1;
>  			has_touch = 1;
> 


More information about the wayland-devel mailing list