URI: 
       fix BadMatch error when embedding on some windows - st - simple terminal
  HTML git clone git://git.suckless.org/st
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a0274bc20e11d8672bb2953fdd1d3010c0e708c5
   DIR parent 5dbcca49263be094fc38159c297458ae323ef647
  HTML Author: Lucas de Sena <lucas@seninha.org>
       Date:   Fri,  9 Aug 2024 13:33:47 +0200
       
       fix BadMatch error when embedding on some windows
       
       When embedded, st fails with BadMatch error if the embedder's window has
       non-default colormap/depth/visual.  This commit fixes that by creating
       st's window inside root and then reparent it into embedder.
       
       The reference window for dc.gc is also changed to match root's visuals.
       
       A similar commit had been made for dmenu[1].
       See this issue[2] on github for context.
       
       [1]: https://git.suckless.org/dmenu/commit/0fe460dbd469a1d5b6a7140d0e1801935e4a923b.html
       [2]: https://github.com/phillbush/xfiles/issues/47
       
       Diffstat:
         M x.c                                 |      11 +++++++----
       
       1 file changed, 7 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/x.c b/x.c
       @@ -1131,7 +1131,7 @@ xinit(int cols, int rows)
        {
                XGCValues gcvalues;
                Cursor cursor;
       -        Window parent;
       +        Window parent, root;
                pid_t thispid = getpid();
                XColor xmousefg, xmousebg;
        
       @@ -1168,16 +1168,19 @@ xinit(int cols, int rows)
                        | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
                xw.attrs.colormap = xw.cmap;
        
       +        root = XRootWindow(xw.dpy, xw.scr);
                if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0))))
       -                parent = XRootWindow(xw.dpy, xw.scr);
       -        xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t,
       +                parent = root;
       +        xw.win = XCreateWindow(xw.dpy, root, xw.l, xw.t,
                                win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput,
                                xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity
                                | CWEventMask | CWColormap, &xw.attrs);
       +        if (parent != root)
       +                XReparentWindow(xw.dpy, xw.win, parent, xw.l, xw.t);
        
                memset(&gcvalues, 0, sizeof(gcvalues));
                gcvalues.graphics_exposures = False;
       -        dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
       +        dc.gc = XCreateGC(xw.dpy, xw.win, GCGraphicsExposures,
                                &gcvalues);
                xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
                                DefaultDepth(xw.dpy, xw.scr));