It turns out that the below patch from 2007 has broken it. Now if anybody knows where the mailing list archive has gone and how to find the thread related to this patch ...
For the time being you can circumvent the problem by removing the whole if ( FCheckIfEvent( dpy, &dummy, test_withdraw_request, (XPointer)&args)) { ... } from HandleMapRequestKeepRaised. -- commit 31fcfe2130b9c3d10fd7618d4c65290b42f64f11 Author: griph <griph> AuthorDate: Mon Dec 3 20:22:23 2007 +0000 Commit: griph <griph> CommitDate: Mon Dec 3 20:22:23 2007 +0000 * don't map new windows that have a pending ICCCM2 request to go into WithdrawnState (synthetic UnmapNotify) --- fvwm/events.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/fvwm/events.c b/fvwm/events.c index 65e194f..e51421e 100644 --- a/fvwm/events.c +++ b/fvwm/events.c @@ -228,6 +228,33 @@ static Bool test_map_request( return rc; } +/* Test for ICCCM2 withdraw requests by syntetic events on the root window */ +static Bool test_withdraw_request( + Display *display, XEvent *event, XPointer arg) +{ + check_if_event_args *cie_args; + Bool rc; + + cie_args = (check_if_event_args *)arg; + cie_args->ret_does_match = False; + if (event->type == UnmapNotify && + event->xunmap.window == cie_args->w && + event->xany.send_event == True && + event->xunmap.event == FW_W(&Scr.FvwmRoot)) + { + cie_args->ret_type = UnmapNotify; + cie_args->ret_does_match = True; + rc = cie_args->do_return_true; + } + else + { + cie_args->ret_type = 0; + rc = False; + } + + return rc; +} + Bool test_button_event( Display *display, XEvent *event, XPointer arg) { @@ -2897,6 +2924,22 @@ void HandleMapRequestKeepRaised( /* If the window has never been mapped before ... */ if (!fw || (fw && DO_REUSE_DESTROYED(fw))) { + Bool is_unmap_request_pending; + check_if_event_args args; + XEvent dummy; + + args.w = ew; + args.do_return_true = True; + args.do_return_true_cr = False; + if ( + FCheckIfEvent( + dpy, &dummy, test_withdraw_request, + (XPointer)&args)) { + /* The window is moved back to the WitdrawnState + * immideately. Don't map it. */ + return; + } + /* Add decorations. */ fw = AddWindow(ea->exc, ReuseWin, win_opts); if (fw == AW_NO_WINDOW) Ciao Dominik ^_^ ^_^ -- Dominik Vogt