MGS notes that 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.
From my understanding:
- The transient window should always remain on-top, or in front, of the parent window.
- Minimizing the parent window should also minimize/withdraw the transient window.
- The geometry of the transient window should not change when moving/resizing/minimizing/maximizing the parent window.
- The transient window should never have an application (taskbar) icon.
- The window manager should not draw minimize/maximize buttons for the transient window (only a close button).
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.
If you're writing code to create a transient window, you should either:
- wait until your toplevel is mapped, then make it transient, then withdraw and deiconify, OR
- create your toplevel, withdraw it, update idletasks, mark as transient, and then deiconify.
I favor the second approach, as follows:
toplevel .t
wm withdraw .t
update idletasks
wm transient .t .
wm deiconify .t