Commit afc7138f authored by Owen W. Taylor's avatar Owen W. Taylor Committed by Ulrich Sibiller

Fix XNextRequest() after direct usage of XCB

When XCB owns the X socket, dpy->request is not updated, so NextRequest() and XNextRequest() return the wrong value. There's nothing we can do to fix NextRequest() while retaining ABI compat, but change XNextRequest() to grab the socket back from XCB, updating dpy->request. Signed-off-by: 's avatarOwen W. Taylor <otaylor@fishsoup.net> Reviewed-by: 's avatarUli Schlachter <psychon@znc.in> Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com> Backported-to-NX-by: Ulrich Sibiller <uli42@gmx.de>: Added #ifdefs to be aware of changes regarding XCB in case we later switch to XCB.
parent 88d49659
...@@ -30,6 +30,9 @@ in this Software without prior written authorization from The Open Group. ...@@ -30,6 +30,9 @@ in this Software without prior written authorization from The Open Group.
#include "Xlibint.h" #include "Xlibint.h"
#define XUTIL_DEFINE_FUNCTIONS #define XUTIL_DEFINE_FUNCTIONS
#include "Xutil.h" #include "Xutil.h"
#if USE_XCB
#include "Xxcbint.h"
#endif
/* /*
* This file makes full definitions of routines for each macro. * This file makes full definitions of routines for each macro.
...@@ -135,10 +138,28 @@ int XBitmapPad(Display *dpy) { return (BitmapPad(dpy)); } ...@@ -135,10 +138,28 @@ int XBitmapPad(Display *dpy) { return (BitmapPad(dpy)); }
int XImageByteOrder(Display *dpy) { return (ImageByteOrder(dpy)); } int XImageByteOrder(Display *dpy) { return (ImageByteOrder(dpy)); }
#if !USE_XCB
unsigned long XNextRequest(Display *dpy) unsigned long XNextRequest(Display *dpy)
{ {
return (NextRequest(dpy)); return (NextRequest(dpy));
} }
#else
/* XNextRequest() differs from the rest of the functions here because it is
* no longer a macro wrapper - when libX11 is being used mixed together
* with direct use of xcb, the next request field of the Display structure will
* not be updated. We can't fix the NextRequest() macro in any easy way,
* but we can at least make XNextRequest() do the right thing.
*/
unsigned long XNextRequest(Display *dpy)
{
unsigned long next_request;
LockDisplay(dpy);
next_request = _XNextRequest(dpy);
UnlockDisplay(dpy);
return next_request;
}
#endif
unsigned long XLastKnownRequestProcessed(Display *dpy) unsigned long XLastKnownRequestProcessed(Display *dpy)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment