From: Peter Hutterer Date: Thu, 19 Jun 2014 01:17:10 +0000 (+1000) Subject: evdev: force a resolution of 1 where no resolution is set X-Git-Tag: 0.4.0~22 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a812385d1c21747508ca51634a48ebf2970b84c;p=platform%2Fupstream%2Flibinput.git evdev: force a resolution of 1 where no resolution is set Avoids nasty surprises later when we divide by 0. This matters particularly when testing a device through uinput, which can't set the resolution. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- diff --git a/src/evdev.c b/src/evdev.c index 907d18e5..2b2725cf 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -593,6 +593,7 @@ evdev_configure_device(struct evdev_device *device) { 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; @@ -611,10 +612,20 @@ 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); + } 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); + } device->abs.absinfo_y = absinfo; has_abs = 1; } @@ -624,8 +635,22 @@ 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); + } 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); + } device->abs.absinfo_y = absinfo; device->is_mt = 1; has_touch = 1;