[PATCH libinput 2/9] evdev: simplify setting a fake resolution
Hans de Goede
hdegoede at redhat.com
Wed Jul 8 05:29:00 PDT 2015
Hi,
On 01-07-15 08:08, Peter Hutterer wrote:
> The only two callers passed in the fake resolution anyway, so we don't need
> extra parameters here.
> We don't allow devices with only x or y resolution set, either both or none.
> And we can use libevdev_set_abs_resolution() rather than handling absinfo
> structs.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
LGTM: Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> src/evdev.c | 55 ++++++++++++-------------------------------------------
> 1 file changed, 12 insertions(+), 43 deletions(-)
>
> diff --git a/src/evdev.c b/src/evdev.c
> index 905b5cc..5d9b9d0 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1547,19 +1547,16 @@ evdev_read_model(struct evdev_device *device)
> return m->model;
> }
>
> -/* Return 1 if the given resolutions have been set, or 0 otherwise */
> +/* Return 1 if the device is set to the fake resolution or 0 otherwise */
> static inline int
> evdev_fix_abs_resolution(struct evdev_device *device,
> unsigned int xcode,
> - unsigned int ycode,
> - int xresolution,
> - int yresolution)
> + unsigned int ycode)
> {
> struct libinput *libinput = device->base.seat->libinput;
> struct libevdev *evdev = device->evdev;
> - const struct input_absinfo *absx, *absy;
> - struct input_absinfo fixed;
> - int rc = 0;
> + int xres = EVDEV_FAKE_RESOLUTION,
> + yres = EVDEV_FAKE_RESOLUTION;
>
> if (!(xcode == ABS_X && ycode == ABS_Y) &&
> !(xcode == ABS_MT_POSITION_X && ycode == ABS_MT_POSITION_Y)) {
> @@ -1569,37 +1566,15 @@ evdev_fix_abs_resolution(struct evdev_device *device,
> return 0;
> }
>
> - if (xresolution == 0 || yresolution == 0 ||
> - (xresolution == EVDEV_FAKE_RESOLUTION && xresolution != yresolution) ||
> - (yresolution == EVDEV_FAKE_RESOLUTION && xresolution != yresolution)) {
> - log_bug_libinput(libinput,
> - "Invalid x/y resolutions %d/%d\n",
> - xresolution, yresolution);
> + if (libevdev_get_abs_resolution(evdev, xcode) != 0)
> return 0;
> - }
>
> - absx = libevdev_get_abs_info(evdev, xcode);
> - absy = libevdev_get_abs_info(evdev, ycode);
> + /* libevdev_set_abs_resolution() changes the absinfo we already
> + have a pointer to, no need to fetch it again */
> + libevdev_set_abs_resolution(evdev, xcode, xres);
> + libevdev_set_abs_resolution(evdev, ycode, yres);
>
> - if (absx->resolution == 0 || absx->resolution == EVDEV_FAKE_RESOLUTION) {
> - fixed = *absx;
> - fixed.resolution = xresolution;
> - /* libevdev_set_abs_info() changes the absinfo we already
> - have a pointer to, no need to fetch it again */
> - libevdev_set_abs_info(evdev, xcode, &fixed);
> - rc = 1;
> - }
> -
> - if (absy->resolution == 0 || absy->resolution == EVDEV_FAKE_RESOLUTION) {
> - fixed = *absy;
> - fixed.resolution = yresolution;
> - /* libevdev_set_abs_info() changes the absinfo we already
> - have a pointer to, no need to fetch it again */
> - libevdev_set_abs_info(evdev, ycode, &fixed);
> - rc = 1;
> - }
> -
> - return rc;
> + return 1;
> }
>
> static enum evdev_device_udev_tags
> @@ -1770,9 +1745,7 @@ evdev_configure_mt_device(struct evdev_device *device)
>
> if (evdev_fix_abs_resolution(device,
> ABS_MT_POSITION_X,
> - ABS_MT_POSITION_Y,
> - EVDEV_FAKE_RESOLUTION,
> - EVDEV_FAKE_RESOLUTION))
> + ABS_MT_POSITION_Y))
> device->abs.fake_resolution = 1;
>
> device->abs.absinfo_x = libevdev_get_abs_info(evdev, ABS_MT_POSITION_X);
> @@ -1883,11 +1856,7 @@ evdev_configure_device(struct evdev_device *device)
> evdev_fix_android_mt(device);
>
> if (libevdev_has_event_code(evdev, EV_ABS, ABS_X)) {
> - if (evdev_fix_abs_resolution(device,
> - ABS_X,
> - ABS_Y,
> - EVDEV_FAKE_RESOLUTION,
> - EVDEV_FAKE_RESOLUTION))
> + if (evdev_fix_abs_resolution(device, ABS_X, ABS_Y))
> device->abs.fake_resolution = 1;
> device->abs.absinfo_x = libevdev_get_abs_info(evdev, ABS_X);
> device->abs.absinfo_y = libevdev_get_abs_info(evdev, ABS_Y);
>
More information about the wayland-devel
mailing list