aboutsummaryrefslogtreecommitdiff
path: root/libX11/src/PutBEvent.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2009-09-02 21:09:13 +0000
committermarha <marha@users.sourceforge.net>2009-09-02 21:09:13 +0000
commit8fedf58693f42869528b41408ac4d6012839e973 (patch)
tree62a817bea7dfc71050292d302ba94f5e349c67a7 /libX11/src/PutBEvent.c
parentac14083f465166b298162a57fff0bad90e528fff (diff)
parent6f25a23db1df27e992c34f6fd4c82e83c44fc2e2 (diff)
downloadvcxsrv-8fedf58693f42869528b41408ac4d6012839e973.tar.gz
vcxsrv-8fedf58693f42869528b41408ac4d6012839e973.tar.bz2
vcxsrv-8fedf58693f42869528b41408ac4d6012839e973.zip
svn merge https://vcxsrv.svn.sourceforge.net/svnroot/vcxsrv/branches/released .
Diffstat (limited to 'libX11/src/PutBEvent.c')
-rw-r--r--libX11/src/PutBEvent.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/libX11/src/PutBEvent.c b/libX11/src/PutBEvent.c
index eca44f3af..03a9cd266 100644
--- a/libX11/src/PutBEvent.c
+++ b/libX11/src/PutBEvent.c
@@ -41,6 +41,7 @@ _XPutBackEvent (
register XEvent *event)
{
register _XQEvent *qelt;
+ XEvent store = *event;
if (!dpy->qfree) {
if ((dpy->qfree = (_XQEvent *) Xmalloc (sizeof (_XQEvent))) == NULL) {
@@ -48,11 +49,26 @@ _XPutBackEvent (
}
dpy->qfree->next = NULL;
}
+
+ /* unclaimed cookie? */
+ if (_XIsEventCookie(dpy, event))
+ {
+ XEvent copy = {0};
+ /* if not claimed, then just fetch and store again */
+ if (!event->xcookie.data) {
+ _XFetchEventCookie(dpy, &event->xcookie);
+ store = *event;
+ } else { /* if claimed, copy, client must free */
+ _XCopyEventCookie(dpy, &event->xcookie, &copy.xcookie);
+ store = copy;
+ }
+ }
+
qelt = dpy->qfree;
dpy->qfree = qelt->next;
qelt->qserial_num = dpy->next_event_serial_num++;
qelt->next = dpy->head;
- qelt->event = *event;
+ qelt->event = store;
dpy->head = qelt;
if (dpy->tail == NULL)
dpy->tail = qelt;