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

Reply via email to