Sync tixwidgets from Mike Clarkson, a maintainer
diff --git a/Demo/tix/tixwidgets.py b/Demo/tix/tixwidgets.py
index f0cf4d9..a4b67de 100644
--- a/Demo/tix/tixwidgets.py
+++ b/Demo/tix/tixwidgets.py
@@ -6,14 +6,15 @@
 #
 #	For Tix, see http://tix.sourceforge.net
 #
-# 	This is a demo program of all Tix widgets available from Python. If
-#	you have installed Python & Tix properly, you can execute this as
+# 	This is a demo program of some of the Tix widgets available in Python.
+#	If you have installed Python & Tix properly, you can execute this as
 #
 #		% python tixwidgets.py
 #
 
 import os, os.path, sys, Tix
 from Tkconstants import *
+import traceback, tkMessageBox
 
 TCL_DONT_WAIT		= 1<<1
 TCL_WINDOW_EVENTS	= 1<<2
@@ -65,10 +66,6 @@
         hm = Tix.Menu(help, tearoff=0)
         help['menu'] = hm
 
-        if w.tk.eval ('info commands console') == "console":
-            fm.add_command(label='Console', underline=1,
-                           command=lambda w=w: w.tk.eval('console show'))
-
         fm.add_command(label='Exit', underline=1,
                      command = lambda self=self: self.quitcmd () )
         hm.add_checkbutton(label='BalloonHelp', underline=0, command=ToggleHelp,
@@ -76,14 +73,15 @@
         # The trace variable option doesn't seem to work, instead I use 'command'
         #apply(w.tk.call, ('trace', 'variable', self.useBalloons, 'w',
         #		      ToggleHelp))
+
         return w
 
     def MkMainNotebook(self):
         top = self.root
         w = Tix.NoteBook(top, ipadx=5, ipady=5, options="""
-        *TixNoteBook*tagPadX 6
-        *TixNoteBook*tagPadY 4
-        *TixNoteBook*borderWidth 2
+        tagPadX 6
+        tagPadY 4
+        borderWidth 2
         """)
         # This may be required if there is no *Background option
         top['bg'] = w['bg']
@@ -115,8 +113,10 @@
         root = self.root
         z = root.winfo_toplevel()
         z.wm_title('Tix Widget Demonstration')
-        z.geometry('790x590+10+10')
-
+        if z.winfo_screenwidth() <= 800:
+            z.geometry('790x590+10+10')
+        else:
+            z.geometry('890x640+10+10')
         demo.balloon = Tix.Balloon(root)
         frame1 = self.MkMainMenu()
         frame2 = self.MkMainNotebook()
@@ -127,27 +127,39 @@
         demo.balloon['statusbar'] = demo.statusbar
         z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
 
+        # To show Tcl errors - uncomment this to see the listbox bug.
+        # Tkinter defines a Tcl tkerror procedure that in effect
+        # silences all background Tcl error reporting.
+	# root.tk.eval('if {[info commands tkerror] != ""} {rename tkerror pytkerror}')
     def quitcmd (self):
         """Quit our mainloop. It is up to you to call root.destroy() after."""
         self.exit = 0
 
     def loop(self):
-        import tkMessageBox, traceback
+	"""This is an explict replacement for _tkinter mainloop()
+	It lets you catch keyboard interrupts easier, and avoids
+	the 20 msec. dead sleep() which burns a constant CPU."""
         while self.exit < 0:
+            # There are 2 whiles here. The outer one lets you continue
+            # after a ^C interrupt.
             try:
-                self.root.tk.dooneevent(TCL_ALL_EVENTS)
+                # This is the replacement for _tkinter mainloop()
+                # It blocks waiting for the next Tcl event using select.
+                while self.exit < 0:
+                    self.root.tk.dooneevent(TCL_ALL_EVENTS)
             except SystemExit:
+                # Tkinter uses SystemExit to exit
                 #print 'Exit'
                 self.exit = 1
-                break
+                return
             except KeyboardInterrupt:
                 if tkMessageBox.askquestion ('Interrupt', 'Really Quit?') == 'yes':
                     # self.tk.eval('exit')
+                    self.exit = 1
                     return
-                else:
-                    pass
                 continue
             except:
+                # Otherwise it's some other error - be nice and say why
                 t, v, tb = sys.exc_info()
                 text = ""
                 for line in traceback.format_exception(t,v,tb):
@@ -159,7 +171,7 @@
 
     def destroy (self):
         self.root.destroy()
-    
+
 def RunMain(root):
     global demo
 
@@ -254,19 +266,16 @@
 
 def MkChoosers(nb, name):
     w = nb.page(name)
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
+    options = "label.padX 4"
 
-    til = Tix.LabelFrame(w, label='Chooser Widgets')
-    cbx = Tix.LabelFrame(w, label='tixComboBox')
-    ctl = Tix.LabelFrame(w, label='tixControl')
-    sel = Tix.LabelFrame(w, label='tixSelect')
-    opt = Tix.LabelFrame(w, label='tixOptionMenu')
-    fil = Tix.LabelFrame(w, label='tixFileEntry')
-    fbx = Tix.LabelFrame(w, label='tixFileSelectBox')
-    tbr = Tix.LabelFrame(w, label='Tool Bar')
+    til = Tix.LabelFrame(w, label='Chooser Widgets', options=options)
+    cbx = Tix.LabelFrame(w, label='tixComboBox', options=options)
+    ctl = Tix.LabelFrame(w, label='tixControl', options=options)
+    sel = Tix.LabelFrame(w, label='tixSelect', options=options)
+    opt = Tix.LabelFrame(w, label='tixOptionMenu', options=options)
+    fil = Tix.LabelFrame(w, label='tixFileEntry', options=options)
+    fbx = Tix.LabelFrame(w, label='tixFileSelectBox', options=options)
+    tbr = Tix.LabelFrame(w, label='Tool Bar', options=options)
 
     MkTitle(til.frame)
     MkCombo(cbx.frame)
@@ -293,16 +302,12 @@
     fbx.form(right=-1, top=0, left='%66')
 
 def MkCombo(w):
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixComboBox*label.width', 10)
-    w.option_add('*' + prefix + '*TixComboBox*label.anchor', Tix.E)
-    w.option_add('*' + prefix + '*TixComboBox*entry.width', 14)
+    options="label.width %d label.anchor %s entry.width %d" % (10, Tix.E, 14)
 
-    static = Tix.ComboBox(w, label='Static', editable=0)
-    editable = Tix.ComboBox(w, label='Editable', editable=1)
+    static = Tix.ComboBox(w, label='Static', editable=0, options=options)
+    editable = Tix.ComboBox(w, label='Editable', editable=1, options=options)
     history = Tix.ComboBox(w, label='History', editable=1, history=1,
-			   anchor=Tix.E)
+			   anchor=Tix.E, options=options)
     static.insert(Tix.END, 'January')
     static.insert(Tix.END, 'February')
     static.insert(Tix.END, 'March')
