MGS - If you are creating a transient window, the full 'transient effect' may not kick in properly until the window has been in a fully unmapped state. It's possible that you may not even notice that it's not fully transient. Just setting the transient flag before the window is initially mapped may not have the full desired result.
From my understanding:
Some of these (probably just 5) may be dependent on the window manager. If your window is not fully transient (as mentioned above) 1, 3 and/or 5 may not happen.
jenglish As a matter of fact all of them are WM-dependent. Most window managers I've seen do #1 and #4, and use a smaller set of window decorations (usually just a close button and sometimes a menu button). #2 is also pretty common.
The transient flag is only a hint; you shouldn't depend on any particular behaviour.
Of course, I've probably got this all wrong, and I should read the ICCCM.
If you're writing code to create a transient window, you should either:
I favour the second approach, as follows:
toplevel .t wm withdraw .t update idletasks wm transient .t . wm deiconify .t
jenglish Window managers are only required to examine the transient field when the window transitions from the Withdrawn to the Normal state, so the above is correct. You can also just do:
toplevel .t ; wm transient .t .
since .t won't be mapped until the next update, update idletasks, or the event loop is reentered.
MGS - Unfortunately, this 1-2 liner doesn't work for me (Linux, kwin/KDE 3). I have to resort to the 5 lines above.
MGS - As I understand it, a newly created window is not in a Withdrawn state, so it can't transition from Withdrawn to Normal, and so the wm doesn't (properly) examine the transient field. Or this yet again quite wm-specific?
MGS [2003/04/18] - It appears that the transient master must be mapped (not withdrawn or iconified) at the time of the 'wm transient' command, for the full transient effect to be in operation.
wm withdraw . update idletasks toplevel .t wm withdraw .t update idletasks wm transient .t . ; # This line doesn't give full transiewnt effect, because . is not mapped wm deiconify . update idletasks wm transient .t . ; # If you remove this line, you won't get full effect wm deiconify .t