[PATCH 32/42] dix: add real_event parameter to ActivatePassiveGrab

Peter Hutterer peter.hutterer at who-t.net
Wed Dec 14 19:02:09 PST 2011


For touch events with pointer emulation, the event that triggers the grab
(the pointer event) is not the same as the actual event (the touch event).
For replaying, we need to store the real event then.

No effective changes at this point, for the current caller event and
real_event are identical.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 dix/events.c    |   10 +++++++---
 include/input.h |    2 +-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/dix/events.c b/dix/events.c
index f8ea94f..d8530ef 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3643,11 +3643,15 @@ BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin)
  * @param device The device of the event to check.
  * @param grab The grab to check.
  * @param event The current device event.
+ * @param real_event The original event, in case of touch emulation. The
+ * real event is the one stored in the sync queue.
  *
  * @return Whether the grab has been activated.
  */
 Bool
-ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event)
+ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event,
+                    InternalEvent *real_event)
+
 {
     SpritePtr pSprite = device->spriteInfo->sprite;
     GrabInfoPtr grabinfo = &device->deviceGrab;
@@ -3719,7 +3723,7 @@ ActivatePassiveGrab(DeviceIntPtr device, GrabPtr grab, InternalEvent *event)
 
     if (grabinfo->sync.state == FROZEN_NO_EVENT)
         grabinfo->sync.state = FROZEN_WITH_EVENT;
-    *grabinfo->sync.event = event->device_event;
+    *grabinfo->sync.event = real_event->device_event;
 
     free(xE);
     return TRUE;
@@ -3943,7 +3947,7 @@ CheckPassiveGrabsOnWindow(
         if (!CheckPassiveGrab(device, grab, event, checkCore, tempGrab))
             continue;
 
-        if (activate && !ActivatePassiveGrab(device, grab, event))
+        if (activate && !ActivatePassiveGrab(device, grab, event, event))
             continue;
 
         break;
diff --git a/include/input.h b/include/input.h
index ae44a96..f54ad80 100644
--- a/include/input.h
+++ b/include/input.h
@@ -634,7 +634,7 @@ void FixUpEventFromWindow(SpritePtr pSprite,
 extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y);
 extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win);
 extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab,
-                                InternalEvent *ev);
+                                InternalEvent *ev, InternalEvent *real_event);
 /**
  * Masks specifying the type of event to deliver for an InternalEvent; used
  * by EventIsDeliverable.
-- 
1.7.7.1



More information about the xorg-devel mailing list