Use and : bind . {puts "Someone just iconified me."} More sophisticated programming recognizes "that toplevel bindings apply to every child widget, so you should also test that the widget '''is''' a toplevel" and also that "Unmap will also happen when you switch desktops, so you have to ... test the state" (in the words of [Donald Arsenau] ...): 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 multi-desktop is handled the same as an iconify, so yous till might get 'false' hits."