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 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