@@ -355,32 +360,31 @@
 def MkControl(w):
     global demo_spintxt
 
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixControl*label.width', 10)
-    w.option_add('*' + prefix + '*TixControl*label.anchor', Tix.E)
-    w.option_add('*' + prefix + '*TixControl*entry.width', 13)
+    options="label.width %d label.anchor %s entry.width %d" % (10, Tix.E, 13)
 
     demo_spintxt = Tix.StringVar()
     demo_spintxt.set(states[0])
-    simple = Tix.Control(w, label='Numbers')
-    spintxt = Tix.Control(w, label='States', variable=demo_spintxt)
+    simple = Tix.Control(w, label='Numbers', options=options)
+    spintxt = Tix.Control(w, label='States', variable=demo_spintxt,
+                          options=options)
     spintxt['incrcmd'] = lambda w=spintxt: spin_cmd(w, 1)
     spintxt['decrcmd'] = lambda w=spintxt: spin_cmd(w, -1)
     spintxt['validatecmd'] = lambda w=spintxt: spin_validate(w)
 
     simple.pack(side=Tix.TOP, padx=5, pady=3)
     spintxt.pack(side=Tix.TOP, padx=5, pady=3)
-    
-def MkSelect(w):
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixSelect*label.anchor', Tix.CENTER)
-    w.option_add('*' + prefix + '*TixSelect*orientation', Tix.VERTICAL)
-    w.option_add('*' + prefix + '*TixSelect*labelSide', Tix.TOP)
 
