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 po...@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 > @@ -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); > @@ -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