Patch #485959: Various changes to Tix demos.
diff --git a/Demo/tix/samples/Balloon.py b/Demo/tix/samples/Balloon.py
index df90660..825ae6a 100755
--- a/Demo/tix/samples/Balloon.py
+++ b/Demo/tix/samples/Balloon.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
-# 
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -17,29 +17,52 @@
 
 import Tix
 
-def RunSample(w):
-    status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
-    status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
+TCL_ALL_EVENTS		= 0
 
-    # Create two mysterious widgets that need balloon help
-    button1 = Tix.Button(w, text='Something Unexpected',
-			 command=lambda w=w: w.destroy())
-    button2 = Tix.Button(w, text='Something Else Unexpected')
-    button2['command'] = lambda w=button2: w.destroy()
-    button1.pack(side=Tix.TOP, expand=1)
-    button2.pack(side=Tix.TOP, expand=1)
+def RunSample (root):
+    balloon = DemoBalloon(root)
+    balloon.mainloop()
+    balloon.destroy()
 
-    # Create the balloon widget and associate it with the widgets that we want
-    # to provide tips for:
-    b = Tix.Balloon(w, statusbar=status)
+class DemoBalloon:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
 
-    b.bind_widget(button1, balloonmsg='Close Window',
-		  statusmsg='Press this button to close this window')
-    b.bind_widget(button2, balloonmsg='Self-destruct button',
-		  statusmsg='Press this button and it will destroy itself')
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+        status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
+        status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
+
+        # Create two mysterious widgets that need balloon help
+        button1 = Tix.Button(w, text='Something Unexpected',
+                             command=self.quitcmd)
+        button2 = Tix.Button(w, text='Something Else Unexpected')
+        button2['command'] = lambda w=button2: w.destroy()
+        button1.pack(side=Tix.TOP, expand=1)
+        button2.pack(side=Tix.TOP, expand=1)
+
+        # Create the balloon widget and associate it with the widgets that we want
+        # to provide tips for:
+        b = Tix.Balloon(w, statusbar=status)
+
+        b.bind_widget(button1, balloonmsg='Close Window',
+                      statusmsg='Press this button to close this window')
+        b.bind_widget(button2, balloonmsg='Self-destruct button',
+                      statusmsg='Press this button and it will destroy itself')
+
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        foundEvent = 1
+        while self.exit < 0 and foundEvent > 0:
+            foundEvent = self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 if __name__ == '__main__':
     root = Tix.Tk()
-
     RunSample(root)
-    root.mainloop()
diff --git a/Demo/tix/samples/BtnBox.py b/Demo/tix/samples/BtnBox.py
index f21cc15..57d02df 100755
--- a/Demo/tix/samples/BtnBox.py
+++ b/Demo/tix/samples/BtnBox.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
diff --git a/Demo/tix/samples/CmpImg.py b/Demo/tix/samples/CmpImg.py
index 4e03bc1..4e08df7 100755
--- a/Demo/tix/samples/CmpImg.py
+++ b/Demo/tix/samples/CmpImg.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
diff --git a/Demo/tix/samples/ComboBox.py b/Demo/tix/samples/ComboBox.py
index 84b1b30..afecea4 100755
--- a/Demo/tix/samples/ComboBox.py
+++ b/Demo/tix/samples/ComboBox.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -85,13 +85,15 @@
     top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
 
 def select_month(event=None):
-    print "Month =", demo_month.get()
+    # tixDemo:Status "Month = %s" % demo_month.get()
+    pass
 
 def select_year(event=None):
-    print "Year =", demo_year.get()
+    # tixDemo:Status "Year = %s" % demo_year.get()
+    pass
 
 def ok_command(w):
-    print "Month =", demo_month.get(), ", Year=", demo_year.get()
+    # tixDemo:Status "Month = %s, Year= %s" % (demo_month.get(), demo_year.get())
     w.destroy()
 
 if __name__ == '__main__':
diff --git a/Demo/tix/samples/Control.py b/Demo/tix/samples/Control.py
index 4b31ced..e85ee84 100755
--- a/Demo/tix/samples/Control.py
+++ b/Demo/tix/samples/Control.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
-# 
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -17,57 +17,82 @@
 # This example program uses three Control widgets. One lets you select
 # integer values; one lets you select floating point values and the last
 # one lets you select a few names.
-#
+
 import Tix
 
-def RunSample(w):
-    global demo_maker, demo_thrust, demo_num_engines
+TCL_ALL_EVENTS		= 0
 
-    demo_maker = Tix.StringVar()
-    demo_thrust = Tix.DoubleVar()
-    demo_num_engines = Tix.IntVar()
-    demo_maker.set('P&W')
-    demo_thrust.set(20000.0)
-    demo_num_engines.set(2)
+def RunSample (root):
+    control = DemoControl(root)
+    control.mainloop()
+    control.destroy()
 
-    top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
+class DemoControl:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
 
-    # $w.top.a allows only integer values
-    #
-    # [Hint] The -options switch sets the options of the subwidgets.
-    # [Hint] We set the label.width subwidget option of the Controls to 
-    #        be 16 so that their labels appear to be aligned.
-    #
-    a = Tix.Control(top, label='Number of Engines: ', integer=1,
-		    variable=demo_num_engines, min=1, max=4,
-		    options='entry.width 10 label.width 20 label.anchor e')
-    
-    b = Tix.Control(top, label='Thrust: ', integer=0,
-		    min='10000.0', max='60000.0', step=500,
-		    variable=demo_thrust,
-		    options='entry.width 10 label.width 20 label.anchor e')
+        global demo_maker, demo_thrust, demo_num_engines
 
-    c = Tix.Control(top, label='Engine Maker: ', value='P&W',
-		    variable=demo_maker,
-		    options='entry.width 10 label.width 20 label.anchor e')
+        demo_maker = Tix.StringVar()
+        demo_thrust = Tix.DoubleVar()
+        demo_num_engines = Tix.IntVar()
+        demo_maker.set('P&W')
+        demo_thrust.set(20000.0)
+        demo_num_engines.set(2)
 
-    # We can't define these in the init because the widget 'c' doesn't
-    # exist yet and we need to reference it
-    c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
-    c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
-    c['validatecmd'] = lambda w=c: validate_maker(w)
+        top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
 
-    a.pack(side=Tix.TOP, anchor=Tix.W)
-    b.pack(side=Tix.TOP, anchor=Tix.W)
-    c.pack(side=Tix.TOP, anchor=Tix.W)
+        # $w.top.a allows only integer values
+        #
+        # [Hint] The -options switch sets the options of the subwidgets.
+        # [Hint] We set the label.width subwidget option of the Controls to 
+        #        be 16 so that their labels appear to be aligned.
+        #
+        a = Tix.Control(top, label='Number of Engines: ', integer=1,
+                        variable=demo_num_engines, min=1, max=4,
+                        options='entry.width 10 label.width 20 label.anchor e')
 
-    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
-    box.add('ok', text='Ok', underline=0, width=6,
-	    command=lambda w=w: ok_command(w))
-    box.add('cancel', text='Cancel', underline=0, width=6,
-	    command=lambda w=w: w.destroy())
-    box.pack(side=Tix.BOTTOM, fill=Tix.X)
-    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+        b = Tix.Control(top, label='Thrust: ', integer=0,
+                        min='10000.0', max='60000.0', step=500,
+                        variable=demo_thrust,
+                        options='entry.width 10 label.width 20 label.anchor e')
+
+        c = Tix.Control(top, label='Engine Maker: ', value='P&W',
+                        variable=demo_maker,
+                        options='entry.width 10 label.width 20 label.anchor e')
+
+        # We can't define these in the init because the widget 'c' doesn't
+        # exist yet and we need to reference it
+        c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
+        c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
+        c['validatecmd'] = lambda w=c: validate_maker(w)
+
+        a.pack(side=Tix.TOP, anchor=Tix.W)
+        b.pack(side=Tix.TOP, anchor=Tix.W)
+        c.pack(side=Tix.TOP, anchor=Tix.W)
+
+        box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+        box.add('ok', text='Ok', underline=0, width=6,
+                command=self.okcmd)
+        box.add('cancel', text='Cancel', underline=0, width=6,
+                command=self.quitcmd)
+        box.pack(side=Tix.BOTTOM, fill=Tix.X)
+        top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+    def okcmd (self):
+        # tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
+        self.quitcmd()
+        
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 maker_list = ['P&W', 'GE', 'Rolls Royce']
 
@@ -92,11 +117,6 @@
     # Works here though. Why ? Beats me.
     return maker_list[i]
 
-def ok_command(w):
-    print "Selected", demo_num_engines.get(), "of", demo_maker.get(), " engines each of thrust", demo_thrust.get()
-    w.destroy()
-
 if __name__ == '__main__':
     root = Tix.Tk()
     RunSample(root)
-    root.mainloop()
diff --git a/Demo/tix/samples/DirList.py b/Demo/tix/samples/DirList.py
index 3064768..b2aad33 100755
--- a/Demo/tix/samples/DirList.py
+++ b/Demo/tix/samples/DirList.py
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py":  it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
@@ -19,15 +19,9 @@
 import Tix, os, copy
 from Tkconstants import *
 
-TCL_DONT_WAIT		= 1<<1
-TCL_WINDOW_EVENTS	= 1<<2
-TCL_FILE_EVENTS		= 1<<3
-TCL_TIMER_EVENTS	= 1<<4
-TCL_IDLE_EVENTS		= 1<<5
 TCL_ALL_EVENTS		= 0
 
 def RunSample (root):
-    global dirlist
     dirlist = DemoDirList(root)
     dirlist.mainloop()
     dirlist.destroy()
@@ -38,7 +32,7 @@
         self.exit = -1
         
         z = w.winfo_toplevel()
-        z.wm_title('Tix.DirList Widget Demo')
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
         
         # Create the tixDirList and the tixLabelEntry widgets on the on the top
         # of the dialog box
@@ -98,7 +92,6 @@
                      command = lambda self=self: self.quitcmd () )
 
         box.pack( anchor='s', fill='x', side=BOTTOM)
-        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
 
     def copy_name (self, dir, ent):
         # This should work as it is the entry's textvariable
@@ -108,24 +101,21 @@
         ent.entry.insert(0, self.dlist_dir)
 
     def okcmd (self):
-        # tixDemo:Status "You have selected the directory" + $self.dlist_dir
-
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
         self.quitcmd()
 
     def quitcmd (self):
-        # self.root.destroy()
         self.exit = 0
 
     def mainloop(self):
         while self.exit < 0:
             self.root.tk.dooneevent(TCL_ALL_EVENTS)
-        # self.root.tk.dooneevent(TCL_DONT_WAIT)
 
     def destroy (self):
         self.root.destroy()
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     import tkMessageBox, traceback
diff --git a/Demo/tix/samples/DirTree.py b/Demo/tix/samples/DirTree.py
index 7bf813c..d007a2b 100755
--- a/Demo/tix/samples/DirTree.py
+++ b/Demo/tix/samples/DirTree.py
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py":  it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
@@ -19,16 +19,21 @@
 import Tix, os, copy
 from Tkconstants import *
 
-def RunSample (w):
-    DemoDirTree(w)
+TCL_ALL_EVENTS		= 0
+
+def RunSample (root):
+    dirtree = DemoDirTree(root)
+    dirtree.mainloop()
+    dirtree.destroy()
 
 class DemoDirTree:
     def __init__(self, w):
         self.root = w
+        self.exit = -1
         
         z = w.winfo_toplevel()
-        z.wm_title('Tix.DirTree Widget Demo')
-        
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
         # Create the tixDirTree and the tixLabelEntry widgets on the on the top
         # of the dialog box
 
@@ -90,19 +95,24 @@
         ent.entry.insert(0, self.dlist_dir)
 
     def okcmd (self):
