On Wed, Aug 07, 2024 at 11:55:59PM -0300, Lucas de Sena wrote: > 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 > --- > x.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/x.c b/x.c > index bd23686..d73152b 100644 > --- 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)); > -- > 2.45.2 > >
Hi Lucas, Thanks for the patch! I pushed it to the repo. -- Kind regards, Hiltjo