Just for the record, I'm a gwm user and not really a ctwm user (just playing around a bit), but I've had the same problem with flash fullscreen (but in gwm I can handle this type of stuff in my profile without changing the window manager source). The problem seems to be that flash fullscreen terminates immediately if you fiddle with the focus, not only when it loses focus, but also if you *give* it focus. Strange.
To see that this is so, change XSetInputFocus (dpy, w, RevertToPointerRoot, tim); in function SetFocus in file util.c to if(tmp_win && tmp_win->full_name != "npviewer.bin") XSetInputFocus (dpy, w, RevertToPointerRoot, tim); (Also, add "npviewer.bin" to the "NoBorder" and "AlwaysOnTop" lists in your .ctwmrc file, and add a specification of "npviewer.bin" "+0+0" to the "WindowGeometries" list.) Then, flash fullscreen should not be a problem anymore. As a cleaner solution, I have added a "NoExplicitFocus" list to the .ctwmrc file, which is queried instead of hardcoding the application name in SetFocus. Patches to this list? Another useful change: In the "if (LookInList (Scr->WindowGeometries..." block in function AddWindow in file add_window.c, change ask_user = False; to if ((mask_ & XValue) && (mask_ & YValue)) ask_user = False; This allows giving size specifications in the WindowGeometries list in the .ctwmrc file, while still allowing manual placement of windows. Happy hacking! Tadziu