[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