Version 3 of Modal dialogs

Updated 2002-06-20 08:42:59

Arjen Markus I have combined the advice by Marty Backe and Erik Leunissen into a small receipe for creating modal dialog(ue)s.

I felt a receipe was needed as the proper implementation requires:

both of which are somewhat obscure commands.

I have tested the code on UNIX (Sun Solaris with CDE window manager, Tcl/Tk 8.3.1) and Windows NT, Tcl/Tk 8.3.4). I have not paid any attention to the layout of the two windows :-)


 #
 # Create a button in the . window that displays a message box when pressed
 #
 button .hi -text Hi -command {tk_messageBox -message "Hi"}
 pack .hi
 #
 # Create a second window which acts as modal dialogue:
 # - make sure it is on top (first wait for the . window!)
 # - grab the display (locally)
 # - wait for the dialogue to disappear
 #
 # Note: the implementation is fairly rigorous. Leaving out
 #       some of the [wm] commands may work on a particular platform,
 #       but this way it works well on both UNIX and Windows)
 #       Leaving out [wm transient] gives a different appearance
 #       on Windows.
 #
 tkwait visibility .

 toplevel .f
 button .f.b -text Close -command {destroy .f} 
 pack .f.b
 grab .f
 wm transient .f .
 wm protocol .f WM_DELETE_WINDOW {grab release .f; destroy .f}
 raise .f
 tkwait window .f 

Category Application