[mutter/wip/multitouch: 65/73] core: Add meta_input_event_get_source_device()



commit 83096642f07e6ff112e7d1226d3523cef320b056
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Sep 2 21:15:41 2011 +0200

    core: Add meta_input_event_get_source_device()
    
    This function would return the slave device behind and
    event, this is mostly needed for touch passive grabs,
    as XIAllowTouchEvents() at the moment requires a slave
    device, this has changed in the latest drafts of the
    multitouch protocol.

 src/core/input-events.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 src/core/input-events.h |    3 ++-
 2 files changed, 45 insertions(+), 1 deletions(-)
---
diff --git a/src/core/input-events.c b/src/core/input-events.c
index 46e7554..c0110ff 100644
--- a/src/core/input-events.c
+++ b/src/core/input-events.c
@@ -777,3 +777,46 @@ meta_input_event_get_device (MetaDisplay *display,
 
   return NULL;
 }
+
+MetaDevice *
+meta_input_event_get_source_device (MetaDisplay *display,
+                                    XEvent      *ev)
+{
+#ifdef HAVE_XINPUT2
+  if (ev->type == GenericEvent &&
+      ev->xcookie.extension == display->xinput2_opcode)
+    {
+      XIEvent *xev;
+
+      g_assert (display->have_xinput2 == TRUE);
+
+      xev = (XIEvent *) ev->xcookie.data;
+
+      switch (xev->evtype)
+        {
+        case XI_Motion:
+        case XI_ButtonPress:
+        case XI_ButtonRelease:
+        case XI_KeyPress:
+        case XI_KeyRelease:
+#ifdef HAVE_XTOUCH
+        case XI_TouchBegin:
+        case XI_TouchEnd:
+        case XI_TouchUpdate:
+#endif /* HAVE_XTOUCH */
+          return meta_device_map_lookup (display->device_map,
+                                         ((XIDeviceEvent *) xev)->sourceid);
+        case XI_FocusIn:
+        case XI_FocusOut:
+        case XI_Enter:
+        case XI_Leave:
+          return meta_device_map_lookup (display->device_map,
+                                         ((XIEnterEvent *) xev)->sourceid);
+        default:
+          break;
+        }
+    }
+#endif
+
+  return NULL;
+}
diff --git a/src/core/input-events.h b/src/core/input-events.h
index 939764d..a53d1e3 100644
--- a/src/core/input-events.h
+++ b/src/core/input-events.h
@@ -80,6 +80,7 @@ gboolean meta_input_event_get_crossing_details (MetaDisplay *display,
 
 MetaDevice *meta_input_event_get_device        (MetaDisplay *display,
                                                 XEvent      *ev);
-
+MetaDevice *meta_input_event_get_source_device (MetaDisplay *display,
+                                                XEvent      *ev);
 
 #endif /* META_EVENT_H */



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