-        # tixDemo:Status "You have selected the directory" + $self.dlist_dir
-
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
         self.quitcmd()
 
     def quitcmd (self):
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
         self.root.destroy()
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
 
diff --git a/Demo/tix/samples/NoteBook.py b/Demo/tix/samples/NoteBook.py
index 993dcc6..abf3bfd 100755
--- a/Demo/tix/samples/NoteBook.py
+++ b/Demo/tix/samples/NoteBook.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
diff --git a/Demo/tix/samples/OptMenu.py b/Demo/tix/samples/OptMenu.py
index 2d05938..ecb0c86 100755
--- a/Demo/tix/samples/OptMenu.py
+++ b/Demo/tix/samples/OptMenu.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -59,7 +59,7 @@
     top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
 
 def ok_command(w):
-    print "Convert file from", demo_opt_from.get(), " to", demo_opt_to.get()
+    # tixDemo:Status "Convert file from %s to %s" % ( demo_opt_from.get(), demo_opt_to.get())
     w.destroy()
 
 if __name__ == '__main__':
diff --git a/Demo/tix/samples/PopMenu.py b/Demo/tix/samples/PopMenu.py
index c2301cf..602eafd 100755
--- a/Demo/tix/samples/PopMenu.py
+++ b/Demo/tix/samples/PopMenu.py
@@ -1,10 +1,11 @@
-# Tix Demostration Program
-# 
-# $Id$
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 #
+#	$Id$
+#
+# Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
diff --git a/Demo/tix/samples/SHList1.py b/Demo/tix/samples/SHList1.py
index f4294ee..0114dc8 100755
--- a/Demo/tix/samples/SHList1.py
+++ b/Demo/tix/samples/SHList1.py
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
@@ -15,94 +15,118 @@
 
 import Tix
 
-def RunSample (w) :
+TCL_ALL_EVENTS		= 0
 
-    # We create the frame and the ScrolledHList widget
-    # at the top of the dialog box
-    #
-    top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
-
-    # Put a simple hierachy into the HList (two levels). Use colors and
-    # separator widgets (frames) to make the list look fancy
-    #
-    top.a  = Tix.ScrolledHList(top)
-    top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
-
-
-    # This is our little relational database
-    #
-    bosses = [
-	('jeff',  'Jeff Waxman'),
-	('john',  'John Lee'),
-	('peter', 'Peter Kenson')
-    ]
-
-    employees = [
-	('alex',  'john',  'Alex Kellman'),
-	('alan',  'john',  'Alan Adams'),
-	('andy',  'peter', 'Andreas Crawford'),
-	('doug',  'jeff',  'Douglas Bloom'),
-	('jon',   'peter', 'Jon Baraki'),
-	('chris', 'jeff',  'Chris Geoffrey'),
-	('chuck', 'jeff',  'Chuck McLean')
-    ]
-
-    hlist=top.a.hlist
-
-    # Let configure the appearance of the HList subwidget 
-    #
-    hlist.config( separator='.', width=25, drawbranch=0, indent=10)
-
-    count=0
-    for boss,name in bosses :
-	if count :
-	    f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
-		bd=2, relief=Tix.SUNKEN )
-
-	    hlist.add_child( itemtype=Tix.WINDOW, 
-		window=f, state=Tix.DISABLED )
-	
-	hlist.add(boss, itemtype=Tix.TEXT, text=name)
-	count = count+1
+def RunSample (root):
+    shlist = DemoSHList(root)
+    shlist.mainloop()
+    shlist.destroy()
     
+class DemoSHList:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
 
-    for person,boss,name in employees :
-	# '.' is the separator character we chose above
-	#
-	key= boss    + '.'     + person
-	#    ^^^^                ^^^^^^
-	#    parent entryPath /  child's name
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+        
+        # We create the frame and the ScrolledHList widget
+        # at the top of the dialog box
+        #
+        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
 
