From 3e9b4f9deb64a8a0c3fa4eb39f32c136dbcfec8b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 29 Feb 2012 00:44:51 -0500 Subject: [PATCH] gdk: Add some debug output for touch events and devices --- gdk/x11/gdkdevicemanager-xi2.c | 43 +++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index 7f3f156385..480f137d73 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -255,7 +255,8 @@ translate_device_classes (GdkDisplay *display, static gboolean is_touch_device (XIAnyClassInfo **classes, guint n_classes, - GdkInputSource *device_type) + GdkInputSource *device_type, + gint *num_touches) { #ifdef XINPUT_2_2 guint i; @@ -276,6 +277,8 @@ is_touch_device (XIAnyClassInfo **classes, else continue; + *num_touches = class->num_touches; + return TRUE; } } @@ -294,11 +297,12 @@ create_device (GdkDeviceManager *device_manager, GdkDeviceType type; GdkDevice *device; GdkInputMode mode; + gint num_touches = 0; if (dev->use == XIMasterKeyboard || dev->use == XISlaveKeyboard) input_source = GDK_SOURCE_KEYBOARD; else if (dev->use == XISlavePointer && - is_touch_device (dev->classes, dev->num_classes, &touch_source)) + is_touch_device (dev->classes, dev->num_classes, &touch_source, &num_touches)) input_source = touch_source; else { @@ -342,6 +346,20 @@ create_device (GdkDeviceManager *device_manager, break; } + GDK_NOTE (INPUT, + ({ + const gchar *type_names[] = { "master", "slave", "floating" }; + const gchar *source_names[] = { "mouse", "pen", "eraser", "cursor", "keyboard", "direct touch", "indirect touch" }; + const gchar *mode_names[] = { "disabled", "screen", "window" }; + g_message ("input device:\n\tname: %s\n\ttype: %s\n\tsource: %s\n\tmode: %s\n\thas cursor: %d\n\ttouches: %d", + dev->name, + type_names[type], + source_names[input_source], + mode_names[mode], + dev->use == XIMasterPointer, + num_touches); + })); + device = g_object_new (GDK_TYPE_X11_DEVICE_XI2, "name", dev->name, "type", type, @@ -1195,7 +1213,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, event->button.button = xev->detail; } - if (xev->flags & (XIPointerEmulated | XITouchEmulatingPointer)) + if (xev->flags & XIPointerEmulated) _gdk_event_set_pointer_emulated (event, TRUE); if (return_val == FALSE) @@ -1235,7 +1253,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, event->motion.state = _gdk_x11_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group); - if (xev->flags & (XIPointerEmulated | XITouchEmulatingPointer)) + if (xev->flags & XIPointerEmulated) _gdk_event_set_pointer_emulated (event, TRUE); /* There doesn't seem to be motion hints in XI */ @@ -1265,6 +1283,13 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, XIDeviceEvent *xev = (XIDeviceEvent *) ev; GdkDevice *source_device; + GDK_NOTE(EVENTS, + g_message ("touch %s:\twindow %ld\n\ttouch id: %u\n\tpointer emulating: %d", + ev->evtype == XI_TouchBegin ? "begin" : "end", + xev->event, + xev->detail, + xev->flags & XITouchEmulatingPointer)); + if (ev->evtype == XI_TouchBegin) event->touch.type = GDK_TOUCH_BEGIN; else if (ev->evtype == XI_TouchEnd) @@ -1306,7 +1331,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, event->touch.sequence = GUINT_TO_POINTER (xev->detail); - if (xev->flags & (XIPointerEmulated | XITouchEmulatingPointer)) + if (xev->flags & XITouchEmulatingPointer) _gdk_event_set_pointer_emulated (event, TRUE); if (return_val == FALSE) @@ -1328,6 +1353,12 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, XIDeviceEvent *xev = (XIDeviceEvent *) ev; GdkDevice *source_device; + GDK_NOTE(EVENTS, + g_message ("touch update:\twindow %ld\n\ttouch id: %u\n\tpointer emulating: %d", + xev->event, + xev->detail, + xev->flags & XITouchEmulatingPointer)); + event->touch.window = window; event->touch.sequence = GUINT_TO_POINTER (xev->detail); event->touch.type = GDK_TOUCH_UPDATE; @@ -1348,7 +1379,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, event->touch.state |= GDK_BUTTON1_MASK; - if (xev->flags & (XIPointerEmulated | XITouchEmulatingPointer)) + if (xev->flags & XITouchEmulatingPointer) _gdk_event_set_pointer_emulated (event, TRUE); event->touch.axes = translate_axes (event->touch.device,