diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2014-05-09 18:21:05 -0400 |
---|---|---|
committer | Ulrich Sibiller <uli42@gmx.de> | 2016-10-19 21:40:29 +0200 |
commit | afc7138f952ff28a27a43452d6ea8e1ae82ae8cd (patch) | |
tree | ab0f9c208c2dbb3453e094a31dbbb1dec6b326f3 | |
parent | 88d496598fbf36724c1a825875a4becdfc29d600 (diff) | |
download | nx-libs-afc7138f952ff28a27a43452d6ea8e1ae82ae8cd.tar.gz nx-libs-afc7138f952ff28a27a43452d6ea8e1ae82ae8cd.tar.bz2 nx-libs-afc7138f952ff28a27a43452d6ea8e1ae82ae8cd.zip |
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 <otaylor@fishsoup.net>
Reviewed-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Alan 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.
-rw-r--r-- | nx-X11/lib/X11/Macros.c | 21 |
1 files changed, 21 insertions, 0 deletions
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) { |