libinput: note if calibrating without an output
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 18 Apr 2017 09:14:32 +0000 (12:14 +0300)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Fri, 20 Apr 2018 12:27:54 +0000 (15:27 +0300)
Print a note that calibration got skipped if the input device supports a
calibration matrix but there is no associated output to compute it from.
Helps with debugging touchscreen calibration issues.

The code is reorganized and commented a bit, but this does not change
the behaviour.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
libweston/libinput-device.c

index 9b2577b..48bfd6f 100644 (file)
@@ -463,21 +463,29 @@ evdev_device_set_calibration(struct evdev_device *device)
        float calibration[6];
        enum libinput_config_status status;
 
-       if (!device->output)
+       if (!libinput_device_config_calibration_has_matrix(device->device))
+               return;
+
+       /* If LIBINPUT_CALIBRATION_MATRIX was set to non-identity, we will not
+        * override it with WL_CALIBRATION. It also means we don't need an
+        * output to load a calibration. */
+       if (libinput_device_config_calibration_get_default_matrix(
+                                                         device->device,
+                                                         calibration) != 0)
+               return;
+
+       if (!device->output) {
+               weston_log("input device %s has no enabled output associated "
+                          "(%s named), skipping calibration for now.\n",
+                          sysname, device->output_name ?: "none");
                return;
+       }
 
        width = device->output->width;
        height = device->output->height;
        if (width == 0 || height == 0)
                return;
 
-       /* If libinput has a pre-set calibration matrix, don't override it */
-       if (!libinput_device_config_calibration_has_matrix(device->device) ||
-           libinput_device_config_calibration_get_default_matrix(
-                                                         device->device,
-                                                         calibration) != 0)
-               return;
-
        udev = udev_new();
        if (!udev)
                return;