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

Reply via email to