From 380861589690bcbe8b04b7a2c23b5dd5d10c4bf8 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 19 Oct 2015 11:46:41 +1000 Subject: Don't use raw serial numbers in XIEvents cookie->serial is an Xlib contoction, provided by _XSetLastRequestRead(). This serial may be different to the raw serial number from the wire protocol. This causes issues when the raw serial is used to e.g. compare the event to other non-XI events. Use the cookie's serial number instead. https://bugzilla.gnome.org/show_bug.cgi?id=756649 See also https://bugs.freedesktop.org/show_bug.cgi?id=64687 Signed-off-by: Peter Hutterer --- src/XExtInt.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/XExtInt.c b/src/XExtInt.c index 672d69a..a35fcc6 100644 --- a/src/XExtInt.c +++ b/src/XExtInt.c @@ -1521,7 +1521,7 @@ wireToDeviceEvent(xXIDeviceEvent *in, XGenericEventCookie* cookie) out = next_block(&ptr_lib, sizeof(XIDeviceEvent)); out->display = cookie->display; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->extension = in->extension; out->evtype = in->evtype; out->send_event = ((in->type & 0x80) != 0); @@ -1794,7 +1794,7 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie) cookie->data = out = malloc(sizeof(XIDeviceChangedEvent) + len); out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->display = cookie->display; out->extension = in->extension; out->evtype = in->evtype; @@ -1827,7 +1827,7 @@ wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie) out->info = (XIHierarchyInfo*)&out[1]; out->display = cookie->display; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->extension = in->extension; out->evtype = in->evtype; out->send_event = ((in->type & 0x80) != 0); @@ -1868,7 +1868,7 @@ wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cook out = next_block(&ptr, sizeof(XIRawEvent)); out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->display = cookie->display; out->extension = in->extension; out->evtype = in->evtype; @@ -1919,7 +1919,7 @@ wireToEnterLeave(xXIEnterEvent *in, XGenericEventCookie *cookie) out->buttons.mask = (unsigned char*)&out[1]; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->display = cookie->display; out->extension = in->extension; out->evtype = in->evtype; @@ -1962,7 +1962,7 @@ wireToPropertyEvent(xXIPropertyEvent *in, XGenericEventCookie *cookie) cookie->data = out; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->extension = in->extension; out->evtype = in->evtype; out->send_event = ((in->type & 0x80) != 0); @@ -1983,7 +1983,7 @@ wireToTouchOwnershipEvent(xXITouchOwnershipEvent *in, cookie->data = out; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->display = cookie->display; out->extension = in->extension; out->evtype = in->evtype; @@ -2011,7 +2011,7 @@ wireToBarrierEvent(xXIBarrierEvent *in, XGenericEventCookie *cookie) out->display = cookie->display; out->type = in->type; - out->serial = in->sequenceNumber; + out->serial = cookie->serial; out->extension = in->extension; out->evtype = in->evtype; out->send_event = ((in->type & 0x80) != 0); -- cgit v1.2.1