MGS notes that if you are creating a transient window, it 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:
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 * mark your window as transient, withdraw it, update idletasks, and then deiconify.
I favor the second approach, as follows:
toplevel .t wm withdraw .t update idletasks wm transient .t . wm deiconify .t