Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
 src/evdev-tablet.c | 38 +-------------------------------------
 src/evdev.c        | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/evdev.h        |  3 +++
 3 files changed, 56 insertions(+), 37 deletions(-)

diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
index 309233a..5ed02a9 100644
--- a/src/evdev-tablet.c
+++ b/src/evdev-tablet.c
@@ -1562,45 +1562,9 @@ tablet_init_accel(struct tablet_dispatch *tablet, struct 
evdev_device *device)
 static void
 tablet_init_left_handed(struct evdev_device *device)
 {
-#if HAVE_LIBWACOM
-       struct libinput *libinput = device->base.seat->libinput;
-       WacomDeviceDatabase *db;
-       WacomDevice *d = NULL;
-       WacomError *error;
-       const char *devnode;
-
-       db = libwacom_database_new();
-       if (!db) {
-               log_info(libinput,
-                        "Failed to initialize libwacom context.\n");
-               return;
-       }
-       error = libwacom_error_new();
-       devnode = udev_device_get_devnode(device->udev_device);
-
-       d = libwacom_new_from_path(db,
-                                  devnode,
-                                  WFALLBACK_NONE,
-                                  error);
-
-       if (d) {
-               if (libwacom_is_reversible(d))
+       if (evdev_tablet_has_left_handed(device))
                    evdev_init_left_handed(device,
                                           tablet_change_to_left_handed);
-       } else if (libwacom_error_get_code(error) == WERROR_UNKNOWN_MODEL) {
-               log_info(libinput, "Tablet unknown to libwacom\n");
-       } else {
-               log_error(libinput,
-                         "libwacom error: %s\n",
-                         libwacom_error_get_message(error));
-       }
-
-       if (error)
-               libwacom_error_free(&error);
-       if (d)
-               libwacom_destroy(d);
-       libwacom_database_destroy(db);
-#endif
 }
 
 static int
diff --git a/src/evdev.c b/src/evdev.c
index a50b0a3..2ec049f 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -43,6 +43,10 @@
 #include "filter.h"
 #include "libinput-private.h"
 
+#if HAVE_LIBWACOM
+#include <libwacom/libwacom.h>
+#endif
+
 #define DEFAULT_WHEEL_CLICK_ANGLE 15
 #define DEFAULT_MIDDLE_BUTTON_SCROLL_TIMEOUT ms2us(200)
 
@@ -2861,3 +2865,51 @@ evdev_device_destroy(struct evdev_device *device)
        free(device->mt.slots);
        free(device);
 }
+
+bool
+evdev_tablet_has_left_handed(struct evdev_device *device)
+{
+#if HAVE_LIBWACOM
+       struct libinput *libinput = device->base.seat->libinput;
+       WacomDeviceDatabase *db;
+       WacomDevice *d = NULL;
+       WacomError *error;
+       const char *devnode;
+       bool has_left_handed = false;
+
+       db = libwacom_database_new();
+       if (!db) {
+               log_info(libinput,
+                        "Failed to initialize libwacom context.\n");
+               goto out;
+       }
+
+       error = libwacom_error_new();
+       devnode = udev_device_get_devnode(device->udev_device);
+
+       d = libwacom_new_from_path(db,
+                                  devnode,
+                                  WFALLBACK_NONE,
+                                  error);
+
+       if (d) {
+               if (libwacom_is_reversible(d))
+                       has_left_handed = true;
+       } else if (libwacom_error_get_code(error) == WERROR_UNKNOWN_MODEL) {
+               log_info(libinput, "Tablet unknown to libwacom\n");
+       } else {
+               log_error(libinput,
+                         "libwacom error: %s\n",
+                         libwacom_error_get_message(error));
+       }
+
+       if (error)
+               libwacom_error_free(&error);
+       if (d)
+               libwacom_destroy(d);
+       libwacom_database_destroy(db);
+
+out:
+       return has_left_handed;
+#endif
+}
diff --git a/src/evdev.h b/src/evdev.h
index 79afc20..f36b0d7 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -467,6 +467,9 @@ int
 evdev_init_left_handed(struct evdev_device *device,
                       void (*change_to_left_handed)(struct evdev_device *));
 
+bool
+evdev_tablet_has_left_handed(struct evdev_device *device);
+
 static inline uint32_t
 evdev_to_left_handed(struct evdev_device *device,
                     uint32_t button)
-- 
2.5.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to