summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorCarlos Garnacho <mrgarnacho@gmail.com>2018-03-20 17:03:15 +0000
committerCarlos Garnacho <mrgarnacho@gmail.com>2018-03-20 17:03:15 +0000
commit28c27f37ee5fe3a1a9d6a4c35bd9b979f228cf9e (patch)
treec3806a27c99698c2c69c38e064c38e333c0abdcf /gdk
parentdcc61242094d1a9fc532a80ecc22b47a4243f986 (diff)
parent0ad27cc5985664437c022d42e433734742454f05 (diff)
downloadgtk+-28c27f37ee5fe3a1a9d6a4c35bd9b979f228cf9e.tar.gz
Merge branch 'detect-synaptics-touchpads-v2' into 'master'
x11/xi2: Report touchpads as TOUCHPAD, not MOUSE See merge request GNOME/gtk!65
Diffstat (limited to 'gdk')
-rw-r--r--gdk/x11/gdkdevicemanager-xi2.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 4c873790ff..5653759016 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -377,8 +377,9 @@ get_device_ids (GdkDisplay *display,
}
static gboolean
-is_touchpad_device (GdkDisplay *display,
- XIDeviceInfo *info)
+has_bool_prop (GdkDisplay *display,
+ XIDeviceInfo *info,
+ const char *prop_name)
{
gulong nitems, bytes_after;
guint32 *data;
@@ -389,7 +390,7 @@ is_touchpad_device (GdkDisplay *display,
rc = XIGetProperty (GDK_DISPLAY_XDISPLAY (display),
info->deviceid,
- gdk_x11_get_xatom_by_name_for_display (display, "libinput Tapping Enabled"),
+ gdk_x11_get_xatom_by_name_for_display (display, prop_name),
0, 1, False, XA_INTEGER, &type, &format, &nitems, &bytes_after,
(guchar **) &data);
gdk_x11_display_error_trap_pop_ignored (display);
@@ -402,6 +403,22 @@ is_touchpad_device (GdkDisplay *display,
return TRUE;
}
+static gboolean
+is_touchpad_device (GdkDisplay *display,
+ XIDeviceInfo *info)
+{
+ /*
+ * Touchpads are heuristically recognized via XI properties that the various
+ * Xorg drivers expose:
+ * libinput: libinput Tapping Enabled
+ * synaptics: Synaptics Off
+ * cmt: Raw Touch Passthrough
+ */
+ return has_bool_prop (display, info, "libinput Tapping Enabled") ||
+ has_bool_prop (display, info, "Synaptics Off") ||
+ has_bool_prop (display, info, "Raw Touch Passthrough");
+}
+
static GdkDevice *
create_device (GdkX11DeviceManagerXI2 *device_manager,
GdkDisplay *display,