diff options
author | marha <marha@users.sourceforge.net> | 2009-09-02 19:17:00 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2009-09-02 19:17:00 +0000 |
commit | 7842eeba5f0567175c41728d3eaae59fcbdef7a6 (patch) | |
tree | 53840a037bfe76f55afca5891b9eb689caa9094b /libX11/src/PutBEvent.c | |
parent | e5072ee10b7ce789b67554e9000070c78f0f3d89 (diff) | |
download | vcxsrv-7842eeba5f0567175c41728d3eaae59fcbdef7a6.tar.gz vcxsrv-7842eeba5f0567175c41728d3eaae59fcbdef7a6.tar.bz2 vcxsrv-7842eeba5f0567175c41728d3eaae59fcbdef7a6.zip |
Switch to libX11-1.2.99.901.tar.gz
Diffstat (limited to 'libX11/src/PutBEvent.c')
-rw-r--r-- | libX11/src/PutBEvent.c | 18 |
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, ©.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; |