[gtk+/touch-for-3.4: 36/65] xi2: Use GDK_SOURCE_TOUCH for multitouch devices



commit 9775183efb4836b7ff40305c2c762b9a64f0710a
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Oct 27 22:30:14 2011 +0200

    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 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index 2371bde..ec54f9b 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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]