-    sel1 = Tix.Select(w, label='Mere Mortals', allowzero=1, radio=1)
-    sel2 = Tix.Select(w, label='Geeks', allowzero=1, radio=0)
+def MkSelect(w):
+    options = "label.anchor %s" % Tix.CENTER
+
+    sel1 = Tix.Select(w, label='Mere Mortals', allowzero=1, radio=1,
+                      orientation=Tix.VERTICAL,
+                      labelside=Tix.TOP,
+                      options=options)
+    sel2 = Tix.Select(w, label='Geeks', allowzero=1, radio=0,
+                      orientation=Tix.VERTICAL,
+                      labelside= Tix.TOP,
+                      options=options)
 
     sel1.add('eat', text='Eat')
     sel1.add('work', text='Work')
@@ -398,10 +402,9 @@
     sel2.pack(side=Tix.LEFT, padx=5, pady=3, fill=Tix.X)
 
 def MkOptMenu(w):
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixOptionMenu*label.anchor', Tix.E)
-    m = Tix.OptionMenu(w, label='File Format : ', options='menubutton.width 15')
+    options='menubutton.width 15 label.anchor %s' % Tix.E
+
+    m = Tix.OptionMenu(w, label='File Format : ', options=options)
     m.add_command('text', label='Plain Text')
     m.add_command('post', label='PostScript')
     m.add_command('format', label='Formatted Text')
@@ -413,7 +416,7 @@
     m.pack(fill=Tix.X, padx=5, pady=3)
 
 def MkFileEnt(w):
-    msg = Tix.Message(w, 
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      text='Press the "open file" icon button and a TixFileSelectDialog will popup.')
     ent = Tix.FileEntry(w, label='Select a file : ')