-	hlist.add( key, text=name )
+        # Put a simple hierachy into the HList (two levels). Use colors and
+        # separator widgets (frames) to make the list look fancy
+        #
+        top.a = Tix.ScrolledHList(top)
+        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
 
-	# [Hint] Make sure the keys (e.g. 'boss.person') you choose
-	#	 are unique names. If you cannot be sure of this (because of
-	#	 the structure of your database, e.g.) you can use the
-	#	 "add_child" command instead:
-	#
-	#  hlist.addchild( boss,  text=name)
-	#                  ^^^^
-	#                  parent entryPath 
+        # This is our little relational database
+        #
+        bosses = [
+            ('jeff',  'Jeff Waxman'),
+            ('john',  'John Lee'),
+            ('peter', 'Peter Kenson')
+        ]
+
+        employees = [
+            ('alex',  'john',  'Alex Kellman'),
+            ('alan',  'john',  'Alan Adams'),
+            ('andy',  'peter', 'Andreas Crawford'),
+            ('doug',  'jeff',  'Douglas Bloom'),
+            ('jon',   'peter', 'Jon Baraki'),
+            ('chris', 'jeff',  'Chris Geoffrey'),
+            ('chuck', 'jeff',  'Chuck McLean')
+        ]
+
+        hlist=top.a.hlist
+
+        # Let configure the appearance of the HList subwidget 
+        #
+        hlist.config( separator='.', width=25, drawbranch=0, indent=10)
+
+        count=0
+        for boss,name in bosses :
+            if count :
+                f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
+                    bd=2, relief=Tix.SUNKEN )
+
+                hlist.add_child( itemtype=Tix.WINDOW, 
+                    window=f, state=Tix.DISABLED )
+
+            hlist.add(boss, itemtype=Tix.TEXT, text=name)
+            count = count+1
 
 
-    # Use a ButtonBox to hold the buttons.
-    #
-    box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
-    box.add( 'ok',  text='Ok', underline=0,  width=6,
-	command = lambda w=w:  w.quit() )
+        for person,boss,name in employees :
+            # '.' is the separator character we chose above
+            #
+            key= boss    + '.'     + person
+            #    ^^^^                ^^^^^^
+            #    parent entryPath /  child's name
 
-    box.add( 'cancel', text='Cancel', underline=0, width=6,
-	command = lambda w=w:  w.quit() )
+            hlist.add( key, text=name )
 
-    box.pack( side=Tix.BOTTOM, fill=Tix.X)
-    top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+            # [Hint] Make sure the keys (e.g. 'boss.person') you choose
+            #	 are unique names. If you cannot be sure of this (because of
+            #	 the structure of your database, e.g.) you can use the
+            #	 "add_child" command instead:
+            #
+            #  hlist.addchild( boss,  text=name)
+            #                  ^^^^
+            #                  parent entryPath 
+
+
+        # Use a ButtonBox to hold the buttons.
+        #
+        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+        box.add( 'ok',  text='Ok', underline=0,  width=6,
+            command = self.okcmd)
+
+        box.add( 'cancel', text='Cancel', underline=0, width=6,
+            command = self.quitcmd)
+
+        box.pack( side=Tix.BOTTOM, fill=Tix.X)
+        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+
+    def okcmd (self):
+        self.quitcmd()
+
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
+
diff --git a/Demo/tix/samples/SHList2.py b/Demo/tix/samples/SHList2.py
index db24511..e82d1e5 100755
--- a/Demo/tix/samples/SHList2.py
+++ b/Demo/tix/samples/SHList2.py
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the PyTix demo program "tixwidget": it must have a
+# executed from the Tix demo program "tixwidget": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
@@ -18,128 +18,152 @@
 
 import Tix
 
-def RunSample (w) :
+TCL_ALL_EVENTS		= 0
 
