From afc7138f952ff28a27a43452d6ea8e1ae82ae8cd Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Fri, 9 May 2014 18:21:05 -0400 Subject: 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: Owen W. Taylor Reviewed-by: Uli Schlachter Signed-off-by: Alan Coopersmith Backported-to-NX-by: Ulrich Sibiller : Added #ifdefs to be aware of changes regarding XCB in case we later switch to XCB. --- nx-X11/lib/X11/Macros.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'nx-X11') diff --git a/nx-X11/lib/X11/Macros.c b/nx-X11/lib/X11/Macros.c index cfc083a01..d5a3a0485 100644 --- a/nx-X11/lib/X11/Macros.c +++ b/nx-X11/lib/X11/Macros.c @@ -30,6 +30,9 @@ in this Software without prior written authorization from The Open Group. #include "Xlibint.h" #define XUTIL_DEFINE_FUNCTIONS #include "Xutil.h" +#if USE_XCB +#include "Xxcbint.h" +#endif /* * This file makes full definitions of routines for each macro. @@ -135,10 +138,28 @@ int XBitmapPad(Display *dpy) { return (BitmapPad(dpy)); } int XImageByteOrder(Display *dpy) { return (ImageByteOrder(dpy)); } +#if !USE_XCB unsigned long XNextRequest(Display *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) { -- cgit v1.2.3