Re: [hackers] [st][PATCH] fix BadMatch error when embedding on some windows

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Fri, 9 Aug 2024 13:36:43 +0200

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
> _AT_@ -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;
>
> _AT_@ -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
Received on Fri Aug 09 2024 - 13:36:43 CEST

This archive was generated by hypermail 2.3.0 : Fri Aug 09 2024 - 13:36:56 CEST