diff options
author | Carlos Garnacho <mrgarnacho@gmail.com> | 2018-03-20 17:03:15 +0000 |
---|---|---|
committer | Carlos Garnacho <mrgarnacho@gmail.com> | 2018-03-20 17:03:15 +0000 |
commit | 28c27f37ee5fe3a1a9d6a4c35bd9b979f228cf9e (patch) | |
tree | c3806a27c99698c2c69c38e064c38e333c0abdcf /gdk | |
parent | dcc61242094d1a9fc532a80ecc22b47a4243f986 (diff) | |
parent | 0ad27cc5985664437c022d42e433734742454f05 (diff) | |
download | gtk+-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.c | 23 |
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, |