Use and : bind . {puts "Someone just iconified me."} More sophisticated programming recognizes "that [toplevel] [bind]ings apply to every child [widget], so you should also test that the widget '''is''' a toplevel" and moreover that "Unmap will also happen when you switch desktops, so you have to ... test the state" (in the words of [Donald Arseneau] ...): bind . {unmapper %W} proc unmapper W { if {[string equal [winfo toplevel $W] $W] && [string equal [wm state $W] iconic]} { puts "Minimizing $W." } [Bruce Hartweg] adds ..., "Also note that with some [WM]s the multidesktop is handled the same as an iconify, so you still might get 'false' hits."