From 9775183efb4836b7ff40305c2c762b9a64f0710a 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 a XITouchClassInfo with num_touches > 0 qualifies as multitouch. --- gdk/x11/gdkdevicemanager-xi2.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index 2371bde0cd..ec54f9b956 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -251,6 +251,27 @@ translate_device_classes (GdkDisplay *display, g_object_thaw_notify (G_OBJECT (device)); } +static gint +count_device_touches (XIAnyClassInfo **classes, + guint n_classes) +{ +#ifdef XINPUT_2_2 + guint i; + + for (i = 0; i < n_classes; i++) + { + XITouchClassInfo *valuator_info = (XITouchClassInfo *) classes[i]; + + if (valuator_info->type != XITouchClass) + continue; + + return valuator_info->num_touches; + } +#endif + + return 0; +} + static GdkDevice * create_device (GdkDeviceManager *device_manager, GdkDisplay *display, @@ -263,6 +284,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;