xi2: Use the new device types for touch-capable devices
Any device with a XITouchClassInfo with num_touches > 0 qualifies as multitouch.
This commit is contained in:
@ -248,18 +248,54 @@ translate_device_classes (GdkDisplay *display,
|
|||||||
g_object_thaw_notify (G_OBJECT (device));
|
g_object_thaw_notify (G_OBJECT (device));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
is_touch_device (XIAnyClassInfo **classes,
|
||||||
|
guint n_classes,
|
||||||
|
GdkInputSource *device_type)
|
||||||
|
{
|
||||||
|
#ifdef XINPUT_2_2
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
for (i = 0; i < n_classes; i++)
|
||||||
|
{
|
||||||
|
XITouchClassInfo *class = (XITouchClassInfo *) classes[i];
|
||||||
|
|
||||||
|
if (class->type != XITouchClass)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (class->num_touches > 0)
|
||||||
|
{
|
||||||
|
if (class->mode == XIDirectTouch)
|
||||||
|
*device_type = GDK_SOURCE_TOUCHSCREEN;
|
||||||
|
else if (class->mode == XIDependentTouch)
|
||||||
|
*device_type = GDK_SOURCE_TOUCHPAD;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static GdkDevice *
|
static GdkDevice *
|
||||||
create_device (GdkDeviceManager *device_manager,
|
create_device (GdkDeviceManager *device_manager,
|
||||||
GdkDisplay *display,
|
GdkDisplay *display,
|
||||||
XIDeviceInfo *dev)
|
XIDeviceInfo *dev)
|
||||||
{
|
{
|
||||||
GdkInputSource input_source;
|
GdkInputSource input_source;
|
||||||
|
GdkInputSource touch_source;
|
||||||
GdkDeviceType type;
|
GdkDeviceType type;
|
||||||
GdkDevice *device;
|
GdkDevice *device;
|
||||||
GdkInputMode mode;
|
GdkInputMode mode;
|
||||||
|
|
||||||
if (dev->use == XIMasterKeyboard || dev->use == XISlaveKeyboard)
|
if (dev->use == XIMasterKeyboard || dev->use == XISlaveKeyboard)
|
||||||
input_source = GDK_SOURCE_KEYBOARD;
|
input_source = GDK_SOURCE_KEYBOARD;
|
||||||
|
else if (dev->use == XISlavePointer &&
|
||||||
|
is_touch_device (dev->classes, dev->num_classes, &touch_source))
|
||||||
|
input_source = touch_source;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gchar *tmp_name;
|
gchar *tmp_name;
|
||||||
@ -270,6 +306,10 @@ create_device (GdkDeviceManager *device_manager,
|
|||||||
input_source = GDK_SOURCE_ERASER;
|
input_source = GDK_SOURCE_ERASER;
|
||||||
else if (strstr (tmp_name, "cursor"))
|
else if (strstr (tmp_name, "cursor"))
|
||||||
input_source = GDK_SOURCE_CURSOR;
|
input_source = GDK_SOURCE_CURSOR;
|
||||||
|
else if (strstr (tmp_name, "finger") ||
|
||||||
|
(strstr (tmp_name, "touch") &&
|
||||||
|
!strstr (tmp_name, "touchpad")))
|
||||||
|
input_source = GDK_SOURCE_TOUCHSCREEN;
|
||||||
else if (strstr (tmp_name, "wacom") ||
|
else if (strstr (tmp_name, "wacom") ||
|
||||||
strstr (tmp_name, "pen"))
|
strstr (tmp_name, "pen"))
|
||||||
input_source = GDK_SOURCE_PEN;
|
input_source = GDK_SOURCE_PEN;
|
||||||
|
|||||||
Reference in New Issue
Block a user