@@ -425,7 +428,7 @@
     For example, you can adjust the size of the two listboxes
     and your past selections are recorded.
     """
-    msg = Tix.Message(w, 
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      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)
@@ -433,17 +436,18 @@
     box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 
 def MkToolBar(w):
+    """The Select widget is also good for arranging buttons in a tool bar.
+    """
     global demo
 
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixSelect*frame.borderWidth', 1)
-    msg = Tix.Message(w, 
+    options='frame.borderWidth 1'
+
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      text='The Select widget is also good for arranging buttons in a tool bar.')
     bar = Tix.Frame(w, bd=2, relief=Tix.RAISED)
-    font = Tix.Select(w, allowzero=1, radio=0, label='')
-    para = Tix.Select(w, allowzero=0, radio=1, label='')
+    font = Tix.Select(w, allowzero=1, radio=0, label='', options=options)
+    para = Tix.Select(w, allowzero=0, radio=1, label='', options=options)
 
     font.add('bold', bitmap='@' + demo.dir + '/bitmaps/bold.xbm')
     font.add('italic', bitmap='@' + demo.dir + '/bitmaps/italic.xbm')
@@ -461,24 +465,18 @@
     para.pack({'in':bar}, side=Tix.LEFT, padx=3, pady=3)
 
 def MkTitle(w):
-    prefix = Tix.OptionName(w)
-    if not prefix: prefix = ''
-    w.option_add('*' + prefix + '*TixSelect*frame.borderWidth', 1)
-    msg = Tix.Message(w, 
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      text='There are many types of "chooser" widgets that allow the user to input different types of information')
     msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 
 def MkScroll(nb, name):
     w = nb.page(name)
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
+    options='label.padX 4'
 
-    sls = Tix.LabelFrame(w, label='tixScrolledListBox')
-    swn = Tix.LabelFrame(w, label='tixScrolledWindow')
-    stx = Tix.LabelFrame(w, label='tixScrolledText')
+    sls = Tix.LabelFrame(w, label='tixScrolledListBox', options=options)
+    swn = Tix.LabelFrame(w, label='tixScrolledWindow', options=options)
+    stx = Tix.LabelFrame(w, label='tixScrolledText', options=options)
 
     MkSList(sls.frame)
     MkSWindow(swn.frame)
@@ -488,10 +486,14 @@
     swn.form(top=0, left=sls, right='%66', bottom=-1)
     stx.form(top=0, left=swn, right=-1, bottom=-1)
 
+
 def MkSList(w):
+    """This TixScrolledListBox is configured so that it uses scrollbars
+    only when it is necessary. Use the handles to resize the listbox and
+    watch the scrollbars automatically appear and disappear.  """
     top = Tix.Frame(w, width=300, height=330)
     bot = Tix.Frame(w)
-    msg = Tix.Message(top, 
+    msg = Tix.Message(top,
 		      relief=Tix.FLAT, width=200, anchor=Tix.N,
 		      text='This TixScrolledListBox is configured so that it uses scrollbars only when it is necessary. Use the handles to resize the listbox and watch the scrollbars automatically appear and disappear.')
 
@@ -522,30 +524,30 @@
     list.update()
     rh.attach_widget(list)
 
-# See below why this is necessary.
-global image1
-image1 = None
 def MkSWindow(w):
-    global demo, image1
+    """The ScrolledWindow widget allows you to scroll any kind of Tk
+    widget. It is more versatile than a scrolled canvas widget.
+    """
+    global demo
 
-    text = 'The TixScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.'
-    
+    text = 'The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.'
+
     file = os.path.join(demo.dir, 'bitmaps', 'tix.gif')
     if not os.path.isfile(file):
         text += ' (Image missing)'
 
     top = Tix.Frame(w, width=330, height=330)
     bot = Tix.Frame(w)
-    msg = Tix.Message(top, 
+    msg = Tix.Message(top,
 		      relief=Tix.FLAT, width=200, anchor=Tix.N,
 		      text=text)
 
     win = Tix.ScrolledWindow(top, scrollbar='auto')
 
-    # This image is not showing up under Python unless it is set to a
-    # global variable - no problem under Tcl. I assume it is being garbage
-    # collected some how, even though the tcl command 'image names' shows
-    # that as far as Tcl is concerned, the image exists and is called pyimage1.
+    global image1
+    # This image is not showing up in the Label unless it is set to a
+    # global variable - no problem under Tcl/Tix. It is being
+    # garbage collected at the end of this proecedure if not global
     image1 = Tix.Image('photo', file=file)
     lbl = Tix.Label(win.window, image=image1)
     lbl.pack(expand=1, fill=Tix.BOTH)
@@ -561,8 +563,6 @@
     btn.pack(anchor=Tix.CENTER)
     top.pack(expand=1, fill=Tix.BOTH)
     bot.pack(fill=Tix.BOTH)
-    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
-	     win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))
 
 def SWindow_reset(rh, win):
     win.place(x=30, y=150, width=190, height=120)
@@ -570,11 +570,13 @@
     rh.attach_widget(win)
 
 def MkSText(w):
+    """The TixScrolledWindow widget allows you to scroll any kind of Tk
+    widget. It is more versatile than a scrolled canvas widget."""
     top = Tix.Frame(w, width=330, height=330)
     bot = Tix.Frame(w)
-    msg = Tix.Message(top, 
+    msg = Tix.Message(top,
 		      relief=Tix.FLAT, width=200, anchor=Tix.N,
-		      text='The TixScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.')
+		      text='The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.')
 
     win = Tix.ScrolledText(top, scrollbar='auto')
 #    win.text['wrap'] = 'none'
@@ -600,13 +602,10 @@
 
 def MkManager(nb, name):
     w = nb.page(name)
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
+    options='label.padX 4'
 
-    pane = Tix.LabelFrame(w, label='tixPanedWindow')
-    note = Tix.LabelFrame(w, label='tixNoteBook')
+    pane = Tix.LabelFrame(w, label='tixPanedWindow', options=options)
+    note = Tix.LabelFrame(w, label='tixNoteBook', options=options)
 
     MkPanedWindow(pane.frame)
     MkNoteBook(note.frame)
@@ -615,7 +614,11 @@
     note.form(top=0, right=-1, bottom=-1)
 
 def MkPanedWindow(w):
-    msg = Tix.Message(w, 
+    """The PanedWindow widget allows the user to interactively manipulate
+    the sizes of several panes. The panes can be arranged either vertically
+    or horizontally.
+    """
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      text='The PanedWindow widget allows the user to interactively manipulate the sizes of several panes. The panes can be arranged either vertically or horizontally.')
     group = Tix.LabelEntry(w, label='Newsgroup:', options='entry.width 25')
@@ -658,18 +661,15 @@
     pane.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH, expand=1)
 
 def MkNoteBook(w):
-    msg = Tix.Message(w, 
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 		      text='The NoteBook widget allows you to layout a complex interface into individual pages.')
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    w.option_add('*' + prefix + '*TixControl*entry.width', 10)
-    w.option_add('*' + prefix + '*TixControl*label.width', 18)
-    w.option_add('*' + prefix + '*TixControl*label.anchor', Tix.E)
-    w.option_add('*' + prefix + '*TixNoteBook*tagPadX', 8)
+    # prefix = Tix.OptionName(w)
+    # if not prefix: prefix = ''
+    # w.option_add('*' + prefix + '*TixNoteBook*tagPadX', 8)
+    options = "entry.width %d label.width %d label.anchor %s" % (10, 18, Tix.E)
 
-    nb = Tix.NoteBook(w, ipadx=6, ipady=6)
+    nb = Tix.NoteBook(w, ipadx=6, ipady=6, options=options)
     nb.add('hard_disk', label="Hard Disk", underline=0)
     nb.add('network', label="Network", underline=0)
 
@@ -714,30 +714,33 @@
 
 def MkDirList(nb, name):
     w = nb.page(name)
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
+    options = "label.padX 4"
 
-    dir = Tix.LabelFrame(w, label='tixDirList')
-    fsbox = Tix.LabelFrame(w, label='tixExFileSelectBox')
+    dir = Tix.LabelFrame(w, label='tixDirList', options=options)
+    fsbox = Tix.LabelFrame(w, label='tixExFileSelectBox', options=options)
     MkDirListWidget(dir.frame)
     MkExFileWidget(fsbox.frame)
     dir.form(top=0, left=0, right='%40', bottom=-1)
     fsbox.form(top=0, left='%40', right=-1, bottom=-1)
 
 def MkDirListWidget(w):
-    msg = Tix.Message(w, 
+    """The TixDirList widget gives a graphical representation of the file
+    system directory and makes it easy for the user to choose and access
+    directories.
+    """
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
-		      text='The TixDirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories.')
+		      text='The Tix DirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories.')
     dirlist = Tix.DirList(w, options='hlist.padY 1 hlist.width 25 hlist.height 16')
     msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
     dirlist.pack(side=Tix.TOP, padx=3, pady=3)
 
 def MkExFileWidget(w):
-    msg = Tix.Message(w, 
+    """The TixExFileSelectBox widget is more user friendly than the Motif
+    style FileSelectBox.  """
+    msg = Tix.Message(w,
 		      relief=Tix.FLAT, width=240, anchor=Tix.N,
-		      text='The TixExFileSelectBox widget is more user friendly than the Motif style FileSelectBox.')
+		      text='The Tix ExFileSelectBox widget is more user friendly than the Motif style FileSelectBox.')
     # There's a bug in the ComboBoxes - the scrolledlistbox is destroyed
     box = Tix.ExFileSelectBox(w, bd=2, relief=Tix.RAISED)
     msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
@@ -773,24 +776,24 @@
 ##	    {d "Miscellaneous Widgets"	misc	}
 ##	    {d "Image Types"		image	}
 ##	}
-##	
+##
 ##	set image {
 ##	    {d "Compound Image"		cmpimg	}
 ##	    {d "XPM Image"		xpm	{i pixmap}}
 ##	}
-##	
+##
 ##	set cmpimg {
-##	    {f "In Buttons"		CmpImg.tcl	}
+##done	    {f "In Buttons"		CmpImg.tcl	}
 ##	    {f "In NoteBook"		CmpImg2.tcl	}
 ##	    {f "Notebook Color Tabs"	CmpImg4.tcl	}
 ##	    {f "Icons"			CmpImg3.tcl	}
 ##	}
-##	
+##
 ##	set xpm {
 ##	    {f "In Button"		Xpm.tcl		{i pixmap}}
 ##	    {f "In Menu"		Xpm1.tcl	{i pixmap}}
 ##	}
-##	
+##
 ##	set file {
 ##added	    {f DirList				DirList.tcl	}
 ##added	    {f DirTree				DirTree.tcl	}
@@ -799,7 +802,7 @@
 ##	    {f FileSelectDialog			FileDlg.tcl	}
 ##	    {f FileEntry			FileEnt.tcl	}
 ##	}
-##	
+##
 ##	set hlist {
 ##	    {f HList			HList1.tcl	}
 ##	    {f CheckList		ChkList.tcl	{c tixCheckList}}
@@ -808,7 +811,7 @@
 ##done	    {f Tree			Tree.tcl	}
 ##done	    {f "Tree (Dynamic)"		DynTree.tcl	{v win}}
 ##	}
-##	
+##
 ##	set tlist {
 ##	    {f "ScrolledTList (1)"	STList1.tcl	{c tixTList}}
 ##	    {f "ScrolledTList (2)"	STList2.tcl	{c tixTList}}
@@ -818,26 +821,26 @@
 ##	if {$tcl_platform(platform) != "windows"} {
 ##na	lappend tlist     {f "TList File Viewer"	STList3.tcl	{c tixTList}}
 ##	}
-##	
+##
 ##	set grid {
 ##na	    {f "Simple Grid"		SGrid0.tcl	{c tixGrid}}
 ##na	    {f "ScrolledGrid"		SGrid1.tcl	{c tixGrid}}
 ##na	    {f "Editable Grid"		EditGrid.tcl	{c tixGrid}}
 ##	}
-##	
+##
 ##	set scroll {
 ##	    {f ScrolledListBox		SListBox.tcl	}
 ##	    {f ScrolledText		SText.tcl	}
 ##	    {f ScrolledWindow		SWindow.tcl	}
 ##na	    {f "Canvas Object View"	CObjView.tcl	{c tixCObjView}}
 ##	}
-##	
+##
 ##	set manager {
-##na	    {f ListNoteBook		ListNBK.tcl	}
+##	    {f ListNoteBook		ListNBK.tcl	}
 ##done	    {f NoteBook			NoteBook.tcl	}
 ##done	    {f PanedWindow		PanedWin.tcl	}
 ##	}
-##	
+##
 ##	set misc {
 ##done	    {f Balloon			Balloon.tcl	}
 ##done	    {f ButtonBox		BtnBox.tcl	}
@@ -845,7 +848,7 @@
 ##done	    {f Control			Control.tcl	}
 ##	    {f LabelEntry		LabEntry.tcl	}
 ##	    {f LabelFrame		LabFrame.tcl	}
-##na	    {f Meter			Meter.tcl	{c tixMeter}}
+##	    {f Meter			Meter.tcl	{c tixMeter}}
 ##done	    {f OptionMenu		OptMenu.tcl	}
 ##done	    {f PopupMenu		PopMenu.tcl	}
 ##	    {f Select			Select.tcl	}
@@ -862,12 +865,7 @@
 
 def MkSample(nb, name):
     w = nb.page(name)
-    prefix = Tix.OptionName(w)
-    if not prefix:
-	prefix = ''
-    else:
-	prefix = '*' + prefix
-    w.option_add(prefix + '*TixLabelFrame*label.padX', 4)
+    options = "label.padX 4"
 
     pane = Tix.PanedWindow(w, orientation='horizontal')
     pane.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH)
@@ -876,25 +874,19 @@
     f1['relief'] = 'flat'
     f2['relief'] = 'flat'
 
-    lab = Tix.Label(f1, text='Select a sample program:', anchor=Tix.W)
-    lab.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=5, pady=5)
-    lab1 = Tix.Label(f2, text='Source:', anchor=Tix.W)
-    lab1.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=5, pady=5)
+    lab = Tix.LabelFrame(f1, label='Select a sample program:')
+    lab.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5, pady=5)
+    lab1 = Tix.LabelFrame(f2, label='Source:')
+    lab1.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5, pady=5)
 
-    slb = Tix.Tree(f1, options='hlist.width 25')
+    slb = Tix.Tree(lab.frame, options='hlist.width 20')
     slb.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5)
 
-    stext = Tix.ScrolledText(f2, name='stext')
+    stext = Tix.ScrolledText(lab1.frame, name='stext')
     font = root.tk.eval('tix option get fixed_font')
     stext.text.config(font=font)
-    stext.text.bind('<Up>', lambda w=stext.text: w.yview(scroll='-1 unit'))
-    stext.text.bind('<Down>', lambda w=stext.text: w.yview(scroll='1 unit'))
-    stext.text.bind('<Left>', lambda w=stext.text: w.xview(scroll='-1 unit'))
-    stext.text.bind('<Right>', lambda w=stext.text: w.xview(scroll='1 unit'))
-    stext.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=7)
 
-    frame = Tix.Frame(f2, name='frame')
-    frame.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=7)
+    frame = Tix.Frame(lab1.frame, name='frame')
 
     run = Tix.Button(frame, text='Run ...', name='run')
     view = Tix.Button(frame, text='View Source ...', name='view')
@@ -906,6 +898,9 @@
     stext.text['wrap'] = 'none'
     stext.text['width'] = 80
 
+    frame.pack(side=Tix.BOTTOM, expand=0, fill=Tix.X, padx=7)
+    stext.pack(side=Tix.TOP, expand=0, fill=Tix.BOTH, padx=7)
+
     slb.hlist['separator'] = '.'
     slb.hlist['width'] = 25
     slb.hlist['drawbranch'] = 0