evdev: don't return a width/height if we faked the resolution
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 24 Jul 2014 06:15:43 +0000 (16:15 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 4 Aug 2014 10:20:59 +0000 (20:20 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev.c
src/evdev.h

index f980812bd35d7b468e1d74caac704c00d3be6eca..a1255100f4c95adf64bd64165fc73c1a04567411 100644 (file)
@@ -620,6 +620,7 @@ evdev_configure_device(struct evdev_device *device)
                                fixed = *absinfo;
                                fixed.resolution = 1;
                                libevdev_set_abs_info(evdev, ABS_X, &fixed);
+                               device->abs.fake_resolution = 1;
                        }
                        device->abs.absinfo_x = absinfo;
                        has_abs = 1;
@@ -629,6 +630,7 @@ evdev_configure_device(struct evdev_device *device)
                                fixed = *absinfo;
                                fixed.resolution = 1;
                                libevdev_set_abs_info(evdev, ABS_Y, &fixed);
+                               device->abs.fake_resolution = 1;
                        }
                        device->abs.absinfo_y = absinfo;
                        has_abs = 1;
@@ -645,6 +647,7 @@ evdev_configure_device(struct evdev_device *device)
                                libevdev_set_abs_info(evdev,
                                                      ABS_MT_POSITION_X,
                                                      &fixed);
+                               device->abs.fake_resolution = 1;
                        }
                        device->abs.absinfo_x = absinfo;
                        absinfo = libevdev_get_abs_info(evdev, ABS_MT_POSITION_Y);
@@ -654,6 +657,7 @@ evdev_configure_device(struct evdev_device *device)
                                libevdev_set_abs_info(evdev,
                                                      ABS_MT_POSITION_Y,
                                                      &fixed);
+                               device->abs.fake_resolution = 1;
                        }
                        device->abs.absinfo_y = absinfo;
                        device->is_mt = 1;
@@ -908,7 +912,8 @@ evdev_device_get_size(struct evdev_device *device,
        x = libevdev_get_abs_info(device->evdev, ABS_X);
        y = libevdev_get_abs_info(device->evdev, ABS_Y);
 
-       if (!x || !y || !x->resolution || !y->resolution)
+       if (!x || !y || device->abs.fake_resolution ||
+           !x->resolution || !y->resolution)
                return -1;
 
        *width = evdev_convert_to_mm(x, x->maximum);
index fad1f84c2cc82292cb75a403e6d6352543b00f92..a21b03e5ffc084a6508ee49547c6d6bfbe883148 100644 (file)
@@ -67,8 +67,9 @@ struct evdev_device {
        int fd;
        struct {
                const struct input_absinfo *absinfo_x, *absinfo_y;
-               int32_t x, y;
+               int fake_resolution;
 
+               int32_t x, y;
                int32_t seat_slot;
 
                int apply_calibration;