-    # We create the frame and the ScrolledHList widget
-    # at the top of the dialog box
-    #
-    top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
-
-    # Put a simple hierachy into the HList (two levels). Use colors and
-    # separator widgets (frames) to make the list look fancy
-    #
-    top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
-
-    top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
-
-    hlist=top.a.hlist
-
-    # Create the title for the HList widget
-    #	>> Notice that we have set the hlist.header subwidget option to true
-    #      so that the header is displayed
-    #
-
-    boldfont=hlist.tk.call('tix','option','get','bold_font')
-
-    # First some styles for the headers
-    style={}
-    style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top,
-	anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
-
-    hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
-	style=style['header'])
-    hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
-	style=style['header'])
-
-    # Notice that we use 3 columns in the hlist widget. This way when the user
-    # expands the windows wide, the right side of the header doesn't look
-    # chopped off. The following line ensures that the 3 column header is
-    # not shown unless the hlist window is wider than its contents.
-    #
-    hlist.column_width(2,0)
-
-    # This is our little relational database
-    #
-    boss = ('doe', 'John Doe',	'Director')
-
-    managers = [
-	('jeff',  'Jeff Waxman',	'Manager'),
-	('john',  'John Lee',		'Manager'),
-	('peter', 'Peter Kenson',	'Manager')
-    ]
-
-    employees = [
-	('alex',  'john',	'Alex Kellman',		'Clerk'),
-	('alan',  'john',       'Alan Adams',		'Clerk'),
-	('andy',  'peter',      'Andreas Crawford',	'Salesman'),
-	('doug',  'jeff',       'Douglas Bloom',	'Clerk'),
-	('jon',   'peter',      'Jon Baraki',		'Salesman'),
-	('chris', 'jeff',       'Chris Geoffrey',	'Clerk'),
-	('chuck', 'jeff',       'Chuck McLean',		'Cleaner')
-    ]
-
-    style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top)
-
-    style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8,  refwindow=top)
-
-    style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top)
-
-    style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8,  refwindow=top)
-
-    # Let configure the appearance of the HList subwidget 
-    #
-    hlist.config(separator='.', width=25, drawbranch=0, indent=10)
-    hlist.column_width(0, chars=20)
-
-    # Create the boss
-    #
-    hlist.add ('.',           itemtype=Tix.TEXT, text=boss[1],
-	style=style['mgr_name'])
-    hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
-	style=style['mgr_posn'])
-
-    # Create the managers
-    #
-
-    for key,name,posn in managers :
-	e= '.'+ key
-	hlist.add(e, itemtype=Tix.TEXT, text=name,
-	    style=style['mgr_name'])
-	hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
-	    style=style['mgr_posn'])
-
-
-    for key,mgr,name,posn in employees :
-	# "." is the separator character we chose above
-
-	entrypath = '.' + mgr        + '.' + key 
-
-	#           ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
-	#	    parent entryPath / child's name
-
-	hlist.add(entrypath, text=name, style=style['empl_name'])
-	hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
-	    text = posn, style = style['empl_posn'] )
+def RunSample (root):
+    shlist = DemoSHList(root)
+    shlist.mainloop()
+    shlist.destroy()
     
+class DemoSHList:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
 
-    # Use a ButtonBox to hold the buttons.
-    #
-    box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
-    box.add( 'ok',  text='Ok', underline=0,  width=6,
-	command = lambda w=w: w.quit() )
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+        
+        # We create the frame and the ScrolledHList widget
+        # at the top of the dialog box
+        #
+        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
 
-    box.add( 'cancel', text='Cancel', underline=0, width=6,
-	command = lambda w=w: w.quit() )
+        # Put a simple hierachy into the HList (two levels). Use colors and
+        # separator widgets (frames) to make the list look fancy
+        #
+        top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
+        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
 
