From 5926e3cfecc8d1c668bb37c299dab8b27fe857db Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 27 Oct 2011 22:30:14 +0200 Subject: [PATCH] xi2: Use GDK_SOURCE_TOUCH for multitouch devices Any device with XITouchValuatorClassInfo classes qualify as multitouch now. --- gdk/x11/gdkdevicemanager-xi2.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index c9c262fc6e..df7381f568 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -264,6 +264,28 @@ translate_device_classes (GdkDisplay *display, g_object_thaw_notify (G_OBJECT (device)); } +static gint +count_device_touches (XIAnyClassInfo **classes, + guint n_classes) +{ + gint n_touches = 0; +#ifdef XINPUT_2_1 + guint i; + + for (i = 0; i < n_classes; i++) + { + XITouchValuatorClassInfo *valuator_info = (XITouchValuatorClassInfo *) classes[i]; + + if (valuator_info->type != XITouchValuatorClass) + continue; + + n_touches = MAX (n_touches, valuator_info->number); + } +#endif + + return n_touches; +} + static GdkDevice * create_device (GdkDeviceManager *device_manager, GdkDisplay *display, @@ -276,6 +298,9 @@ create_device (GdkDeviceManager *device_manager, if (dev->use == XIMasterKeyboard || dev->use == XISlaveKeyboard) input_source = GDK_SOURCE_KEYBOARD; + else if (dev->use == XISlavePointer && + count_device_touches (dev->classes, dev->num_classes) > 0) + input_source = GDK_SOURCE_TOUCH; else { gchar *tmp_name; @@ -293,8 +318,6 @@ create_device (GdkDeviceManager *device_manager, else if (strstr (tmp_name, "wacom") || strstr (tmp_name, "pen")) input_source = GDK_SOURCE_PEN; - else if (strstr (tmp_name, "multitouch")) - input_source = GDK_SOURCE_TOUCH; else input_source = GDK_SOURCE_MOUSE;