[mutter/wip/barriers: 4/16] core: Add meta_input_event_get_source_device()



commit 704e2320c3f927f47fcece86bf30a51c9b389ea9
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 |   41 +++++++++++++++++++++++++++++++++++++++++
 src/core/input-events.h |    3 ++-
 2 files changed, 43 insertions(+), 1 deletions(-)
---
diff --git a/src/core/input-events.c b/src/core/input-events.c
index 96fee05..8166dd9 100644
--- a/src/core/input-events.c
+++ b/src/core/input-events.c
@@ -759,3 +759,44 @@ 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:
+        case XI_TouchBegin:
+        case XI_TouchEnd:
+        case XI_TouchUpdate:
+          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]