[clutter] x11: Improve touchpad detection heuristics
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] x11: Improve touchpad detection heuristics
- Date: Thu, 9 Apr 2015 11:36:41 +0000 (UTC)
commit 83cd36e95f57fd17eb705b963dcc1ca489bb0cc0
Author: Emmanuele Bassi <ebassi gnome org>
Date: Thu Apr 9 11:03:16 2015 +0100
x11: Improve touchpad detection heuristics
We should use the same heuristics used by GDK in order to detect whether
a device is a touchpad or not.
Based on the similar code from Carlos Garnacho for GDK:
https://git.gnome.org/browse/gtk+/commit/?id=6f07d5e7
https://bugzilla.gnome.org/show_bug.cgi?id=747436
clutter/x11/clutter-device-manager-xi2.c | 34 +++++++++++++++++++++++++++++-
1 files changed, 33 insertions(+), 1 deletions(-)
---
diff --git a/clutter/x11/clutter-device-manager-xi2.c b/clutter/x11/clutter-device-manager-xi2.c
index 2303fb4..1bad9d7 100644
--- a/clutter/x11/clutter-device-manager-xi2.c
+++ b/clutter/x11/clutter-device-manager-xi2.c
@@ -223,6 +223,32 @@ is_touch_device (XIAnyClassInfo **classes,
}
static gboolean
+is_touchpad_device (ClutterBackendX11 *backend_x11,
+ XIDeviceInfo *info)
+{
+ gulong nitems, bytes_after;
+ guint32 *data = NULL;
+ int rc, format;
+ Atom type;
+
+ clutter_x11_trap_x_errors ();
+ rc = XIGetProperty (backend_x11->xdpy,
+ info->deviceid,
+ XInternAtom (backend_x11->xdpy, "libinput Tapping Enabled", False),
+ 0, 1, False, XA_INTEGER, &type, &format, &nitems, &bytes_after,
+ (guchar **) &data);
+ clutter_x11_untrap_x_errors ();
+
+ /* We don't care about the data */
+ XFree (data);
+
+ if (rc != Success || type != XA_INTEGER || format != 32 || nitems != 1)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean
get_device_ids (ClutterBackendX11 *backend_x11,
XIDeviceInfo *info,
gchar **vendor_id,
@@ -267,7 +293,13 @@ create_device (ClutterDeviceManagerXI2 *manager_xi2,
gchar *vendor_id = NULL, *product_id = NULL;
if (info->use == XIMasterKeyboard || info->use == XISlaveKeyboard)
- source = CLUTTER_KEYBOARD_DEVICE;
+ {
+ source = CLUTTER_KEYBOARD_DEVICE;
+ }
+ else if (is_touchpad_device (backend_x11, info))
+ {
+ source = CLUTTER_TOUCHPAD_DEVICE;
+ }
else if (info->use == XISlavePointer &&
is_touch_device (info->classes, info->num_classes,
&touch_source,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]