diff --git a/hw/xnest/Cursor.c b/hw/xnest/Cursor.c index 17dcb7fdb..c65c77209 100644 --- a/hw/xnest/Cursor.c +++ b/hw/xnest/Cursor.c @@ -57,7 +57,7 @@ xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) .foreground = 1L, }; - xcb_aux_change_gc(xnestUpstreamInfo.conn, xnestBitmapGC->gid, valuemask, &values); + xcb_aux_change_gc(xnestUpstreamInfo.conn, xnestBitmapGC, valuemask, &values); uint32_t const winId = xnestDefaultWindows[pScreen->myNum]; @@ -72,7 +72,7 @@ xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) xcb_put_image(xnestUpstreamInfo.conn, XCB_IMAGE_FORMAT_XY_BITMAP, source, - xnestBitmapGC->gid, + xnestBitmapGC, pCursor->bits->width, pCursor->bits->height, 0, // x @@ -85,7 +85,7 @@ xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) xcb_put_image(xnestUpstreamInfo.conn, XCB_IMAGE_FORMAT_XY_BITMAP, mask, - xnestBitmapGC->gid, + xnestBitmapGC, pCursor->bits->width, pCursor->bits->height, 0, // x diff --git a/hw/xnest/Display.c b/hw/xnest/Display.c index 521ffca43..5e935d7d0 100644 --- a/hw/xnest/Display.c +++ b/hw/xnest/Display.c @@ -53,7 +53,7 @@ int xnestNumPixmapFormats; Drawable xnestDefaultDrawables[MAXDEPTH + 1]; Pixmap xnestIconBitmap; Pixmap xnestScreenSaverPixmap; -XlibGC xnestBitmapGC; +uint32_t xnestBitmapGC; unsigned long xnestEventMask; static int _X_NORETURN @@ -157,7 +157,12 @@ xnestOpenDisplay(int argc, char *argv[]) xnestDefaultDrawables[xnestPixmapFormats[i].depth] = pixmap; } - xnestBitmapGC = XCreateGC(xnestDisplay, xnestDefaultDrawables[1], 0L, NULL); + xnestBitmapGC = xcb_generate_id(xnestUpstreamInfo.conn); + xcb_create_gc(xnestUpstreamInfo.conn, + xnestBitmapGC, + xnestDefaultDrawables[1], + 0, + NULL); if (!(xnestUserGeometry & XValue)) xnestX = 0; diff --git a/hw/xnest/Display.h b/hw/xnest/Display.h index c42c4d222..633012456 100644 --- a/hw/xnest/Display.h +++ b/hw/xnest/Display.h @@ -35,7 +35,7 @@ extern int xnestNumPixmapFormats; extern Drawable xnestDefaultDrawables[MAXDEPTH + 1]; extern Pixmap xnestIconBitmap; extern Pixmap xnestScreenSaverPixmap; -extern XlibGC xnestBitmapGC; +extern uint32_t xnestBitmapGC; extern unsigned long xnestEventMask; void xnestOpenDisplay(int argc, char *argv[]); diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c index bcbdd291c..e10d778a7 100644 --- a/hw/xnest/GC.c +++ b/hw/xnest/GC.c @@ -86,9 +86,12 @@ xnestCreateGC(GCPtr pGC) pGC->miTranslate = 1; - xnestGCPriv(pGC)->gc = XCreateGC(xnestDisplay, - xnestDefaultDrawables[pGC->depth], - 0L, NULL); + xnestGCPriv(pGC)->gc = xcb_generate_id(xnestUpstreamInfo.conn); + xcb_create_gc(xnestUpstreamInfo.conn, + xnestGCPriv(pGC)->gc, + xnestDefaultDrawables[pGC->depth], + 0, + NULL); return TRUE; } @@ -192,13 +195,16 @@ xnestChangeGC(GCPtr pGC, unsigned long mask) void xnestCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst) { - XCopyGC(xnestDisplay, xnestGC(pGCSrc), mask, xnestGC(pGCDst)); + xcb_copy_gc(xnestUpstreamInfo.conn, + xnestGC(pGCSrc), + xnestGC(pGCDst), + mask); } void xnestDestroyGC(GCPtr pGC) { - XFreeGC(xnestDisplay, xnestGC(pGC)); + xcb_free_gc(xnestUpstreamInfo.conn, xnestGC(pGC)); } void diff --git a/hw/xnest/XNGC.h b/hw/xnest/XNGC.h index a695f7a3b..512f4627f 100644 --- a/hw/xnest/XNGC.h +++ b/hw/xnest/XNGC.h @@ -20,10 +20,8 @@ is" without express or implied warranty. #include "include/gcstruct.h" #include "include/privates.h" -/* This file uses the GC definition form Xlib.h as XlibGC. */ - typedef struct { - XlibGC gc; + uint32_t gc; } xnestPrivGC; extern DevPrivateKeyRec xnestGCPrivateKeyRec; diff --git a/hw/xnest/xcb.c b/hw/xnest/xcb.c index 18fbc09ff..83284361d 100644 --- a/hw/xnest/xcb.c +++ b/hw/xnest/xcb.c @@ -38,9 +38,7 @@ uint32_t xnest_upstream_gc(GCPtr pGC) { if (pGC == NULL) return 0; xnestPrivGC *priv = dixLookupPrivate(&(pGC)->devPrivates, xnestGCPrivateKey); - if ((priv == NULL) || (priv->gc == NULL)) return 0; + if (priv == NULL) return 0; - // make sure Xlib's GC cache is written out before using (server side) GC. - XFlushGC(xnestDisplay, priv->gc); - return priv->gc->gid; + return priv->gc; }