aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2014-05-09 18:21:05 -0400
committerUlrich Sibiller <uli42@gmx.de>2016-10-19 21:40:29 +0200
commitafc7138f952ff28a27a43452d6ea8e1ae82ae8cd (patch)
treeab0f9c208c2dbb3453e094a31dbbb1dec6b326f3
parent88d496598fbf36724c1a825875a4becdfc29d600 (diff)
downloadnx-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.c21
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)
{