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

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Thu, 6 Apr 2023 20:30:27 +0200

On Wed, Apr 05, 2023 at 05:11:49PM -0300, Lucas de Sena wrote:
> When embedded into another window, dmenu will fail with the BadMatch
> error if that window have not the same colormap/depth/visual as the
> root window.
>
> That happens because dmenu inherits the colormap/depth/visual from
> its parent, but draws on a pixmap created based on the root window
> using a GC created for the root window (see drw.c). A BadMatch will
> occur when copying the content of the pixmap into dmenu's window.
>
> A solution is to create dmenu's window inside root and then reparent
> it if embeded.
>
> See this mail[1] on ports_AT_openbsd.org mailing list for context.
>
> [1]: https://marc.info/?l=openbsd-ports&m=168072150814664&w=2
> ---
> dmenu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/dmenu.c b/dmenu.c
> index 4e7df12..62f1089 100644
> --- a/dmenu.c
> +++ b/dmenu.c
> _AT_@ -685,7 +685,7 @@ setup(void)
> swa.override_redirect = True;
> swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
> swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
> - win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0,
> + win = XCreateWindow(dpy, root, x, y, mw, mh, 0,
> CopyFromParent, CopyFromParent, CopyFromParent,
> CWOverrideRedirect | CWBackPixel | CWEventMask, &swa);
> XSetClassHint(dpy, win, &ch);
> _AT_@ -700,6 +700,7 @@ setup(void)
>
> XMapRaised(dpy, win);
> if (embed) {
> + XReparentWindow(dpy, win, parentwin, x, y);
> XSelectInput(dpy, parentwin, FocusChangeMask | SubstructureNotifyMask);
> if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && dws) {
> for (i = 0; i < du && dws[i] != win; ++i)
> --
> 2.40.0
>
>

Hi,

Applied and pushed to the repo, thanks!

-- 
Kind regards,
Hiltjo
Received on Thu Apr 06 2023 - 20:30:27 CEST

This archive was generated by hypermail 2.3.0 : Thu Apr 06 2023 - 20:36:37 CEST