-    box.pack( side=Tix.BOTTOM, fill=Tix.X)
-    top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+        hlist=top.a.hlist
+
+        # Create the title for the HList widget
+        #	>> Notice that we have set the hlist.header subwidget option to true
+        #      so that the header is displayed
+        #
+
+        boldfont=hlist.tk.call('tix','option','get','bold_font')
+
+        # First some styles for the headers
+        style={}
+        style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist,
+            anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
+
+        hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
+            style=style['header'])
+        hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
+            style=style['header'])
+
+        # Notice that we use 3 columns in the hlist widget. This way when the user
+        # expands the windows wide, the right side of the header doesn't look
+        # chopped off. The following line ensures that the 3 column header is
+        # not shown unless the hlist window is wider than its contents.
+        #
+        hlist.column_width(2,0)
+
+        # This is our little relational database
+        #
+        boss = ('doe', 'John Doe',	'Director')
+
+        managers = [
+            ('jeff',  'Jeff Waxman',	'Manager'),
+            ('john',  'John Lee',		'Manager'),
+            ('peter', 'Peter Kenson',	'Manager')
+        ]
+
+        employees = [
+            ('alex',  'john',	'Alex Kellman',		'Clerk'),
+            ('alan',  'john',       'Alan Adams',		'Clerk'),
+            ('andy',  'peter',      'Andreas Crawford',	'Salesman'),
+            ('doug',  'jeff',       'Douglas Bloom',	'Clerk'),
+            ('jon',   'peter',      'Jon Baraki',		'Salesman'),
+            ('chris', 'jeff',       'Chris Geoffrey',	'Clerk'),
+            ('chuck', 'jeff',       'Chuck McLean',		'Cleaner')
+        ]
+
+        style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
+
+        style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
+
+        style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
+
+        style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
+
+        # Let configure the appearance of the HList subwidget 
+        #
+        hlist.config(separator='.', width=25, drawbranch=0, indent=10)
+        hlist.column_width(0, chars=20)
+
+        # Create the boss
+        #
+        hlist.add ('.',           itemtype=Tix.TEXT, text=boss[1],
+            style=style['mgr_name'])
+        hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
+            style=style['mgr_posn'])
+
+        # Create the managers
+        #
+
+        for key,name,posn in managers :
+            e= '.'+ key
+            hlist.add(e, itemtype=Tix.TEXT, text=name,
+                style=style['mgr_name'])
+            hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
+                style=style['mgr_posn'])
+
+
+        for key,mgr,name,posn in employees :
+            # "." is the separator character we chose above
+
+            entrypath = '.' + mgr        + '.' + key 
+
+            #           ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
+            #	    parent entryPath / child's name
+
+            hlist.add(entrypath, text=name, style=style['empl_name'])
+            hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
+                text = posn, style = style['empl_posn'] )
+
+
+        # Use a ButtonBox to hold the buttons.
+        #
+        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+        box.add( 'ok',  text='Ok', underline=0,  width=6,
+            command = self.okcmd )
+
+        box.add( 'cancel', text='Cancel', underline=0, width=6,
+            command = self.quitcmd )
+
+        box.pack( side=Tix.BOTTOM, fill=Tix.X)
+        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+
+    def okcmd (self):
+        self.quitcmd()
+
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
+
diff --git a/Demo/tix/samples/Tree.py b/Demo/tix/samples/Tree.py
index b0520fb..2fdd7c7 100755
--- a/Demo/tix/samples/Tree.py
+++ b/Demo/tix/samples/Tree.py
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
diff --git a/Demo/tix/tixwidgets.py b/Demo/tix/tixwidgets.py
index 6e570d7..f0cf4d9 100644
--- a/Demo/tix/tixwidgets.py
+++ b/Demo/tix/tixwidgets.py
@@ -154,7 +154,8 @@
                     text += line + '\n'
                 try: tkMessageBox.showerror ('Error', text)
                 except: pass
-                tkinspect_quit (1)
+                self.exit = 1
+                raise SystemExit, 1
 
     def destroy (self):
         self.root.destroy()
@@ -420,9 +421,13 @@
     ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 
 def MkFileBox(w):
+    """The FileSelectBox is a Motif-style box with various enhancements.
+    For example, you can adjust the size of the two listboxes
+    and your past selections are recorded.
+    """
     msg = Tix.Message(w, 
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
-		      text='The TixFileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
+		      text='The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
     box = Tix.FileSelectBox(w)
     msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
     box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)