]> Dogcows Code - chaz/tint2/blobdiff - src/tint2conf/tintwizard.py
fixed issue 309
[chaz/tint2] / src / tint2conf / tintwizard.py
index aa086b7415a0f91f2965b438c738a8c11dc030b3..3e4454942a680d37ee9183227606ab4b3b0167a2 100755 (executable)
@@ -17,7 +17,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 #*************************************************************************/
-# Last modified: 27th September 2009
+# Last modified: 14th June 2010
 
 import pygtk
 pygtk.require('2.0')
@@ -32,7 +32,7 @@ import shutil
 # Project information
 NAME = "tintwizard"
 AUTHORS = ["Euan Freeman <euan04@gmail.com>"]
-VERSION = "0.2.9"
+VERSION = "0.3.4"
 COMMENTS = "tintwizard generates config files for the lightweight panel replacement tint2"
 WEBSITE = "http://code.google.com/p/tintwizard/"
 
@@ -46,6 +46,10 @@ PANEL_MARGIN_Y = "0"
 PANEL_PADDING_X = "0"
 PANEL_PADDING_Y = "0"
 PANEL_MONITOR = "all"
+PANEL_ITEMS = "TSC"
+PANEL_AUTOHIDE_SHOW = "0.0"
+PANEL_AUTOHIDE_HIDE = "0.0"
+PANEL_AUTOHIDE_HEIGHT = "0"
 TASKBAR_PADDING_X = "0"
 TASKBAR_PADDING_Y = "0"
 TASKBAR_SPACING = "0"
@@ -58,14 +62,28 @@ TASK_SPACING = "0"
 TRAY_PADDING_X = "0"
 TRAY_PADDING_Y = "0"
 TRAY_SPACING = "0"
+TRAY_MAX_ICON_SIZE = "0"
+TRAY_ICON_ALPHA = "100"
+TRAY_ICON_SAT = "0"
+TRAY_ICON_BRI = "0"
 ICON_ALPHA = "100"
 ICON_SAT = "0"
 ICON_BRI = "0"
 ACTIVE_ICON_ALPHA = "100"
 ACTIVE_ICON_SAT = "0"
 ACTIVE_ICON_BRI = "0"
+URGENT_ICON_ALPHA = "100"
+URGENT_ICON_SAT = "0"
+URGENT_ICON_BRI = "0"
+ICONIFIED_ICON_ALPHA = "100"
+ICONIFIED_ICON_SAT = "0"
+ICONIFIED_ICON_BRI = "0"
 CLOCK_FMT_1 = "%H:%M"
 CLOCK_FMT_2 = "%a %d %b"
+CLOCK_TOOLTIP = ""
+CLOCK_TIME1_TIMEZONE = ""
+CLOCK_TIME2_TIMEZONE = ""
+CLOCK_TOOLTIP_TIMEZONE = ""
 CLOCK_PADDING_X = "0"
 CLOCK_PADDING_Y = "0"
 CLOCK_LCLICK = ""
@@ -75,6 +93,7 @@ TOOLTIP_PADDING_Y = "0"
 TOOLTIP_SHOW_TIMEOUT = "0"
 TOOLTIP_HIDE_TIMEOUT = "0"
 BATTERY_LOW = "20"
+BATTERY_HIDE = "90"
 BATTERY_ACTION = 'notify-send "battery low"'
 BATTERY_PADDING_X = "0"
 BATTERY_PADDING_Y = "0"
@@ -84,97 +103,51 @@ class TintWizardPrefGUI(gtk.Window):
        def __init__(self, tw):
                """Create and shows the window."""
                self.tw = tw
-
+               
                # Create top-level window
                gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
-
+               
                self.set_title("Preferences")
                self.connect("delete_event", self.quit)
-
+               
                self.layout = gtk.Table(2, 2, False)
-
+               
                self.table = gtk.Table(5, 2, False)
                self.table.set_row_spacings(5)
                self.table.set_col_spacings(5)
-
-               temp = gtk.Label("Default Font")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 0, 1)
+               
+               createLabel(self.table, text="Default Font", gridX=0, gridY=0)
                self.font = gtk.FontButton(self.tw.defaults["font"])
                self.font.set_alignment(0, 0.5)
                self.table.attach(self.font, 1, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Default Background Color")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 1, 2)
+               
+               createLabel(self.table, text="Default Background Color", gridX=0, gridY=1)
                self.bgColor = gtk.ColorButton(gtk.gdk.color_parse(self.tw.defaults["bgColor"]))
                self.bgColor.set_alignment(0, 0.5)
                self.table.attach(self.bgColor, 1, 2, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Default Foreground Color")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 2, 3)
+               
+               createLabel(self.table, text="Default Foreground Color", gridX=0, gridY=2)
                self.fgColor = gtk.ColorButton(gtk.gdk.color_parse(self.tw.defaults["fgColor"]))
                self.fgColor.set_alignment(0, 0.5)
                self.table.attach(self.fgColor, 1, 2, 2, 3, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Default Border Color")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 3, 4)
+               
+               createLabel(self.table, text="Default Border Color", gridX=0, gridY=3)
                self.borderColor = gtk.ColorButton(gtk.gdk.color_parse(self.tw.defaults["borderColor"]))
                self.borderColor.set_alignment(0, 0.5)
                self.table.attach(self.borderColor, 1, 2, 3, 4, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
 
-               temp = gtk.Label("Number of Background Styles")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 4, 5)
-               self.bgCount = gtk.Entry(6)
-               self.bgCount.set_width_chars(8)
-               self.bgCount.set_text(str(self.tw.defaults["bgCount"]))
-               self.table.attach(self.bgCount, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Default directory")
-               temp.set_alignment(0, 0.5)
-               self.table.attach(temp, 0, 1, 5, 6)
-               self.dir = gtk.Button(self.tw.defaults["dir"])
-               self.dir.connect("clicked", self.chooseFolder)
-               self.table.attach(self.dir, 1, 2, 5, 6, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
+               createLabel(self.table, text="Number of background styles", gridX=0, gridY=4)
+               self.bgCount = createEntry(self.table, maxSize=6, width=8, text=str(self.tw.defaults["bgCount"]), gridX=1, gridY=4, xExpand=True, yExpand=True)
 
                self.layout.attach(self.table, 0, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND, xpadding=20, ypadding=5)
-
-               temp = gtk.Button("Save", gtk.STOCK_SAVE)
-               temp.set_name("save")
-               temp.connect("clicked", self.save)
-               self.layout.attach(temp, 0, 1, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND, ypadding=20)
-               temp = gtk.Button("Cancel", gtk.STOCK_CANCEL)
-               temp.set_name("cancel")
-               temp.connect("clicked", self.quit)
-               self.layout.attach(temp, 1, 2, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND, ypadding=20)
-
+               
+               createButton(self.layout, text="Save", stock=gtk.STOCK_SAVE, name="save", gridX=0, gridY=1, xExpand=True, yExpand=True, handler=self.save)
+               createButton(self.layout, text="Cancel", stock=gtk.STOCK_CANCEL, name="cancel", gridX=1, gridY=1, xExpand=True, yExpand=True, handler=self.quit)
+               
                self.add(self.layout)
 
                self.show_all()
 
-       def chooseFolder(self, widget=None, direction=None):
-               """Called every time the folder button is clicked. Shows a file chooser."""
-               chooser = gtk.FileChooserDialog("Choose Default Folder", self, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
-               chooser.set_default_response(gtk.RESPONSE_OK)
-
-               if self.tw.curDir != None:
-                       chooser.set_current_folder(self.tw.curDir)
-
-               chooser.show()
-
-               response = chooser.run()
-
-               if response == gtk.RESPONSE_OK:
-                       self.dir.set_label(chooser.get_filename())
-               else:
-                       chooser.destroy()
-                       return
-
-               chooser.destroy()
-
        def quit(self, widget=None, event=None):
                """Destroys the window."""
                self.destroy()
@@ -193,9 +166,6 @@ class TintWizardPrefGUI(gtk.Window):
                                errorDialog(self, "Invalid value for background count")
                                return
 
-                       self.tw.defaults["dir"] = self.dir.get_label()
-                       self.curDir = self.tw.defaults["dir"]
-
                        self.tw.writeConf()
 
                        self.quit()
@@ -226,19 +196,11 @@ class TintWizardGUI(gtk.Window):
                if self.defaults["borderColor"] in [None, "None"]:
                        self.defaults["borderColor"] = "#ffffff"
 
-               if self.defaults["dir"] in [None, "None"]:
-                       if os.path.exists(os.path.expandvars("${HOME}") + "/.config/tint2"):
-                               self.curDir = os.path.expandvars("${HOME}") + "/.config/tint2"
-                       else:
-                               self.curDir = None
+               if os.path.exists(os.path.expandvars("${HOME}") + "/.config/tint2"):
+                       self.curDir = os.path.expandvars("${HOME}") + "/.config/tint2"
                else:
-                       self.curDir = os.path.expandvars(self.defaults["dir"])
-
-                       if not os.path.exists(os.path.expandvars(self.curDir)):
-                               if os.path.exists(os.path.expandvars("${HOME}") + "/.config/tint2"):
-                                       self.curDir = os.path.expandvars("${HOME}") + "/.config/tint2"
-                               else:
-                                       self.curDir = None
+                       errorDialog("$HOME/.config/tint2/ directory not found! Is tint2 installed correctly?")
+                       Sys.exit(1)
 
                try:
                        self.defaults["bgCount"] = int(self.defaults["bgCount"])
@@ -265,6 +227,9 @@ class TintWizardGUI(gtk.Window):
 
                # self.table is our main layout manager
                self.table = gtk.Table(4, 1, False)
+               
+               # Set up the dictionary to hold all registered widgets
+               self.propUI = {}
 
                # Create menus and toolbar items
                ui = """
@@ -332,9 +297,8 @@ class TintWizardGUI(gtk.Window):
                                                ("Report Bug",None, "Report Bug", None, "Report a problem with tintwizard", self.reportBug),
                                                ("About",gtk.STOCK_ABOUT, "_About Tint Wizard", None, "Find out more about Tint Wizard", self.about)])
 
-
                # Add main UI
-               self.uiManager.insert_action_group(self.ag)
+               self.uiManager.insert_action_group(self.ag, -1)
                self.uiManager.add_ui_from_string(ui)
 
                if not self.oneConfigFile:
@@ -360,838 +324,40 @@ class TintWizardGUI(gtk.Window):
                self.bgs = []
 
                # Add buttons for adding/deleting background styles
-               temp = gtk.Button("New Background", gtk.STOCK_NEW)
-               temp.set_name("addBg")
-               temp.connect("clicked", self.addBgClick)
-               self.tableBgs.attach(temp, 0, 1, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               temp = gtk.Button("Delete Background", gtk.STOCK_DELETE)
-               temp.set_name("delBg")
-               temp.connect("clicked", self.delBgClick)
-               self.tableBgs.attach(temp, 1, 2, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               # Panel Options
-               self.tablePanel = gtk.Table(rows=9, columns=3, homogeneous=False)
-               self.tablePanel.set_row_spacings(5)
-               self.tablePanel.set_col_spacings(5)
-
-               temp = gtk.Label("Position")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.panelPosY = gtk.combo_box_new_text()
-               self.panelPosY.append_text("bottom")
-               self.panelPosY.append_text("top")
-               self.panelPosY.append_text("center")
-               self.panelPosY.set_active(0)
-               self.panelPosY.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelPosY, 2, 3, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.panelPosX = gtk.combo_box_new_text()
-               self.panelPosX.append_text("left")
-               self.panelPosX.append_text("right")
-               self.panelPosX.append_text("center")
-               self.panelPosX.set_active(0)
-               self.panelPosX.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelPosX, 1, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Panel Orientation")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.panelOrientation = gtk.combo_box_new_text()
-               self.panelOrientation.append_text("horizontal")
-               self.panelOrientation.append_text("vertical")
-               self.panelOrientation.set_active(0)
-               self.panelOrientation.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelOrientation, 1, 2, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               self.panelSizeLabel = gtk.Label("Size (width, height)")
-               self.panelSizeLabel.set_alignment(0, 0.5)
-               self.tablePanel.attach(self.panelSizeLabel, 0, 1, 2, 3, xpadding=10)
-               self.panelSizeX = gtk.Entry(6)
-               self.panelSizeX.set_width_chars(8)
-               self.panelSizeX.set_text(PANEL_SIZE_X)
-               self.panelSizeX.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelSizeX, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-               self.panelSizeY = gtk.Entry(6)
-               self.panelSizeY.set_width_chars(8)
-               self.panelSizeY.set_text(PANEL_SIZE_Y)
-               self.panelSizeY.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelSizeY, 2, 3, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Margin (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.panelMarginX = gtk.Entry(6)
-               self.panelMarginX.set_width_chars(8)
-               self.panelMarginX.set_text(PANEL_MARGIN_X)
-               self.panelMarginX.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelMarginX, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-               self.panelMarginY = gtk.Entry(6)
-               self.panelMarginY.set_width_chars(8)
-               self.panelMarginY.set_text(PANEL_MARGIN_Y)
-               self.panelMarginY.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelMarginY, 2, 3, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.panelPadX = gtk.Entry(6)
-               self.panelPadX.set_width_chars(8)
-               self.panelPadX.set_text(PANEL_PADDING_Y)
-               self.panelPadX.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelPadX, 1, 2, 4, 5, xoptions=gtk.EXPAND)
-               self.panelPadY = gtk.Entry(6)
-               self.panelPadY.set_width_chars(8)
-               self.panelPadY.set_text(PANEL_PADDING_Y)
-               self.panelPadY.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelPadY, 2, 3, 4, 5, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Panel Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.panelBg = gtk.combo_box_new_text()
-               self.panelBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.panelBg.append_text(str(i+1))
-               self.panelBg.set_active(0)
-               self.panelBg.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelBg, 1, 2, 5, 6, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Window Manager Menu")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 6, 7, xpadding=10)
-               self.panelMenu = gtk.CheckButton()
-               self.panelMenu.set_active(False)
-               self.panelMenu.connect("toggled", self.changeOccurred)
-               self.tablePanel.attach(self.panelMenu, 1, 2, 6, 7, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Place In Window Manager Dock")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 7, 8, xpadding=10)
-               self.panelDock = gtk.CheckButton()
-               self.panelDock.set_active(False)
-               self.panelDock.connect("toggled", self.changeOccurred)
-               self.tablePanel.attach(self.panelDock, 1, 2, 7, 8, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Panel Monitor (all, 1, 2...)")
-               temp.set_alignment(0, 0.5)
-               self.tablePanel.attach(temp, 0, 1, 8, 9, xpadding=10)
-               self.panelMonitor = gtk.Entry(6)
-               self.panelMonitor.set_width_chars(8)
-               self.panelMonitor.set_text(PANEL_MONITOR)
-               self.panelMonitor.connect("changed", self.changeOccurred)
-               self.tablePanel.attach(self.panelMonitor, 1, 2, 8, 9, xoptions=gtk.EXPAND)
-
+               createButton(self.tableBgs, text="New Background", stock=gtk.STOCK_NEW, name="addBg", gridX=0, gridY=1, xExpand=True, yExpand=True, handler=self.addBgClick)
+               createButton(self.tableBgs, text="Delete Background", stock=gtk.STOCK_DELETE, name="delBg", gridX=1, gridY=1, xExpand=True, yExpand=True, handler=self.delBgClick)
+               
+               # Panel
+               self.createPanelDisplayWidgets()
+               self.createPanelSettingsWidgets()
+               self.createPanelAutohideWidgets()
+               
                # Taskbar
-               self.tableTaskbar = gtk.Table(rows=5, columns=3, homogeneous=False)
-               self.tableTaskbar.set_row_spacings(5)
-               self.tableTaskbar.set_col_spacings(5)
-
-               temp = gtk.Label("Taskbar Mode")
-               temp.set_alignment(0, 0.5)
-               self.tableTaskbar.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.taskbarMode = gtk.combo_box_new_text()
-               self.taskbarMode.append_text("single_desktop")
-               self.taskbarMode.append_text("multi_desktop")
-               self.taskbarMode.set_active(0)
-               self.taskbarMode.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarMode, 1, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableTaskbar.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.taskbarPadX = gtk.Entry(6)
-               self.taskbarPadX.set_width_chars(8)
-               self.taskbarPadX.set_text(TASKBAR_PADDING_X)
-               self.taskbarPadX.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarPadX, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.taskbarPadY = gtk.Entry(6)
-               self.taskbarPadY.set_width_chars(8)
-               self.taskbarPadY.set_text(TASKBAR_PADDING_Y)
-               self.taskbarPadY.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarPadY, 2, 3, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Horizontal Spacing")
-               temp.set_alignment(0, 0.5)
-               self.tableTaskbar.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.panelSpacing = gtk.Entry(6)
-               self.panelSpacing.set_width_chars(8)
-               self.panelSpacing.set_text(TASKBAR_SPACING)
-               self.panelSpacing.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.panelSpacing, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Taskbar Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTaskbar.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.taskbarBg = gtk.combo_box_new_text()
-               self.taskbarBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.taskbarBg.append_text(str(i+1))
-               self.taskbarBg.set_active(0)
-               self.taskbarBg.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarBg, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Active Taskbar Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTaskbar.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.taskbarActiveBg = gtk.combo_box_new_text()
-               self.taskbarActiveBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.taskbarActiveBg.append_text(str(i+1))
-               self.taskbarActiveBg.set_active(0)
-               self.taskbarActiveBg.connect("changed", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarActiveBg, 1, 2, 5, 6, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.taskbarActiveBgEnable = gtk.CheckButton("Enable")
-               self.taskbarActiveBgEnable.set_active(False)
-               self.taskbarActiveBgEnable.connect("toggled", self.changeOccurred)
-               self.tableTaskbar.attach(self.taskbarActiveBgEnable, 2, 3, 5, 6, xoptions=gtk.EXPAND)
-
-               # Task Options
-               self.tableTask = gtk.Table(rows=12, columns=3, homogeneous=False)
-               self.tableTask.set_row_spacings(5)
-               self.tableTask.set_col_spacings(5)
-
-               temp = gtk.Label("Number of 'Blinks' on Urgent Event")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.taskBlinks = gtk.Entry(6)
-               self.taskBlinks.set_width_chars(8)
-               self.taskBlinks.set_text(TASK_BLINKS)
-               self.taskBlinks.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskBlinks, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Show Text")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.taskTextCheckButton = gtk.CheckButton()
-               self.taskTextCheckButton.set_active(True)
-               self.taskTextCheckButton.connect("toggled", self.changeOccurred)
-               self.tableTask.attach(self.taskTextCheckButton, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Centre Text")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.taskCentreCheckButton = gtk.CheckButton()
-               self.taskCentreCheckButton.set_active(True)
-               self.taskCentreCheckButton.connect("toggled", self.changeOccurred)
-               self.tableTask.attach(self.taskCentreCheckButton, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Maximum Size (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.taskMaxSizeX = gtk.Entry(6)
-               self.taskMaxSizeX.set_width_chars(8)
-               self.taskMaxSizeX.set_text(TASK_MAXIMUM_SIZE_X)
-               self.taskMaxSizeX.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskMaxSizeX, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-               self.taskMaxSizeY = gtk.Entry(6)
-               self.taskMaxSizeY.set_width_chars(8)
-               self.taskMaxSizeY.set_text(TASK_MAXIMUM_SIZE_Y)
-               self.taskMaxSizeY.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskMaxSizeY, 2, 3, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.taskPadX = gtk.Entry(6)
-               self.taskPadX.set_width_chars(8)
-               self.taskPadX.set_text(TASK_PADDING_X)
-               self.taskPadX.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskPadX, 1, 2, 4, 5, xoptions=gtk.EXPAND)
-               self.taskPadY = gtk.Entry(6)
-               self.taskPadY.set_width_chars(8)
-               self.taskPadY.set_text(TASK_PADDING_Y)
-               self.taskPadY.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskPadY, 2, 3, 4, 5, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Horizontal Spacing")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.taskbarSpacing = gtk.Entry(6)
-               self.taskbarSpacing.set_width_chars(8)
-               self.taskbarSpacing.set_text(TASK_SPACING)
-               self.taskbarSpacing.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskbarSpacing, 1, 2, 5, 6, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Task Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 6, 7, xpadding=10)
-               self.taskBg = gtk.combo_box_new_text()
-               self.taskBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.taskBg.append_text(str(i+1))
-               self.taskBg.set_active(0)
-               self.taskBg.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskBg, 1, 2, 6, 7, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Task Active Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTask.attach(temp, 0, 1, 7, 8, xpadding=10)
-               self.taskActiveBg = gtk.combo_box_new_text()
-               self.taskActiveBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.taskActiveBg.append_text(str(i+1))
-               self.taskActiveBg.set_active(0)
-               self.taskActiveBg.connect("changed", self.changeOccurred)
-               self.tableTask.attach(self.taskActiveBg, 1, 2, 7, 8, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               # Icon Options
-               self.tableIcon = gtk.Table(rows=7, columns=3, homogeneous=False)
-               self.tableIcon.set_row_spacings(5)
-               self.tableIcon.set_col_spacings(5)
-
-               temp = gtk.Label("Show Icons")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.taskIconCheckButton = gtk.CheckButton()
-               self.taskIconCheckButton.set_active(True)
-               self.taskIconCheckButton.connect("toggled", self.changeOccurred)
-               self.tableIcon.attach(self.taskIconCheckButton, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Note: Default values of 0 for each of these settings leaves icons unchanged!")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 1, 2, xpadding=10)
-
-               temp = gtk.Label("Icon Alpha (0 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.iconHue = gtk.Entry(6)
-               self.iconHue.set_width_chars(8)
-               self.iconHue.set_text(ICON_ALPHA)
-               self.iconHue.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.iconHue, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Icon Saturation (-100 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.iconSat = gtk.Entry(6)
-               self.iconSat.set_width_chars(8)
-               self.iconSat.set_text(ICON_SAT)
-               self.iconSat.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.iconSat, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Icon Brightness (-100 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.iconBri = gtk.Entry(6)
-               self.iconBri.set_width_chars(8)
-               self.iconBri.set_text(ICON_BRI)
-               self.iconBri.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.iconBri, 1, 2, 4, 5, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Active Icon Alpha (0 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.activeIconHue = gtk.Entry(6)
-               self.activeIconHue.set_width_chars(8)
-               self.activeIconHue.set_text(ACTIVE_ICON_ALPHA)
-               self.activeIconHue.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.activeIconHue, 1, 2, 5, 6, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Active Icon Saturation (-100 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 6, 7, xpadding=10)
-               self.activeIconSat = gtk.Entry(6)
-               self.activeIconSat.set_width_chars(8)
-               self.activeIconSat.set_text(ACTIVE_ICON_SAT)
-               self.activeIconSat.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.activeIconSat, 1, 2, 6, 7, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Active Icon Brightness (-100 to 100)")
-               temp.set_alignment(0, 0.5)
-               self.tableIcon.attach(temp, 0, 1, 7, 8, xpadding=10)
-               self.activeIconBri = gtk.Entry(6)
-               self.activeIconBri.set_width_chars(8)
-               self.activeIconBri.set_text(ACTIVE_ICON_BRI)
-               self.activeIconBri.connect("changed", self.changeOccurred)
-               self.tableIcon.attach(self.activeIconBri, 1, 2, 7, 8, xoptions=gtk.EXPAND)
-
-               # Font Options
-               self.tableFont = gtk.Table(rows=3, columns=3, homogeneous=False)
-               self.tableFont.set_row_spacings(5)
-               self.tableFont.set_col_spacings(5)
-
-               temp = gtk.Label("Font")
-               temp.set_alignment(0, 0.5)
-               self.tableFont.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.fontButton = gtk.FontButton()
-
-               if self.defaults["font"] in [None, "None"]:                                             # If there was no font specified in the config file
-                       self.defaults["font"] = self.fontButton.get_font_name()         # Use the gtk default
-
-               self.fontButton.set_font_name(self.defaults["font"])
-               self.fontButton.connect("font-set", self.changeOccurred)
-               self.tableFont.attach(self.fontButton, 1, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Font Color")
-               temp.set_alignment(0, 0.5)
-               self.tableFont.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.fontCol = gtk.Entry(7)
-               self.fontCol.set_width_chars(9)
-               self.fontCol.set_name("fontCol")
-               self.fontCol.connect("activate", self.colorTyped)
-               self.tableFont.attach(self.fontCol, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.fontColButton = gtk.ColorButton(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.fontColButton.set_use_alpha(True)
-               self.fontColButton.set_name("fontCol")
-               self.fontColButton.connect("color-set", self.colorChange)
-               self.tableFont.attach(self.fontColButton, 2, 3, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.fontCol.set_text(self.defaults["fgColor"])
-               # Add this AFTER we set color to avoid "changed" event
-               self.fontCol.connect("changed", self.changeOccurred)
-
-               temp = gtk.Label("Active Font Color")
-               temp.set_alignment(0, 0.5)
-               self.tableFont.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.fontActiveCol = gtk.Entry(7)
-               self.fontActiveCol.set_width_chars(9)
-               self.fontActiveCol.set_name("fontActiveCol")
-               self.fontActiveCol.connect("activate", self.colorTyped)
-               self.tableFont.attach(self.fontActiveCol, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-               self.fontActiveColButton = gtk.ColorButton(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.fontActiveColButton.set_use_alpha(True)
-               self.fontActiveColButton.set_name("fontActiveCol")
-               self.fontActiveColButton.connect("color-set", self.colorChange)
-               self.tableFont.attach(self.fontActiveColButton, 2, 3, 2, 3, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.fontActiveCol.set_text(self.defaults["fgColor"])
-               # Add this AFTER we set color to avoid "changed" event
-               self.fontActiveCol.connect("changed", self.changeOccurred)
-
-               temp = gtk.Label("Font Shadow")
-               temp.set_alignment(0, 0.5)
-               self.tableFont.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.fontShadowCheckButton = gtk.CheckButton()
-               self.fontShadowCheckButton.set_active(False)
-               self.fontShadowCheckButton.connect("toggled", self.changeOccurred)
-               self.tableFont.attach(self.fontShadowCheckButton, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-
-               # Systray Options
-               self.tableTray = gtk.Table(rows=3, columns=3, homogeneous=False)
-               self.tableTray.set_row_spacings(5)
-               self.tableTray.set_col_spacings(5)
-
-               temp = gtk.Label("Show Systray")
-               temp.set_alignment(0, 0.5)
-               self.tableTray.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.trayShow = gtk.CheckButton()
-               self.trayShow.set_active(True)
-               self.trayShow.connect("toggled", self.changeOccurred)
-               self.tableTray.attach(self.trayShow, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableTray.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.trayPadX = gtk.Entry(6)
-               self.trayPadX.set_width_chars(8)
-               self.trayPadX.set_text(TRAY_PADDING_X)
-               self.trayPadX.connect("changed", self.changeOccurred)
-               self.tableTray.attach(self.trayPadX, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.trayPadY = gtk.Entry(6)
-               self.trayPadY.set_width_chars(8)
-               self.trayPadY.set_text(TRAY_PADDING_Y)
-               self.trayPadY.connect("changed", self.changeOccurred)
-               self.tableTray.attach(self.trayPadY, 2, 3, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Horizontal Spacing")
-               temp.set_alignment(0, 0.5)
-               self.tableTray.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.traySpacing = gtk.Entry(6)
-               self.traySpacing.set_width_chars(8)
-               self.traySpacing.set_text(TRAY_SPACING)
-               self.traySpacing.connect("changed", self.changeOccurred)
-               self.tableTray.attach(self.traySpacing, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Icon Ordering")
-               temp.set_alignment(0, 0.5)
-               self.tableTray.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.trayOrder = gtk.combo_box_new_text()
-               self.trayOrder.append_text("ascending")
-               self.trayOrder.append_text("descending")
-               self.trayOrder.append_text("left2right")
-               self.trayOrder.append_text("right2left")
-               self.trayOrder.set_active(0)
-               self.trayOrder.connect("changed", self.changeOccurred)
-               self.tableTray.attach(self.trayOrder, 1, 2, 3, 4, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Systray Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTray.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.trayBg = gtk.combo_box_new_text()
-               self.trayBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.trayBg.append_text(str(i+1))
-               self.trayBg.set_active(0)
-               self.trayBg.connect("changed", self.changeOccurred)
-               self.tableTray.attach(self.trayBg, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               # Clock Options
-               self.tableClockDisplays = gtk.Table(rows=3, columns=3, homogeneous=False)
-               self.tableClockDisplays.set_row_spacings(5)
-               self.tableClockDisplays.set_col_spacings(5)
-
-               temp = gtk.Label("Show Clock")
-               temp.set_alignment(0, 0.5)
-               self.tableClockDisplays.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.clockCheckButton = gtk.CheckButton()
-               self.clockCheckButton.set_active(True)
-               self.clockCheckButton.connect("toggled", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clockCheckButton, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Time 1 Format")
-               temp.set_alignment(0, 0.5)
-               self.tableClockDisplays.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.clock1Format = gtk.Entry(50)
-               self.clock1Format.set_width_chars(20)
-               self.clock1Format.set_text(CLOCK_FMT_1)
-               self.clock1Format.connect("changed", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock1Format, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.clock1CheckButton = gtk.CheckButton("Show")
-               self.clock1CheckButton.set_active(True)
-               self.clock1CheckButton.connect("toggled", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock1CheckButton, 2, 3, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Time 1 Font")
-               temp.set_alignment(0, 0.5)
-               self.tableClockDisplays.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.clock1FontButton = gtk.FontButton()
-               self.clock1FontButton.set_font_name(self.defaults["font"])
-               self.clock1FontButton.connect("font-set", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock1FontButton, 1, 2, 2, 3, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Time 2 Format")
-               temp.set_alignment(0, 0.5)
-               self.tableClockDisplays.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.clock2Format = gtk.Entry(50)
-               self.clock2Format.set_width_chars(20)
-               self.clock2Format.set_text(CLOCK_FMT_2)
-               self.clock2Format.connect("changed", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock2Format, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-               self.clock2CheckButton = gtk.CheckButton("Show")
-               self.clock2CheckButton.set_active(True)
-               self.clock2CheckButton.connect("toggled", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock2CheckButton, 2, 3, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Time 2 Font")
-               temp.set_alignment(0, 0.5)
-               self.tableClockDisplays.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.clock2FontButton = gtk.FontButton()
-               self.clock2FontButton.set_font_name(self.defaults["font"])
-               self.clock2FontButton.connect("font-set", self.changeOccurred)
-               self.tableClockDisplays.attach(self.clock2FontButton, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               self.clockArea = gtk.ScrolledWindow()
-               self.clockBuf = gtk.TextBuffer()
-               self.clockTextView = gtk.TextView(self.clockBuf)
-               self.clockBuf.insert_at_cursor("%H 00-23 (24-hour)    %I 01-12 (12-hour)    %l 1-12 (12-hour)    %M 00-59 (minutes)\n%S 00-59 (seconds)    %P am/pm    %b Jan-Dec    %B January-December\n%a Sun-Sat    %A Sunday-Saturday    %d 01-31 (day)    %e 1-31 (day)\n%y 2 digit year, e.g. 09    %Y 4 digit year, e.g. 2009")
-               self.clockTextView.set_editable(False)
-               self.clockArea.add_with_viewport(self.clockTextView)
-               self.tableClockDisplays.attach(self.clockArea, 0, 3, 5, 6, xpadding=10)
-
-               self.tableClockSettings = gtk.Table(rows=3, columns=3, homogeneous=False)
-               self.tableClockSettings.set_row_spacings(5)
-               self.tableClockSettings.set_col_spacings(5)
-
-               temp = gtk.Label("Clock Font Color")
-               temp.set_alignment(0, 0.5)
-               self.tableClockSettings.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.clockFontCol = gtk.Entry(7)
-               self.clockFontCol.set_width_chars(9)
-               self.clockFontCol.set_name("clockFontCol")
-               self.clockFontCol.connect("activate", self.colorTyped)
-               self.tableClockSettings.attach(self.clockFontCol, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-               self.clockFontColButton = gtk.ColorButton(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.clockFontColButton.set_use_alpha(True)
-               self.clockFontColButton.set_name("clockFontCol")
-               self.clockFontColButton.connect("color-set", self.colorChange)
-               self.tableClockSettings.attach(self.clockFontColButton, 2, 3, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.clockFontCol.set_text(self.defaults["fgColor"])
-               # Add this AFTER we set color to avoid "changed" event
-               self.clockFontCol.connect("changed", self.changeOccurred)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableClockSettings.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.clockPadX = gtk.Entry(6)
-               self.clockPadX.set_width_chars(8)
-               self.clockPadX.set_text(CLOCK_PADDING_X)
-               self.clockPadX.connect("changed", self.changeOccurred)
-               self.tableClockSettings.attach(self.clockPadX, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.clockPadY = gtk.Entry(6)
-               self.clockPadY.set_width_chars(8)
-               self.clockPadY.set_text(CLOCK_PADDING_Y)
-               self.clockPadY.connect("changed", self.changeOccurred)
-               self.tableClockSettings.attach(self.clockPadY, 2, 3, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Clock Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableClockSettings.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.clockBg = gtk.combo_box_new_text()
-               self.clockBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.clockBg.append_text(str(i+1))
-               self.clockBg.set_active(0)
-               self.clockBg.connect("changed", self.changeOccurred)
-               self.tableClockSettings.attach(self.clockBg, 1, 2, 2, 3, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Left Click Command")
-               temp.set_alignment(0, 0.5)
-               self.tableClockSettings.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.clockLClick = gtk.Entry(50)
-               self.clockLClick.set_width_chars(20)
-               self.clockLClick.set_text(CLOCK_LCLICK)
-               self.clockLClick.connect("changed", self.changeOccurred)
-               self.tableClockSettings.attach(self.clockLClick, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Right Click Command")
-               temp.set_alignment(0, 0.5)
-               self.tableClockSettings.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.clockRClick = gtk.Entry(50)
-               self.clockRClick.set_width_chars(20)
-               self.clockRClick.set_text(CLOCK_RCLICK)
-               self.clockRClick.connect("changed", self.changeOccurred)
-               self.tableClockSettings.attach(self.clockRClick, 1, 2, 4, 5, xoptions=gtk.EXPAND)
-
-               # Tooltip Options
-               self.tableTooltip = gtk.Table(rows=7, columns=3, homogeneous=False)
-               self.tableTooltip.set_row_spacings(5)
-               self.tableTooltip.set_col_spacings(5)
-
-               temp = gtk.Label("Show Tooltips")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.tooltipShow = gtk.CheckButton()
-               self.tooltipShow.set_active(False)
-               self.tooltipShow.connect("toggled", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipShow, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.tooltipPadX = gtk.Entry(6)
-               self.tooltipPadX.set_width_chars(8)
-               self.tooltipPadX.set_text(TOOLTIP_PADDING_X)
-               self.tooltipPadX.connect("changed", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipPadX, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-               self.tooltipPadY = gtk.Entry(6)
-               self.tooltipPadY.set_width_chars(8)
-               self.tooltipPadY.set_text(TOOLTIP_PADDING_Y)
-               self.tooltipPadY.connect("changed", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipPadY, 2, 3, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Tooltip Show Timeout (seconds)")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.tooltipShowTime = gtk.Entry(6)
-               self.tooltipShowTime.set_width_chars(8)
-               self.tooltipShowTime.set_text(TOOLTIP_SHOW_TIMEOUT)
-               self.tooltipShowTime.connect("changed", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipShowTime, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Tooltip Hide Timeout (seconds)")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.tooltipHideTime = gtk.Entry(6)
-               self.tooltipHideTime.set_width_chars(8)
-               self.tooltipHideTime.set_text(TOOLTIP_HIDE_TIMEOUT)
-               self.tooltipHideTime.connect("changed", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipHideTime, 1, 2, 3, 4, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Tooltip Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.tooltipBg = gtk.combo_box_new_text()
-               self.tooltipBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.tooltipBg.append_text(str(i+1))
-               self.tooltipBg.set_active(0)
-               self.tooltipBg.connect("changed", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipBg, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Tooltip Font")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.tooltipFont = gtk.FontButton()
-               self.tooltipFont.set_font_name(self.defaults["font"])
-               self.tooltipFont.connect("font-set", self.changeOccurred)
-               self.tableTooltip.attach(self.tooltipFont, 1, 2, 5, 6, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Tooltip Font Color")
-               temp.set_alignment(0, 0.5)
-               self.tableTooltip.attach(temp, 0, 1, 6, 7, xpadding=10)
-               self.tooltipFontCol = gtk.Entry(7)
-               self.tooltipFontCol.set_width_chars(9)
-               self.tooltipFontCol.set_name("tooltipFontCol")
-               self.tooltipFontCol.connect("activate", self.colorTyped)
-               self.tableTooltip.attach(self.tooltipFontCol, 1, 2, 6, 7, xoptions=gtk.EXPAND)
-               self.tooltipFontColButton = gtk.ColorButton(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.tooltipFontColButton.set_use_alpha(True)
-               self.tooltipFontColButton.set_name("tooltipFontCol")
-               self.tooltipFontColButton.connect("color-set", self.colorChange)
-               self.tableTooltip.attach(self.tooltipFontColButton, 2, 3, 6, 7, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.tooltipFontCol.set_text(self.defaults["fgColor"])
-               # Add this AFTER we set color to avoid "changed" event
-               self.clockFontCol.connect("changed", self.changeOccurred)
-
-               # Mouse Options
-               self.tableMouse = gtk.Table(rows=4, columns=3, homogeneous=False)
-               self.tableMouse.set_row_spacings(5)
-               self.tableMouse.set_col_spacings(5)
-
-               temp = gtk.Label("Middle Mouse Click Action")
-               temp.set_alignment(0, 0.5)
-               self.tableMouse.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.mouseMiddle = gtk.combo_box_new_text()
-               self.mouseMiddle.append_text("none")
-               self.mouseMiddle.append_text("close")
-               self.mouseMiddle.append_text("toggle")
-               self.mouseMiddle.append_text("iconify")
-               self.mouseMiddle.append_text("shade")
-               self.mouseMiddle.append_text("toggle_iconify")
-               self.mouseMiddle.append_text("maximize_restore")
-               self.mouseMiddle.append_text("desktop_left")
-               self.mouseMiddle.append_text("desktop_right")
-               self.mouseMiddle.set_active(0)
-               self.mouseMiddle.connect("changed", self.changeOccurred)
-               self.tableMouse.attach(self.mouseMiddle, 1, 2, 0, 1, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Right Mouse Click Action")
-               temp.set_alignment(0, 0.5)
-               self.tableMouse.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.mouseRight = gtk.combo_box_new_text()
-               self.mouseRight.append_text("none")
-               self.mouseRight.append_text("close")
-               self.mouseRight.append_text("toggle")
-               self.mouseRight.append_text("iconify")
-               self.mouseRight.append_text("shade")
-               self.mouseRight.append_text("toggle_iconify")
-               self.mouseRight.append_text("maximize_restore")
-               self.mouseRight.append_text("desktop_left")
-               self.mouseRight.append_text("desktop_right")
-               self.mouseRight.set_active(0)
-               self.mouseRight.connect("changed", self.changeOccurred)
-               self.tableMouse.attach(self.mouseRight, 1, 2, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Mouse Wheel Scroll Up Action")
-               temp.set_alignment(0, 0.5)
-               self.tableMouse.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.mouseUp = gtk.combo_box_new_text()
-               self.mouseUp.append_text("none")
-               self.mouseUp.append_text("close")
-               self.mouseUp.append_text("toggle")
-               self.mouseUp.append_text("iconify")
-               self.mouseUp.append_text("shade")
-               self.mouseUp.append_text("toggle_iconify")
-               self.mouseUp.append_text("maximize_restore")
-               self.mouseUp.append_text("desktop_left")
-               self.mouseUp.append_text("desktop_right")
-               self.mouseUp.set_active(0)
-               self.mouseUp.connect("changed", self.changeOccurred)
-               self.tableMouse.attach(self.mouseUp, 1, 2, 2, 3, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Mouse Wheel Scroll Down Action")
-               temp.set_alignment(0, 0.5)
-               self.tableMouse.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.mouseDown = gtk.combo_box_new_text()
-               self.mouseDown.append_text("none")
-               self.mouseDown.append_text("close")
-               self.mouseDown.append_text("toggle")
-               self.mouseDown.append_text("iconify")
-               self.mouseDown.append_text("shade")
-               self.mouseDown.append_text("toggle_iconify")
-               self.mouseDown.append_text("maximize_restore")
-               self.mouseDown.append_text("desktop_left")
-               self.mouseDown.append_text("desktop_right")
-               self.mouseDown.set_active(0)
-               self.mouseDown.connect("changed", self.changeOccurred)
-               self.tableMouse.attach(self.mouseDown, 1, 2, 3, 4, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               # Battery Options
-               self.tableBattery = gtk.Table(rows=8, columns=3, homogeneous=False)
-               self.tableBattery.set_row_spacings(5)
-               self.tableBattery.set_col_spacings(5)
-
-               temp = gtk.Label("Show Battery Applet")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 0, 1, xpadding=10)
-               self.batteryCheckButton = gtk.CheckButton()
-               self.batteryCheckButton.set_active(False)
-               self.batteryCheckButton.connect("toggled", self.changeOccurred)
-               self.tableBattery.attach(self.batteryCheckButton, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery Low Status (%)")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 1, 2, xpadding=10)
-               self.batteryLow = gtk.Entry(6)
-               self.batteryLow.set_width_chars(8)
-               self.batteryLow.set_text(BATTERY_LOW)
-               self.batteryLow.connect("changed", self.changeOccurred)
-               self.tableBattery.attach(self.batteryLow, 1, 2, 1, 2, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery Low Action")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 2, 3, xpadding=10)
-               self.batteryLowAction = gtk.Entry(150)
-               self.batteryLowAction.set_width_chars(32)
-               self.batteryLowAction.set_text(BATTERY_ACTION)
-               self.batteryLowAction.connect("changed", self.changeOccurred)
-               self.tableBattery.attach(self.batteryLowAction, 1, 3, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery 1 Font")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 3, 4, xpadding=10)
-               self.bat1FontButton = gtk.FontButton()
-               self.bat1FontButton.set_font_name(self.defaults["font"])
-               self.bat1FontButton.connect("font-set", self.changeOccurred)
-               self.tableBattery.attach(self.bat1FontButton, 1, 2, 3, 4, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery 2 Font")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 4, 5, xpadding=10)
-               self.bat2FontButton = gtk.FontButton()
-               self.bat2FontButton.set_font_name(self.defaults["font"])
-               self.bat2FontButton.connect("font-set", self.changeOccurred)
-               self.tableBattery.attach(self.bat2FontButton, 1, 2, 4, 5, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery Font Color")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 5, 6, xpadding=10)
-               self.batteryFontCol = gtk.Entry(7)
-               self.batteryFontCol.set_width_chars(9)
-               self.batteryFontCol.set_name("batteryFontCol")
-               self.batteryFontCol.connect("activate", self.colorTyped)
-               self.tableBattery.attach(self.batteryFontCol, 1, 2, 5, 6, xoptions=gtk.EXPAND)
-               self.batteryFontColButton = gtk.ColorButton(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.batteryFontColButton.set_use_alpha(True)
-               self.batteryFontColButton.set_name("batteryFontCol")
-               self.batteryFontColButton.connect("color-set", self.colorChange)
-               self.tableBattery.attach(self.batteryFontColButton, 2, 3, 5, 6, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-               self.batteryFontCol.set_text(self.defaults["fgColor"])
-               # Add this AFTER we set color to avoid "changed" event
-               self.batteryFontCol.connect("changed", self.changeOccurred)
-
-               temp = gtk.Label("Padding (x, y)")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 6, 7, xpadding=10)
-               self.batteryPadX = gtk.Entry(6)
-               self.batteryPadX.set_width_chars(8)
-               self.batteryPadX.set_text(BATTERY_PADDING_X)
-               self.batteryPadX.connect("changed", self.changeOccurred)
-               self.tableBattery.attach(self.batteryPadX, 1, 2, 6, 7, xoptions=gtk.EXPAND)
-               self.batteryPadY = gtk.Entry(6)
-               self.batteryPadY.set_width_chars(8)
-               self.batteryPadY.set_text(BATTERY_PADDING_Y)
-               self.batteryPadY.connect("changed", self.changeOccurred)
-               self.tableBattery.attach(self.batteryPadY, 2, 3, 6, 7, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Battery Background ID")
-               temp.set_alignment(0, 0.5)
-               self.tableBattery.attach(temp, 0, 1, 7, 8, xpadding=10)
-               self.batteryBg = gtk.combo_box_new_text()
-               self.batteryBg.append_text("0 (fully transparent)")
-               for i in range(len(self.bgs)):
-                       self.batteryBg.append_text(str(i+1))
-               self.batteryBg.set_active(0)
-               self.batteryBg.connect("changed", self.changeOccurred)
-               self.tableBattery.attach(self.batteryBg, 1, 2, 7, 8, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
+               self.createTaskbarWidgets()
+               
+               # Tasks
+               self.createTaskSettingsWidgets()
+               self.createNormalTasksWidgets()
+               self.createActiveTasksWidgets()
+               self.createUrgentTasksWidgets()
+               self.createIconifiedTasksWidgets()
+               
+               # System Tray
+               self.createSystemTrayWidgets()
+               
+               # Clock
+               self.createClockDisplayWidgets()
+               self.createClockSettingsWidgets()
+               
+               # Mouse
+               self.createMouseWidgets()
+               
+               # Tooltips
+               self.createTooltipsWidgets()
+               
+               # Battery
+               self.createBatteryWidgets()
+               
                # View Config
                self.configArea = gtk.ScrolledWindow()
                self.configBuf = gtk.TextBuffer()
@@ -1205,14 +371,24 @@ class TintWizardGUI(gtk.Window):
                self.bgNotebook.set_current_page(0)
 
                # Create sub-notebooks
+               self.panelNotebook = gtk.Notebook()
+               self.panelNotebook.set_tab_pos(gtk.POS_TOP)
+               self.panelNotebook.set_current_page(0)
+               
+               self.panelNotebook.append_page(self.tablePanelDisplay, gtk.Label("Panel Display"))
+               self.panelNotebook.append_page(self.tablePanelSettings, gtk.Label("Panel Settings"))
+               self.panelNotebook.append_page(self.tablePanelAutohide, gtk.Label("Panel Autohide"))
+               
                self.taskNotebook = gtk.Notebook()
                self.taskNotebook.set_tab_pos(gtk.POS_TOP)
                self.taskNotebook.set_current_page(0)
 
                self.taskNotebook.append_page(self.tableTask, gtk.Label("Task Settings"))
-               self.taskNotebook.append_page(self.tableIcon, gtk.Label("Task Icons"))
-               self.taskNotebook.append_page(self.tableFont, gtk.Label("Task Fonts"))
-
+               self.taskNotebook.append_page(self.tableTaskDefault, gtk.Label("Normal Tasks"))
+               self.taskNotebook.append_page(self.tableTaskActive, gtk.Label("Active Tasks"))
+               self.taskNotebook.append_page(self.tableTaskUrgent, gtk.Label("Urgent Tasks"))
+               self.taskNotebook.append_page(self.tableTaskIconified, gtk.Label("Iconified Tasks"))
+               
                self.clockNotebook = gtk.Notebook()
                self.clockNotebook.set_tab_pos(gtk.POS_TOP)
                self.clockNotebook.set_current_page(0)
@@ -1222,10 +398,10 @@ class TintWizardGUI(gtk.Window):
 
                # Add pages to notebook
                self.notebook.append_page(self.tableBgs, gtk.Label("Backgrounds"))
-               self.notebook.append_page(self.tablePanel, gtk.Label("Panel"))
+               self.notebook.append_page(self.panelNotebook, gtk.Label("Panel"))
                self.notebook.append_page(self.tableTaskbar, gtk.Label("Taskbar"))
                self.notebook.append_page(self.taskNotebook, gtk.Label("Tasks"))
-               self.notebook.append_page(self.tableTray, gtk.Label("Systray"))
+               self.notebook.append_page(self.tableTray, gtk.Label("System Tray"))
                self.notebook.append_page(self.clockNotebook, gtk.Label("Clock"))
                self.notebook.append_page(self.tableMouse, gtk.Label("Mouse"))
                self.notebook.append_page(self.tableTooltip, gtk.Label("Tooltips"))
@@ -1259,73 +435,544 @@ class TintWizardGUI(gtk.Window):
                self.add(self.table)
 
                self.show_all()
-
-               # Create our property dictionary. This holds the widgets which correspond to each property
-               self.propUI = {
-                       "panel_monitor": self.panelMonitor,
-                       "panel_position": (self.panelPosY, self.panelPosX, self.panelOrientation),
-                       "panel_size": (self.panelSizeX, self.panelSizeY),
-                       "panel_margin": (self.panelMarginX, self.panelMarginY),
-                       "panel_padding": (self.panelPadX, self.panelPadY, self.panelSpacing),
-                       "wm_menu": self.panelMenu,
-                       "panel_dock": self.panelDock,
-                       "panel_background_id": self.panelBg,
-                       "taskbar_mode": self.taskbarMode,
-                       "taskbar_padding": (self.taskbarPadX, self.taskbarPadY, self.taskbarSpacing),
-                       "taskbar_background_id": self.taskbarBg,
-                       "taskbar_active_background_id": self.taskbarActiveBg,
-                       "task_icon": self.taskIconCheckButton,
-                       "task_text": self.taskTextCheckButton,
-                       "task_centered": self.taskCentreCheckButton,
-                       "task_maximum_size": (self.taskMaxSizeX, self.taskMaxSizeY),
-                       "task_padding": (self.taskPadX, self.taskPadY),
-                       "task_background_id": self.taskBg,
-                       "task_active_background_id": self.taskActiveBg,
-                       "task_font": self.fontButton,
-                       "task_font_color": (self.fontCol, self.fontColButton),
-                       "task_active_font_color": (self.fontActiveCol, self.fontActiveColButton),
-                       "task_icon_asb": (self.iconHue, self.iconSat, self.iconBri),
-                       "task_active_icon_asb": (self.activeIconHue, self.activeIconSat, self.activeIconBri),
-                       "font_shadow": self.fontShadowCheckButton,
-                       "systray": self.trayShow,
-                       "systray_padding": (self.trayPadX, self.trayPadY, self.traySpacing),
-                       "systray_background_id": self.trayBg,
-                       "systray_sort": self.trayOrder,
-                       "time1_format": self.clock1Format,
-                       "time2_format": self.clock2Format,
-                       "time1_font": self.clock1FontButton,
-                       "time2_font": self.clock2FontButton,
-                       "clock_font_color": (self.clockFontCol, self.clockFontColButton),
-                       "clock_padding": (self.clockPadX, self.clockPadY),
-                       "clock_background_id": self.clockBg,
-                       "clock_lclick_command": self.clockLClick,
-                       "clock_rclick_command": self.clockRClick,
-                       "mouse_middle": self.mouseMiddle,
-                       "mouse_right": self.mouseRight,
-                       "mouse_scroll_up": self.mouseUp,
-                       "mouse_scroll_down": self.mouseDown,
-                       "tooltip": self.tooltipShow,
-                       "tooltip_padding": (self.tooltipPadX, self.tooltipPadY),
-                       "tooltip_show_timeout": self.tooltipShowTime,
-                       "tooltip_hide_timeout": self.tooltipHideTime,
-                       "tooltip_background_id": self.tooltipBg,
-                       "tooltip_font": self.tooltipFont,
-                       "tooltip_font_color": (self.tooltipFontCol, self.tooltipFontColButton),
-                       "battery": self.batteryCheckButton,
-                       "battery_low_status": self.batteryLow,
-                       "battery_low_cmd": self.batteryLowAction,
-                       "bat1_font": self.bat1FontButton,
-                       "bat2_font": self.bat2FontButton,
-                       "battery_font_color": (self.batteryFontCol, self.batteryFontColButton),
-                       "battery_padding": (self.batteryPadX, self.batteryPadY),
-                       "battery_background_id": self.batteryBg
-               }
-
+               
+               # If tintwizard was launched with a tint2 config filename
+               # as an argument, load that config.
                if self.oneConfigFile:
                        self.readTint2Config()
 
                self.generateConfig()
-
+       
+       def createPanelDisplayWidgets(self):
+               """Create the Panel Display widgets."""
+               self.tablePanelDisplay = gtk.Table(rows=7, columns=3, homogeneous=False)
+               self.tablePanelDisplay.set_row_spacings(5)
+               self.tablePanelDisplay.set_col_spacings(5)
+               
+               createLabel(self.tablePanelDisplay, text="Position", gridX=0, gridY=0, xPadding=10)
+               self.panelPosY = createComboBox(self.tablePanelDisplay, ["bottom", "top", "center"], gridX=1, gridY=0, handler=self.changeOccurred)
+               self.panelPosX = createComboBox(self.tablePanelDisplay, ["left", "right", "center"], gridX=2, gridY=0, handler=self.changeOccurred)
+               # Note: registered below
+               
+               createLabel(self.tablePanelDisplay, text="Panel Orientation", gridX=0, gridY=1, xPadding=10)
+               self.panelOrientation = createComboBox(self.tablePanelDisplay, ["horizontal", "vertical"], gridX=1, gridY=1, handler=self.changeOccurred)
+               self.registerComponent("panel_position", (self.panelPosY, self.panelPosX, self.panelOrientation))
+               
+               createLabel(self.tablePanelDisplay, text="Panel Items", gridX=0, gridY=2, xPadding=10)
+               self.panelItems = createEntry(self.tablePanelDisplay, maxSize=7, width=8, text=PANEL_ITEMS, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_items", self.panelItems)
+               
+               self.panelSizeLabel = createLabel(self.tablePanelDisplay, text="Size (width, height)", gridX=0, gridY=3, xPadding=10)
+               self.panelSizeX = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_SIZE_X, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.panelSizeY = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_SIZE_Y, gridX=2, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_size", (self.panelSizeX, self.panelSizeY))
+               
+               createLabel(self.tablePanelDisplay, text="Margin (x, y)", gridX=0, gridY=4, xPadding=10)
+               self.panelMarginX = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_MARGIN_X, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.panelMarginY = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_MARGIN_Y, gridX=2, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_margin", (self.panelMarginX, self.panelMarginY))
+               
+               createLabel(self.tablePanelDisplay, text="Padding (x, y)", gridX=0, gridY=5, xPadding=10)
+               self.panelPadX = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_PADDING_X, gridX=1, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.panelPadY = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=PANEL_PADDING_Y, gridX=2, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tablePanelDisplay, text="Horizontal Spacing", gridX=0, gridY=6, xPadding=10)
+               self.panelSpacing = createEntry(self.tablePanelDisplay, maxSize=6, width=8, text=TASKBAR_SPACING, gridX=1, gridY=6, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_padding", (self.panelPadX, self.panelPadY, self.panelSpacing))
+               
+               createLabel(self.tablePanelDisplay, text="Panel Background ID", gridX=0, gridY=7, xPadding=10)
+               self.panelBg = createComboBox(self.tablePanelDisplay, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=7, handler=self.changeOccurred)
+               self.registerComponent("panel_background_id", self.panelBg)
+               
+       def createPanelSettingsWidgets(self):
+               """Create the Panel Settings widgets."""
+               self.tablePanelSettings = gtk.Table(rows=5, columns=3, homogeneous=False)
+               self.tablePanelSettings.set_row_spacings(5)
+               self.tablePanelSettings.set_col_spacings(5)
+               
+               createLabel(self.tablePanelSettings, text="Window Manager Menu", gridX=0, gridY=0, xPadding=10)
+               self.panelMenu = createCheckButton(self.tablePanelSettings, active=False, gridX=1, gridY=0, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("wm_menu", self.panelMenu)
+               
+               createLabel(self.tablePanelSettings, text="Place In Window Manager Dock", gridX=0, gridY=1, xPadding=10)
+               self.panelDock = createCheckButton(self.tablePanelSettings, active=False, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_dock", self.panelDock)
+               
+               createLabel(self.tablePanelSettings, text="Panel Layer", gridX=0, gridY=2, xPadding=10)
+               self.panelLayer = createComboBox(self.tablePanelSettings, ["bottom", "top", "normal"], gridX=1, gridY=2, handler=self.changeOccurred)
+               self.registerComponent("panel_layer", self.panelLayer)
+               
+               createLabel(self.tablePanelSettings, text="Strut Policy", gridX=0, gridY=3, xPadding=10)
+               self.panelAutohideStrut = createComboBox(self.tablePanelSettings, ["none", "minimum", "follow_size"], gridX=1, gridY=3, handler=self.changeOccurred)
+               self.registerComponent("strut_policy", self.panelAutohideStrut)
+               
+               createLabel(self.tablePanelSettings, text="Panel Monitor (all, 1, 2, ...)", gridX=0, gridY=4, xPadding=10)
+               self.panelMonitor = createEntry(self.tablePanelSettings, maxSize=6, width=8, text=PANEL_MONITOR, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("panel_monitor", self.panelMonitor)
+               
+       def createPanelAutohideWidgets(self):
+               """Create the Panel Autohide widgets."""
+               self.tablePanelAutohide = gtk.Table(rows=4, columns=3, homogeneous=False)
+               self.tablePanelAutohide.set_row_spacings(5)
+               self.tablePanelAutohide.set_col_spacings(5)
+               
+               createLabel(self.tablePanelAutohide, text="Autohide Panel", gridX=0, gridY=0, xPadding=10)
+               self.panelAutohide = createCheckButton(self.tablePanelAutohide, active=False, gridX=1, gridY=0, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("autohide", self.panelAutohide)
+               
+               createLabel(self.tablePanelAutohide, text="Autohide Show Timeout (seconds)", gridX=0, gridY=1, xPadding=10)
+               self.panelAutohideShow = createEntry(self.tablePanelAutohide, maxSize=6, width=8, text=PANEL_AUTOHIDE_SHOW, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("autohide_show_timeout", self.panelAutohideShow)
+               
+               createLabel(self.tablePanelAutohide, text="Autohide Hide Timeout (seconds)", gridX=0, gridY=2, xPadding=10)
+               self.panelAutohideHide = createEntry(self.tablePanelAutohide, maxSize=6, width=8, text=PANEL_AUTOHIDE_HIDE, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("autohide_hide_timeout", self.panelAutohideHide)
+               
+               createLabel(self.tablePanelAutohide, text="Autohide Hidden Height", gridX=0, gridY=3, xPadding=10)
+               self.panelAutohideHeight = createEntry(self.tablePanelAutohide, maxSize=6, width=8, text=PANEL_AUTOHIDE_HEIGHT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("autohide_height", self.panelAutohideHeight)
+       
+       def createTaskbarWidgets(self):
+               """Create the Taskbar widgets."""
+               self.tableTaskbar = gtk.Table(rows=5, columns=3, homogeneous=False)
+               self.tableTaskbar.set_row_spacings(5)
+               self.tableTaskbar.set_col_spacings(5)
+               
+               createLabel(self.tableTaskbar, text="Taskbar Mode", gridX=0, gridY=0, xPadding=10)
+               self.taskbarMode = createComboBox(self.tableTaskbar, ["single_desktop", "multi_desktop"], gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("taskbar_mode", self.taskbarMode)
+               
+               createLabel(self.tableTaskbar, text="Padding (x, y)", gridX=0, gridY=1, xPadding=10)
+               self.taskbarPadX = createEntry(self.tableTaskbar, maxSize=6, width=8, text=TASKBAR_PADDING_X, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.taskbarPadY = createEntry(self.tableTaskbar, maxSize=6, width=8, text=TASKBAR_PADDING_Y, gridX=2, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskbar, text="Horizontal Spacing", gridX=0, gridY=2, xPadding=10)
+               self.taskbarSpacing = createEntry(self.tableTaskbar, maxSize=6, width=8, text=TASK_SPACING, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("taskbar_padding", (self.taskbarPadX, self.taskbarPadY, self.taskbarSpacing))
+               
+               createLabel(self.tableTaskbar, text="Taskbar Background ID", gridX=0, gridY=3, xPadding=10)
+               self.taskbarBg = createComboBox(self.tableTaskbar, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=3, handler=self.changeOccurred)
+               self.registerComponent("taskbar_background_id", self.taskbarBg)
+               
+               createLabel(self.tableTaskbar, text="Active Taskbar Background ID", gridX=0, gridY=4, xPadding=10)
+               self.taskbarActiveBg = createComboBox(self.tableTaskbar, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("taskbar_active_background_id", self.taskbarActiveBg)
+       
+       def createTaskSettingsWidgets(self):
+               """Create the Task Settings widgets."""
+               self.tableTask = gtk.Table(rows=12, columns=3, homogeneous=False)
+               self.tableTask.set_row_spacings(5)
+               self.tableTask.set_col_spacings(5)
+               
+               createLabel(self.tableTask, text="Number of 'Blinks' on Urgent Event", gridX=0, gridY=0, xPadding=10)
+               self.taskBlinks = createEntry(self.tableTask, maxSize=6, width=8, text=TASK_BLINKS, gridX=1, gridY=0, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("urgent_nb_of_blink", self.taskBlinks)
+               
+               createLabel(self.tableTask, text="Show Icons", gridX=0, gridY=1, xPadding=10)
+               self.taskIconCheckButton = createCheckButton(self.tableTask, active=True, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_icon", self.taskIconCheckButton)
+               
+               createLabel(self.tableTask, text="Show Text", gridX=0, gridY=2, xPadding=10)
+               self.taskTextCheckButton = createCheckButton(self.tableTask, active=True, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_text", self.taskTextCheckButton)
+               
+               createLabel(self.tableTask, text="Centre Text", gridX=0, gridY=3, xPadding=10)
+               self.taskCentreCheckButton = createCheckButton(self.tableTask, active=True, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_centered", self.taskCentreCheckButton)
+               
+               createLabel(self.tableTask, text="Font", gridX=0, gridY=4, xPadding=10)
+               self.fontButton = gtk.FontButton()
+               
+               if self.defaults["font"] in [None, "None"]:                                             # If there was no font specified in the config file
+                       self.defaults["font"] = self.fontButton.get_font_name()         # Use the gtk default
+               
+               self.fontButton = createFontButton(self.tableTask, font=self.defaults["font"], gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("task_font", self.fontButton)
+               
+               createLabel(self.tableTask, text="Show Font Shadow", gridX=0, gridY=5, xPadding=10)
+               self.fontShadowCheckButton = createCheckButton(self.tableTask, active=False, gridX=1, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("font_shadow", self.fontShadowCheckButton)
+               
+               createLabel(self.tableTask, text="Maximum Size (x, y)", gridX=0, gridY=6, xPadding=10)
+               self.taskMaxSizeX = createEntry(self.tableTask, maxSize=6, width=8, text=TASK_MAXIMUM_SIZE_X, gridX=1, gridY=6, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.taskMaxSizeY = createEntry(self.tableTask, maxSize=6, width=8, text=TASK_MAXIMUM_SIZE_Y, gridX=2, gridY=6, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_maximum_size", (self.taskMaxSizeX, self.taskMaxSizeY))
+               
+               createLabel(self.tableTask, text="Padding (x, y)", gridX=0, gridY=7, xPadding=10)
+               self.taskPadX = createEntry(self.tableTask, maxSize=6, width=8, text=TASK_PADDING_X, gridX=1, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.taskPadY = createEntry(self.tableTask, maxSize=6, width=8, text=TASK_PADDING_Y, gridX=2, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_padding", (self.taskPadX, self.taskPadY))
+               
+       def createNormalTasksWidgets(self):
+               """Create the Normal Tasks widgets."""
+               self.tableTaskDefault = gtk.Table(rows=6, columns=3, homogeneous=False)
+               self.tableTaskDefault.set_row_spacings(5)
+               self.tableTaskDefault.set_col_spacings(5)
+               
+               createLabel(self.tableTaskDefault, text="Normal Task Background ID", gridX=0, gridY=0, xPadding=10)
+               self.taskBg = createComboBox(self.tableTaskDefault, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("task_background_id", self.taskBg)
+               
+               createLabel(self.tableTaskDefault, text="Note: Default values of 0 for each of these settings leaves icons unchanged!", gridX=0, gridY=1, sizeX=3, xPadding=10)
+               
+               createLabel(self.tableTaskDefault, text="Normal Icon Alpha (0 to 100)", gridX=0, gridY=2, xPadding=10)
+               self.iconHue = createEntry(self.tableTaskDefault, maxSize=6, width=8, text=ICON_ALPHA, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskDefault, text="Normal Icon Saturation (-100 to 100)", gridX=0, gridY=3, xPadding=10)
+               self.iconSat = createEntry(self.tableTaskDefault, maxSize=6, width=8, text=ICON_SAT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskDefault, text="Normal Icon Brightness (-100 to 100)", gridX=0, gridY=4, xPadding=10)
+               self.iconBri = createEntry(self.tableTaskDefault, maxSize=6, width=8, text=ICON_BRI, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_icon_asb", (self.iconHue, self.iconSat, self.iconBri))
+               
+               createLabel(self.tableTaskDefault, text="Normal Font Color", gridX=0, gridY=5, xPadding=10)
+               self.fontCol = createEntry(self.tableTaskDefault, maxSize=7, width=9, text="", gridX=1, gridY=5, xExpand=True, yExpand=False, handler=None, name="fontCol")
+               self.fontCol.connect("activate", self.colorTyped)
+               self.fontColButton = createColorButton(self.tableTaskDefault, color=self.defaults["fgColor"], useAlpha=True, name="fontCol", gridX=2, gridY=5, handler=self.colorChange)
+               self.fontCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.fontCol.connect("changed", self.changeOccurred)
+               self.registerComponent("task_font_color", (self.fontCol, self.fontColButton))
+               
+       def createActiveTasksWidgets(self):
+               """Create the Active Tasks widgets."""
+               self.tableTaskActive = gtk.Table(rows=6, columns=3, homogeneous=False)
+               self.tableTaskActive.set_row_spacings(5)
+               self.tableTaskActive.set_col_spacings(5)
+               
+               createLabel(self.tableTaskActive, text="Active Task Background ID", gridX=0, gridY=0, xPadding=10)
+               self.taskActiveBg = createComboBox(self.tableTaskActive, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("task_active_background_id", self.taskActiveBg)
+               
+               createLabel(self.tableTaskActive, text="Note: Default values of 0 for each of these settings leaves icons unchanged!", gridX=0, gridY=1, sizeX=3, xPadding=10)
+               
+               createLabel(self.tableTaskActive, text="Active Icon Alpha (0 to 100)", gridX=0, gridY=2, xPadding=10)
+               self.activeIconHue = createEntry(self.tableTaskActive, maxSize=6, width=8, text=ACTIVE_ICON_ALPHA, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskActive, text="Active Icon Saturation (-100 to 100)", gridX=0, gridY=3, xPadding=10)
+               self.activeIconSat = createEntry(self.tableTaskActive, maxSize=6, width=8, text=ACTIVE_ICON_SAT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskActive, text="Active Icon Brightness (-100 to 100)", gridX=0, gridY=4, xPadding=10)
+               self.activeIconBri = createEntry(self.tableTaskActive, maxSize=6, width=8, text=ACTIVE_ICON_BRI, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_active_icon_asb", (self.activeIconHue, self.activeIconSat, self.activeIconBri))
+               
+               createLabel(self.tableTaskActive, text="Active Font Color", gridX=0, gridY=5, xPadding=10)
+               self.fontActiveCol = createEntry(self.tableTaskActive, maxSize=7, width=9, text="", gridX=1, gridY=5, xExpand=True, yExpand=False, handler=None, name="fontActiveCol")
+               self.fontActiveCol.connect("activate", self.colorTyped)
+               self.fontActiveColButton = createColorButton(self.tableTaskActive, color=self.defaults["fgColor"], useAlpha=True, name="fontActiveCol", gridX=2, gridY=5, handler=self.colorChange)
+               self.fontActiveCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.fontActiveCol.connect("changed", self.changeOccurred)
+               self.registerComponent("task_active_font_color", (self.fontActiveCol, self.fontActiveColButton))
+               
+       def createUrgentTasksWidgets(self):
+               """Create the Urgent Tasks widgets."""
+               self.tableTaskUrgent = gtk.Table(rows=6, columns=3, homogeneous=False)
+               self.tableTaskUrgent.set_row_spacings(5)
+               self.tableTaskUrgent.set_col_spacings(5)
+               
+               createLabel(self.tableTaskUrgent, text="Urgent Task Background ID", gridX=0, gridY=0, xPadding=10)
+               self.taskUrgentBg = createComboBox(self.tableTaskUrgent, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("task_urgent_background_id", self.taskUrgentBg)
+               
+               createLabel(self.tableTaskUrgent, text="Note: Default values of 0 for each of these settings leaves icons unchanged!", gridX=0, gridY=1, sizeX=3, xPadding=10)
+               
+               createLabel(self.tableTaskUrgent, text="Urgent Icon Alpha (0 to 100)", gridX=0, gridY=2, xPadding=10)
+               self.urgentIconHue = createEntry(self.tableTaskUrgent, maxSize=6, width=8, text=URGENT_ICON_ALPHA, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskUrgent, text="Urgent Icon Saturation (-100 to 100)", gridX=0, gridY=3, xPadding=10)
+               self.urgentIconSat = createEntry(self.tableTaskUrgent, maxSize=6, width=8, text=URGENT_ICON_SAT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskUrgent, text="Urgent Icon Brightness (-100 to 100)", gridX=0, gridY=4, xPadding=10)
+               self.urgentIconBri = createEntry(self.tableTaskUrgent, maxSize=6, width=8, text=URGENT_ICON_BRI, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_urgent_icon_asb", (self.urgentIconHue, self.urgentIconSat, self.urgentIconBri))
+               
+               createLabel(self.tableTaskUrgent, text="Urgent Font Color", gridX=0, gridY=5, xPadding=10)
+               self.fontUrgentCol = createEntry(self.tableTaskUrgent, maxSize=7, width=9, text="", gridX=1, gridY=5, xExpand=True, yExpand=False, handler=None, name="fontUrgentCol")
+               self.fontUrgentCol.connect("activate", self.colorTyped)
+               self.fontUrgentColButton = createColorButton(self.tableTaskUrgent, color=self.defaults["fgColor"], useAlpha=True, name="fontUrgentCol", gridX=2, gridY=5, handler=self.colorChange)
+               self.fontUrgentCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.fontUrgentCol.connect("changed", self.changeOccurred)
+               self.registerComponent("task_urgent_font_color", (self.fontUrgentCol, self.fontUrgentColButton))
+               
+       def createIconifiedTasksWidgets(self):
+               """Create the Iconified Tasks widgets."""
+               self.tableTaskIconified = gtk.Table(rows=6, columns=3, homogeneous=False)
+               self.tableTaskIconified.set_row_spacings(5)
+               self.tableTaskIconified.set_col_spacings(5)
+               
+               createLabel(self.tableTaskIconified, text="Iconified Task Background ID", gridX=0, gridY=0, xPadding=10)
+               self.taskIconifiedBg = createComboBox(self.tableTaskIconified, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("task_iconified_background_id", self.taskIconifiedBg)
+               
+               createLabel(self.tableTaskIconified, text="Note: Default values of 0 for each of these settings leaves icons unchanged!", gridX=0, gridY=1, sizeX=3, xPadding=10)
+               
+               createLabel(self.tableTaskIconified, text="Iconified Icon Alpha (0 to 100)", gridX=0, gridY=2, xPadding=10)
+               self.iconifiedIconHue = createEntry(self.tableTaskIconified, maxSize=6, width=8, text=ICONIFIED_ICON_ALPHA, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskIconified, text="Iconified Icon Saturation (-100 to 100)", gridX=0, gridY=3, xPadding=10)
+               self.iconifiedIconSat = createEntry(self.tableTaskIconified, maxSize=6, width=8, text=ICONIFIED_ICON_SAT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTaskIconified, text="Iconified Icon Brightness (-100 to 100)", gridX=0, gridY=4, xPadding=10)
+               self.iconifiedIconBri = createEntry(self.tableTaskIconified, maxSize=6, width=8, text=ICONIFIED_ICON_BRI, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("task_iconified_icon_asb", (self.iconifiedIconHue, self.iconifiedIconSat, self.iconifiedIconBri))
+               
+               createLabel(self.tableTaskIconified, text="Iconified Font Color", gridX=0, gridY=5, xPadding=10)
+               self.fontIconifiedCol = createEntry(self.tableTaskIconified, maxSize=7, width=9, text="", gridX=1, gridY=5, xExpand=True, yExpand=False, handler=None, name="fontIconifiedCol")
+               self.fontIconifiedCol.connect("activate", self.colorTyped)
+               self.fontIconifiedColButton = createColorButton(self.tableTaskIconified, color=self.defaults["fgColor"], useAlpha=True, name="fontIconifiedCol", gridX=2, gridY=5, handler=self.colorChange)
+               self.fontIconifiedCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.fontIconifiedCol.connect("changed", self.changeOccurred)
+               self.registerComponent("task_iconified_font_color", (self.fontIconifiedCol, self.fontIconifiedColButton))
+       
+       def createSystemTrayWidgets(self):
+               """Create the System Tray widgets."""
+               self.tableTray = gtk.Table(rows=9, columns=3, homogeneous=False)
+               self.tableTray.set_row_spacings(5)
+               self.tableTray.set_col_spacings(5)
+                               
+               createLabel(self.tableTray, text="Padding (x, y)", gridX=0, gridY=1, xPadding=10)
+               self.trayPadX = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_PADDING_X, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.trayPadY = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_PADDING_Y, gridX=2, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTray, text="Horizontal Spacing", gridX=0, gridY=2, xPadding=10)
+               self.traySpacing = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_SPACING, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("systray_padding", (self.trayPadX, self.trayPadY, self.traySpacing))
+               
+               createLabel(self.tableTray, text="System Tray Background ID", gridX=0, gridY=3, xPadding=10)
+               self.trayBg = createComboBox(self.tableTray, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=3, handler=self.changeOccurred)
+               self.registerComponent("systray_background_id", self.trayBg)
+               
+               createLabel(self.tableTray, text="Icon Ordering", gridX=0, gridY=4, xPadding=10)
+               self.trayOrder = createComboBox(self.tableTray, ["ascending", "descending", "left2right", "right2left"], gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("systray_sort", self.trayOrder)
+               
+               createLabel(self.tableTray, text="Maximum Icon Size (0 for automatic size)", gridX=0, gridY=5, xPadding=10)
+               self.trayMaxIconSize = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_MAX_ICON_SIZE, gridX=1, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("systray_icon_size", self.trayMaxIconSize)
+               
+               createLabel(self.tableTray, text="System Tray Icon Alpha (0 to 100)", gridX=0, gridY=6, xPadding=10)
+               self.trayIconHue = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_ICON_ALPHA, gridX=1, gridY=6, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTray, text="System Tray Icon Saturation (-100 to 100)", gridX=0, gridY=7, xPadding=10)
+               self.trayIconSat = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_ICON_SAT, gridX=1, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               # Note: added below
+               
+               createLabel(self.tableTray, text="System Tray Icon Brightness (-100 to 100)", gridX=0, gridY=8, xPadding=10)
+               self.trayIconBri = createEntry(self.tableTray, maxSize=6, width=8, text=TRAY_ICON_BRI, gridX=1, gridY=8, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("systray_icon_asb", (self.trayIconHue, self.trayIconSat, self.trayIconBri))
+               
+       def createClockDisplayWidgets(self):
+               """Create the Clock Display widgets."""
+               self.tableClockDisplays = gtk.Table(rows=3, columns=3, homogeneous=False)
+               self.tableClockDisplays.set_row_spacings(5)
+               self.tableClockDisplays.set_col_spacings(5)
+               
+               createLabel(self.tableClockDisplays, text="Time 1 Format", gridX=0, gridY=1, xPadding=10)
+               self.clock1Format = createEntry(self.tableClockDisplays, maxSize=50, width=20, text=CLOCK_FMT_1, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("time1_format", self.clock1Format)
+               
+               createLabel(self.tableClockDisplays, text="Time 1 Font", gridX=0, gridY=2, xPadding=10)
+               self.clock1FontButton = createFontButton(self.tableClockDisplays, font=self.defaults["font"], gridX=1, gridY=2, handler=self.changeOccurred)
+               self.registerComponent("time1_font", self.clock1FontButton)
+               
+               createLabel(self.tableClockDisplays, text="Time 2 Format", gridX=0, gridY=3, xPadding=10)
+               self.clock2Format = createEntry(self.tableClockDisplays, maxSize=50, width=20, text=CLOCK_FMT_2, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("time2_format", self.clock2Format)
+               
+               createLabel(self.tableClockDisplays, text="Time 2 Font", gridX=0, gridY=4, xPadding=10)
+               self.clock2FontButton = createFontButton(self.tableClockDisplays, font=self.defaults["font"], gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("time2_font", self.clock2FontButton)
+               
+               createLabel(self.tableClockDisplays, text="Tooltip Format", gridX=0, gridY=5, xPadding=10)
+               self.clockTooltipFormat = createEntry(self.tableClockDisplays, maxSize=50, width=20, text=CLOCK_TOOLTIP, gridX=1, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("clock_tooltip", self.clockTooltipFormat)
+               
+               self.clockArea = gtk.ScrolledWindow()
+               self.clockBuf = gtk.TextBuffer()
+               self.clockTextView = gtk.TextView(self.clockBuf)
+               self.clockBuf.insert_at_cursor("%H 00-23 (24-hour)    %I 01-12 (12-hour)    %l 1-12 (12-hour)    %M 00-59 (minutes)\n%S 00-59 (seconds)    %P am/pm    %b Jan-Dec    %B January-December\n%a Sun-Sat    %A Sunday-Saturday    %d 01-31 (day)    %e 1-31 (day)\n%y 2 digit year, e.g. 09    %Y 4 digit year, e.g. 2009")
+               self.clockTextView.set_editable(False)
+               self.clockArea.add_with_viewport(self.clockTextView)
+               self.tableClockDisplays.attach(self.clockArea, 0, 3, 6, 7, xpadding=10)
+               
+       def createClockSettingsWidgets(self):
+               """Create the Clock Settings widgets."""
+               self.tableClockSettings = gtk.Table(rows=3, columns=3, homogeneous=False)
+               self.tableClockSettings.set_row_spacings(5)
+               self.tableClockSettings.set_col_spacings(5)
+               
+               createLabel(self.tableClockSettings, text="Clock Font Color", gridX=0, gridY=0, xPadding=10)
+               self.clockFontCol = createEntry(self.tableClockSettings, maxSize=7, width=9, text="", gridX=1, gridY=0, xExpand=True, yExpand=False, handler=None, name="clockFontCol")
+               self.clockFontCol.connect("activate", self.colorTyped)
+               self.clockFontColButton = createColorButton(self.tableClockSettings, color=self.defaults["fgColor"], useAlpha=True, name="clockFontCol", gridX=2, gridY=0, handler=self.colorChange)
+               self.clockFontCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.clockFontCol.connect("changed", self.changeOccurred)
+               self.registerComponent("clock_font_color", (self.clockFontCol, self.clockFontColButton))
+               
+               createLabel(self.tableClockSettings, text="Padding (x, y)", gridX=0, gridY=1, xPadding=10)
+               self.clockPadX = createEntry(self.tableClockSettings, maxSize=6, width=8, text=CLOCK_PADDING_X, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.clockPadY = createEntry(self.tableClockSettings, maxSize=6, width=8, text=CLOCK_PADDING_Y, gridX=2, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("clock_padding", (self.clockPadX, self.clockPadY))
+               
+               createLabel(self.tableClockSettings, text="Clock Background ID", gridX=0, gridY=2, xPadding=10)
+               self.clockBg = createComboBox(self.tableClockSettings, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=2, handler=self.changeOccurred)
+               self.registerComponent("clock_background_id", self.clockBg)
+               
+               createLabel(self.tableClockSettings, text="Left Click Command", gridX=0, gridY=3, xPadding=10)
+               self.clockLClick = createEntry(self.tableClockSettings, maxSize=50, width=20, text=CLOCK_LCLICK, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("clock_lclick_command", self.clockLClick)
+               
+               createLabel(self.tableClockSettings, text="Right Click Command", gridX=0, gridY=4, xPadding=10)
+               self.clockRClick = createEntry(self.tableClockSettings, maxSize=50, width=20, text=CLOCK_RCLICK, gridX=1, gridY=4, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("clock_rclick_command", self.clockRClick)
+               
+               createLabel(self.tableClockSettings, text="Time 1 Timezone", gridX=0, gridY=5, xPadding=10)
+               self.clockTime1Timezone = createEntry(self.tableClockSettings, maxSize=50, width=20, text=CLOCK_TIME1_TIMEZONE, gridX=1, gridY=5, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("time1_timezone", self.clockTime1Timezone)
+               
+               createLabel(self.tableClockSettings, text="Time 2 Timezone", gridX=0, gridY=6, xPadding=10)
+               self.clockTime2Timezone = createEntry(self.tableClockSettings, maxSize=50, width=20, text=CLOCK_TIME2_TIMEZONE, gridX=1, gridY=6, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("time2_timezone", self.clockTime2Timezone)
+               
+               createLabel(self.tableClockSettings, text="Tooltip Timezone", gridX=0, gridY=7, xPadding=10)
+               self.clockTooltipTimezone = createEntry(self.tableClockSettings, maxSize=50, width=20, text=CLOCK_TOOLTIP_TIMEZONE, gridX=1, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("clock_tooltip_timezone", self.clockTooltipTimezone)
+               
+       def createMouseWidgets(self):
+               """Creates the Mouse widgets."""
+               self.tableMouse = gtk.Table(rows=4, columns=3, homogeneous=False)
+               self.tableMouse.set_row_spacings(5)
+               self.tableMouse.set_col_spacings(5)
+               
+               mouseCmds = ["none", "close", "toggle", "iconify", "shade", "toggle_iconify", "maximize_restore", "desktop_left", "desktop_right", "next_task", "prev_task"]
+               
+               createLabel(self.tableMouse, text="Middle Mouse Click Action", gridX=0, gridY=0, xPadding=10)
+               self.mouseMiddle = createComboBox(self.tableMouse, mouseCmds, gridX=1, gridY=0, handler=self.changeOccurred)
+               self.registerComponent("mouse_middle", self.mouseMiddle)
+               
+               createLabel(self.tableMouse, text="Right Mouse Click Action", gridX=0, gridY=1, xPadding=10)
+               self.mouseRight = createComboBox(self.tableMouse, mouseCmds, gridX=1, gridY=1, handler=self.changeOccurred)
+               self.registerComponent("mouse_right", self.mouseRight)
+               
+               createLabel(self.tableMouse, text="Mouse Wheel Scroll Up Action", gridX=0, gridY=2, xPadding=10)
+               self.mouseUp = createComboBox(self.tableMouse, mouseCmds, gridX=1, gridY=2, handler=self.changeOccurred)
+               self.registerComponent("mouse_scroll_up", self.mouseUp)
+               
+               createLabel(self.tableMouse, text="Mouse Wheel Scroll Down Action", gridX=0, gridY=3, xPadding=10)
+               self.mouseDown = createComboBox(self.tableMouse, mouseCmds, gridX=1, gridY=3, handler=self.changeOccurred)
+               self.registerComponent("mouse_scroll_down", self.mouseDown)
+       
+       def createTooltipsWidgets(self):
+               """Creates the Tooltips widgets."""
+               self.tableTooltip = gtk.Table(rows=7, columns=3, homogeneous=False)
+               self.tableTooltip.set_row_spacings(5)
+               self.tableTooltip.set_col_spacings(5)
+               
+               createLabel(self.tableTooltip, text="Show Tooltips", gridX=0, gridY=0, xPadding=10)
+               self.tooltipShow = createCheckButton(self.tableTooltip, active=False, gridX=1, gridY=0, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("tooltip", self.tooltipShow)
+               
+               createLabel(self.tableTooltip, text="Padding (x, y)", gridX=0, gridY=1, xPadding=10)
+               self.tooltipPadX = createEntry(self.tableTooltip, maxSize=6, width=8, text=TOOLTIP_PADDING_X, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.tooltipPadY = createEntry(self.tableTooltip, maxSize=6, width=8, text=TOOLTIP_PADDING_Y, gridX=2, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("tooltip_padding", (self.tooltipPadX, self.tooltipPadY))
+               
+               createLabel(self.tableTooltip, text="Tooltip Show Timeout (seconds)", gridX=0, gridY=2, xPadding=10)
+               self.tooltipShowTime = createEntry(self.tableTooltip, maxSize=6, width=8, text=TOOLTIP_SHOW_TIMEOUT, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("tooltip_show_timeout", self.tooltipShowTime)
+               
+               createLabel(self.tableTooltip, text="Tooltip Hide Timeout (seconds)", gridX=0, gridY=3, xPadding=10)
+               self.tooltipHideTime = createEntry(self.tableTooltip, maxSize=6, width=8, text=TOOLTIP_HIDE_TIMEOUT, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("tooltip_hide_timeout", self.tooltipHideTime)
+               
+               createLabel(self.tableTooltip, text="Tooltip Background ID", gridX=0, gridY=4, xPadding=10)
+               self.tooltipBg = createComboBox(self.tableTooltip, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("tooltip_background_id", self.tooltipBg)
+               
+               createLabel(self.tableTooltip, text="Tooltip Font", gridX=0, gridY=5, xPadding=10)
+               self.tooltipFont = createFontButton(self.tableTooltip, font=self.defaults["font"], gridX=1, gridY=5, handler=self.changeOccurred)
+               self.registerComponent("tooltip_font", self.tooltipFont)
+               
+               createLabel(self.tableTooltip, text="Tooltip Font Color", gridX=0, gridY=6, xPadding=10)
+               self.tooltipFontCol = createEntry(self.tableTooltip, maxSize=7, width=9, text="", gridX=1, gridY=6, xExpand=True, yExpand=False, handler=None, name="tooltipFontCol")
+               self.tooltipFontCol.connect("activate", self.colorTyped)
+               self.tooltipFontColButton = createColorButton(self.tableTooltip, color=self.defaults["fgColor"], useAlpha=True, name="tooltipFontCol", gridX=2, gridY=6, handler=self.colorChange)
+               self.tooltipFontCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.tooltipFontCol.connect("changed", self.changeOccurred)
+               self.registerComponent("tooltip_font_color", (self.tooltipFontCol, self.tooltipFontColButton))
+       
+       def createBatteryWidgets(self):
+               """Creates the Battery widgets."""
+               self.tableBattery = gtk.Table(rows=8, columns=3, homogeneous=False)
+               self.tableBattery.set_row_spacings(5)
+               self.tableBattery.set_col_spacings(5)
+                               
+               createLabel(self.tableBattery, text="Battery Low Status (%)", gridX=0, gridY=1, xPadding=10)
+               self.batteryLow = createEntry(self.tableBattery, maxSize=6, width=8, text=BATTERY_LOW, gridX=1, gridY=1, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("battery_low_status", self.batteryLow)
+               
+               createLabel(self.tableBattery, text="Battery Low Action", gridX=0, gridY=2, xPadding=10)
+               self.batteryLowAction = createEntry(self.tableBattery, maxSize=150, width=32, text=BATTERY_ACTION, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("battery_low_cmd", self.batteryLowAction)
+               
+               createLabel(self.tableBattery, text="Battery Hide (0 to 100)", gridX=0, gridY=3, xPadding=10)
+               self.batteryHide = createEntry(self.tableBattery, maxSize=6, width=8, text=BATTERY_HIDE, gridX=1, gridY=3, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("battery_hide", self.batteryHide)
+               
+               createLabel(self.tableBattery, text="Battery 1 Font", gridX=0, gridY=4, xPadding=10)
+               self.bat1FontButton = createFontButton(self.tableBattery, font=self.defaults["font"], gridX=1, gridY=4, handler=self.changeOccurred)
+               self.registerComponent("bat1_font", self.bat1FontButton)
+               
+               createLabel(self.tableBattery, text="Battery 2 Font", gridX=0, gridY=5, xPadding=10)
+               self.bat2FontButton = createFontButton(self.tableBattery, font=self.defaults["font"], gridX=1, gridY=5, handler=self.changeOccurred)
+               self.registerComponent("bat2_font", self.bat2FontButton)
+               
+               createLabel(self.tableBattery, text="Battery Font Color", gridX=0, gridY=6, xPadding=10)
+               self.batteryFontCol = createEntry(self.tableBattery, maxSize=7, width=9, text="", gridX=1, gridY=6, xExpand=True, yExpand=False, handler=None, name="batteryFontCol")
+               self.batteryFontCol.connect("activate", self.colorTyped)
+               self.batteryFontColButton = createColorButton(self.tableBattery, color=self.defaults["fgColor"], useAlpha=True, name="batteryFontCol", gridX=2, gridY=6, handler=self.colorChange)
+               self.batteryFontCol.set_text(self.defaults["fgColor"])
+               # Add this AFTER we set color to avoid "changed" event
+               self.batteryFontCol.connect("changed", self.changeOccurred)
+               self.registerComponent("battery_font_color", (self.batteryFontCol, self.batteryFontColButton))
+               
+               createLabel(self.tableBattery, text="Padding (x, y)", gridX=0, gridY=7, xPadding=10)
+               self.batteryPadX = createEntry(self.tableBattery, maxSize=6, width=8, text=BATTERY_PADDING_X, gridX=1, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.batteryPadY = createEntry(self.tableBattery, maxSize=6, width=8, text=BATTERY_PADDING_Y, gridX=2, gridY=7, xExpand=True, yExpand=False, handler=self.changeOccurred)
+               self.registerComponent("battery_padding", (self.batteryPadX, self.batteryPadY))
+               
+               createLabel(self.tableBattery, text="Battery Background ID", gridX=0, gridY=8, xPadding=10)
+               self.batteryBg = createComboBox(self.tableBattery, ["0 (fully transparent)"] + range(1, len(self.bgs)), gridX=1, gridY=8, handler=self.changeOccurred)
+               self.registerComponent("battery_background_id", self.batteryBg)
+               
+       def registerComponent(self, configProperty, component):
+               """Registers a component with a particular property from
+               a tint2 config. Note: a component may be a double or
+               triple if that property has more than one value associated
+               with it."""
+               self.propUI[configProperty] = component
+       
+       def getComponent(self, configProperty):
+               """Fetches the component associated with a tint2 property."""
+               return self.propUI[configProperty] if configProperty in self.propUI else None
+       
        def about(self, action=None):
                """Displays the About dialog."""
                about = gtk.AboutDialog()
@@ -1348,20 +995,11 @@ class TintWizardGUI(gtk.Window):
        def addBg(self):
                """Adds a new background to the list of backgrounds."""
                self.bgs += [gtk.Table(4, 3, False)]
-
-               temp = gtk.Label("Corner Rounding (px)")
-               temp.set_alignment(0, 0.5)
-               self.bgs[-1].attach(temp, 0, 1, 0, 1, xpadding=10)
-               temp = gtk.Entry(7)
-               temp.set_width_chars(9)
-               temp.set_name("rounded")
-               temp.set_text(BG_ROUNDING)
-               temp.connect("changed", self.changeOccurred)
-               self.bgs[-1].attach(temp, 1, 2, 0, 1, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Background Color")
-               temp.set_alignment(0, 0.5)
-               self.bgs[-1].attach(temp, 0, 1, 1, 2, xpadding=10)
+               
+               createLabel(self.bgs[-1], text="Corner Rounding (px)", gridX=0, gridY=0, xPadding=10)
+               createEntry(self.bgs[-1], maxSize=7, width=9, text=BG_ROUNDING, gridX=1, gridY=0, xExpand=True, yExpand=False, handler=self.changeOccurred, name="rounded")
+               
+               createLabel(self.bgs[-1], text="Background Color", gridX=0, gridY=1, xPadding=10)
                temp = gtk.Entry(7)
                temp.set_width_chars(9)
                temp.set_name("bgColEntry")
@@ -1374,20 +1012,11 @@ class TintWizardGUI(gtk.Window):
                temp.set_name("bgCol")
                temp.connect("color-set", self.colorChange)
                self.bgs[-1].attach(temp, 2, 3, 1, 2, xoptions=gtk.EXPAND, yoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Border Width (px)")
-               temp.set_alignment(0, 0.5)
-               self.bgs[-1].attach(temp, 0, 1, 2, 3, xpadding=10)
-               temp = gtk.Entry(7)
-               temp.set_width_chars(9)
-               temp.set_name("border")
-               temp.set_text(BG_BORDER)
-               temp.connect("changed", self.changeOccurred)
-               self.bgs[-1].attach(temp, 1, 2, 2, 3, xoptions=gtk.EXPAND)
-
-               temp = gtk.Label("Border Color")
-               temp.set_alignment(0, 0.5)
-               self.bgs[-1].attach(temp, 0, 1, 3, 4, xpadding=10)
+               
+               createLabel(self.bgs[-1], text="Border Width (px)", gridX=0, gridY=2, xPadding=10)
+               createEntry(self.bgs[-1], maxSize=7, width=9, text=BG_BORDER, gridX=1, gridY=2, xExpand=True, yExpand=False, handler=self.changeOccurred, name="border")
+               
+               createLabel(self.bgs[-1], text="Border Color", gridX=0, gridY=3, xPadding=10)
                temp = gtk.Entry(7)
                temp.set_width_chars(9)
                temp.set_name("borderColEntry")
@@ -1425,11 +1054,52 @@ class TintWizardGUI(gtk.Window):
 
                if not init:
                        self.changeOccurred()
+       
+       def addBgDefs(self, bgDefs):
+               """Add interface elements for a list of background style definitions. bgDefs
+               should be a list containing dictionaries with the following keys: rounded,
+               border_width, background_color, border_color"""
+               for d in bgDefs:
+                       self.addBg()
+
+                       for child in self.bgs[-1].get_children():
+                               if child.get_name() == "rounded":
+                                       child.set_text(d["rounded"])
+                               elif child.get_name() == "border":
+                                       child.set_text(d["border_width"])
+                               elif child.get_name() == "bgColEntry":
+                                       child.set_text(d["background_color"].split(" ")[0].strip())
+                                       child.activate()
+                               elif child.get_name() == "borderColEntry":
+                                       child.set_text(d["border_color"].split(" ")[0].strip())
+                                       child.activate()
+                               elif child.get_name() == "bgCol":
+                                       list = d["background_color"].split(" ")
+                                       if len(list) > 1:
+                                               child.set_alpha(int(int(list[1].strip()) * 65535 / 100.0))
+                                       else:
+                                               child.set_alpha(65535)
+                               elif child.get_name() == "borderCol":
+                                       list = d["border_color"].split(" ")
+                                       if len(list) > 1:
+                                               child.set_alpha(int(int(list[1].strip()) * 65535 / 100.0))
+                                       else:
+                                               child.set_alpha(65535)
+
+                       newId = len(self.bgs)
+
+                       self.bgNotebook.append_page(self.bgs[newId-1], gtk.Label("Background ID %d" % (newId)))
+
+                       self.bgNotebook.show_all()
+
+                       self.updateComboBoxes(newId-1, "add")
 
+                       self.bgNotebook.set_current_page(newId)
+       
        def apply(self, widget, event=None, confirmChange=True):
                """Applies the current config to tint2."""
                # Check if tint2 is running
-               procs = os.popen('pidof "tint2"')                               # Check list of active processes for tint2
+               procs = os.popen('pgrep -x "tint2"')                    # Check list of active processes for tint2
                pids = []                                                                               # List of process ids for tint2
 
                for proc in procs.readlines():
@@ -1461,7 +1131,7 @@ class TintWizardGUI(gtk.Window):
                                        os.kill(pid, signal.SIGTERM)
 
                                # Lastly, start it
-                               os.spawnv(os.P_NOWAIT, self.tint2Bin, [self.tint2Bin, "-c" + self.filename])
+                               os.spawnv(os.P_NOWAIT, self.tint2Bin, [self.tint2Bin, "-c", self.filename])
 
                                if confirmChange and self.filename != (os.path.expandvars("${HOME}") + "/.config/tint2/tint2rc") and confirmDialog(self, "Use this as default tint2 config?") == gtk.RESPONSE_YES:
                                        tmp = self.filename
@@ -1544,16 +1214,14 @@ class TintWizardGUI(gtk.Window):
                buttonHex = self.getHexFromWidget(colorButton)
 
                if len(s) != 7:
-                       errorDialog(self, "Invalid color specification!")
-                       #self.colorChange(widget) TODO - remove this when issue 29 is verified
+                       errorDialog(self, "Invalid color specification: [%s]" % s)
                        widget.set_text(buttonHex)
                        return
 
                try:
                        col = gtk.gdk.Color(s)
                except:
-                       errorDialog(self, "Invalid color specification!")
-                       #self.colorChange(widget) TODO - remove this when issue 29 is verified
+                       errorDialog(self, "Invalid color specification: [%s]" % s)
                        widget.set_text(buttonHex)
                        return
 
@@ -1627,17 +1295,22 @@ class TintWizardGUI(gtk.Window):
                                                                                                                        self.panelSpacing.get_text() if self.panelSpacing.get_text() else TASKBAR_SPACING))
                self.configBuf.insert(self.configBuf.get_end_iter(), "panel_dock = %s\n" % int(self.panelDock.get_active()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "wm_menu = %s\n" % int(self.panelMenu.get_active()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "panel_layer = %s\n" % (self.panelLayer.get_active_text()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "panel_background_id = %s\n" % (self.panelBg.get_active()))
-
+               
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Panel Autohide\n")
+               self.configBuf.insert(self.configBuf.get_end_iter(), "autohide = %s\n" % int(self.panelAutohide.get_active()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "autohide_show_timeout = %s\n" % (self.panelAutohideShow.get_text() if self.panelAutohideShow.get_text() else PANEL_AUTOHIDE_SHOW))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "autohide_hide_timeout = %s\n" % (self.panelAutohideHide.get_text() if self.panelAutohideHide.get_text() else PANEL_AUTOHIDE_HIDE))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "autohide_height = %s\n" % (self.panelAutohideHeight.get_text() if self.panelAutohideHeight.get_text() else PANEL_AUTOHIDE_HEIGHT))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "strut_policy = %s\n" % (self.panelAutohideStrut.get_active_text() if self.panelAutohideStrut.get_active_text() else PANEL_AUTOHIDE_STRUT))
+               
                self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Taskbar\n")
                self.configBuf.insert(self.configBuf.get_end_iter(), "taskbar_mode = %s\n" % (self.taskbarMode.get_active_text()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "taskbar_padding = %s %s %s\n" % (self.taskbarPadX.get_text() if self.taskbarPadX.get_text() else TASKBAR_PADDING_X,
                                                                                                                        self.taskbarPadY.get_text() if self.taskbarPadY.get_text() else TASKBAR_PADDING_X,
                                                                                                                        self.taskbarSpacing.get_text() if self.taskbarSpacing.get_text() else TASK_SPACING))
                self.configBuf.insert(self.configBuf.get_end_iter(), "taskbar_background_id = %s\n" % (self.taskbarBg.get_active()))
-               # Comment out the taskbar_active_background_id if user has "disabled" it
-               if self.taskbarActiveBgEnable.get_active() == 0:
-                       self.configBuf.insert(self.configBuf.get_end_iter(), "#")
                self.configBuf.insert(self.configBuf.get_end_iter(), "taskbar_active_background_id = %s\n" % (self.taskbarActiveBg.get_active()))
 
                self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Tasks\n")
@@ -1650,47 +1323,68 @@ class TintWizardGUI(gtk.Window):
                                                                                                                        self.taskPadY.get_text() if self.taskPadY.get_text() else TASK_PADDING_Y))
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_background_id = %s\n" % (self.taskBg.get_active()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_active_background_id = %s\n" % (self.taskActiveBg.get_active()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_urgent_background_id = %s\n" % (self.taskUrgentBg.get_active()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_iconified_background_id = %s\n" % (self.taskIconifiedBg.get_active()))
+               
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Task Icons\n")
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_icon_asb = %s %s %s\n" % (self.iconHue.get_text() if self.iconHue.get_text() else ICON_ALPHA,
                                                                                                                        self.iconSat.get_text() if self.iconSat.get_text() else ICON_SAT,
                                                                                                                        self.iconBri.get_text() if self.iconBri.get_text() else ICON_BRI))
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_active_icon_asb = %s %s %s\n" % (self.activeIconHue.get_text() if self.activeIconHue.get_text() else ACTIVE_ICON_ALPHA,
                                                                                                                        self.activeIconSat.get_text() if self.activeIconSat.get_text() else ACTIVE_ICON_SAT,
                                                                                                                        self.activeIconBri.get_text() if self.activeIconBri.get_text() else ACTIVE_ICON_BRI))
-
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_urgent_icon_asb = %s %s %s\n" % (self.urgentIconHue.get_text() if self.urgentIconHue.get_text() else URGENT_ICON_ALPHA,
+                                                                                                                       self.urgentIconSat.get_text() if self.urgentIconSat.get_text() else URGENT_ICON_SAT,
+                                                                                                                       self.urgentIconBri.get_text() if self.urgentIconBri.get_text() else URGENT_ICON_BRI))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_iconified_icon_asb = %s %s %s\n" % (self.iconifiedIconHue.get_text() if self.iconifiedIconHue.get_text() else ICONIFIED_ICON_ALPHA,
+                                                                                                                       self.iconifiedIconSat.get_text() if self.iconifiedIconSat.get_text() else ICONIFIED_ICON_SAT,
+                                                                                                                       self.iconifiedIconBri.get_text() if self.iconifiedIconBri.get_text() else ICONIFIED_ICON_BRI))
+                                                                                                                       
                self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Fonts\n")
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_font = %s\n" % (self.fontButton.get_font_name()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_font_color = %s %s\n" % (self.getHexFromWidget(self.fontColButton),
                                                                                                                        int(self.fontColButton.get_alpha() / 65535.0 * 100)))
                self.configBuf.insert(self.configBuf.get_end_iter(), "task_active_font_color = %s %s\n" % (self.getHexFromWidget(self.fontActiveColButton),
                                                                                                                        int(self.fontActiveColButton.get_alpha() / 65535.0 * 100)))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_urgent_font_color = %s %s\n" % (self.getHexFromWidget(self.fontUrgentColButton),
+                                                                                                                       int(self.fontUrgentColButton.get_alpha() / 65535.0 * 100)))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "task_iconified_font_color = %s %s\n" % (self.getHexFromWidget(self.fontIconifiedColButton),
+                                                                                                                       int(self.fontIconifiedColButton.get_alpha() / 65535.0 * 100)))
                self.configBuf.insert(self.configBuf.get_end_iter(), "font_shadow = %s\n" % int(self.fontShadowCheckButton.get_active()))
 
-               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Systray\n")
-               self.configBuf.insert(self.configBuf.get_end_iter(), "systray = %s\n" % int(self.trayShow.get_active()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# System Tray\n")
                self.configBuf.insert(self.configBuf.get_end_iter(), "systray_padding = %s %s %s\n" % (self.trayPadX.get_text() if self.trayPadX.get_text() else TRAY_PADDING_X,
                                                                                                                        self.trayPadY.get_text() if self.trayPadY.get_text() else TRAY_PADDING_Y,
                                                                                                                        self.traySpacing.get_text() if self.traySpacing.get_text() else TRAY_SPACING))
                self.configBuf.insert(self.configBuf.get_end_iter(), "systray_sort = %s\n" % (self.trayOrder.get_active_text()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "systray_background_id = %s\n" % (self.trayBg.get_active()))
-
-               if self.clockCheckButton.get_active():
-                       self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Clock\n")
-                       if self.clock1CheckButton.get_active():
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "time1_format = %s\n" % (self.clock1Format.get_text() if self.clock1Format.get_text() else CLOCK_FMT_1))
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "time1_font = %s\n" % (self.clock1FontButton.get_font_name()))
-                       if self.clock2CheckButton.get_active():
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "time2_format = %s\n" % (self.clock2Format.get_text() if self.clock2Format.get_text() else CLOCK_FMT_2))
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "time2_font = %s\n" % (self.clock2FontButton.get_font_name()))
-                       self.configBuf.insert(self.configBuf.get_end_iter(), "clock_font_color = %s %s\n" % (self.getHexFromWidget(self.clockFontColButton),
-                                                                                                                       int(self.clockFontColButton.get_alpha() / 65535.0 * 100)))
-                       self.configBuf.insert(self.configBuf.get_end_iter(), "clock_padding = %s %s\n" % (self.clockPadX.get_text() if self.clockPadX.get_text() else CLOCK_PADDING_X,
-                                                                                                                       self.clockPadY.get_text() if self.clockPadY.get_text() else CLOCK_PADDING_Y))
-                       self.configBuf.insert(self.configBuf.get_end_iter(), "clock_background_id = %s\n" % (self.clockBg.get_active()))
-                       if self.clockLClick.get_text():
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_lclick_command = %s\n" % (self.clockLClick.get_text()))
-                       if self.clockRClick.get_text():
-                               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_rclick_command = %s\n" % (self.clockRClick.get_text()))
-
+               self.configBuf.insert(self.configBuf.get_end_iter(), "systray_icon_size = %s\n" % (self.trayMaxIconSize.get_text() if self.trayMaxIconSize.get_text() else TRAY_MAX_ICON_SIZE))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "systray_icon_asb = %s %s %s\n" % (self.trayIconHue.get_text() if self.trayIconHue.get_text() else TRAY_ICON_ALPHA,
+                                                                                                                       self.trayIconSat.get_text() if self.trayIconSat.get_text() else TRAY_ICON_SAT,
+                                                                                                                       self.trayIconBri.get_text() if self.trayIconBri.get_text() else TRAY_ICON_BRI))
+               
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Clock\n")
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time1_format = %s\n" % (self.clock1Format.get_text() if self.clock1Format.get_text() else CLOCK_FMT_1))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time1_font = %s\n" % (self.clock1FontButton.get_font_name()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time2_format = %s\n" % (self.clock2Format.get_text() if self.clock2Format.get_text() else CLOCK_FMT_2))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time2_font = %s\n" % (self.clock2FontButton.get_font_name()))
+               
+               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_font_color = %s %s\n" % (self.getHexFromWidget(self.clockFontColButton),
+                                                                                                               int(self.clockFontColButton.get_alpha() / 65535.0 * 100)))
+       
+               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_tooltip = %s\n" % (self.clockTooltipFormat.get_text() if self.clockTooltipFormat.get_text() else CLOCK_TOOLTIP))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_padding = %s %s\n" % (self.clockPadX.get_text() if self.clockPadX.get_text() else CLOCK_PADDING_X,
+                                                                                                               self.clockPadY.get_text() if self.clockPadY.get_text() else CLOCK_PADDING_Y))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_background_id = %s\n" % (self.clockBg.get_active()))
+               if self.clockLClick.get_text():
+                       self.configBuf.insert(self.configBuf.get_end_iter(), "clock_lclick_command = %s\n" % (self.clockLClick.get_text()))
+               if self.clockRClick.get_text():
+                       self.configBuf.insert(self.configBuf.get_end_iter(), "clock_rclick_command = %s\n" % (self.clockRClick.get_text()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time1_timezone = %s\n" % (self.clockTime1Timezone.get_text() if self.clockTime1Timezone.get_text() else CLOCK_TIME1_TIMEZONE))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "time2_timezone = %s\n" % (self.clockTime2Timezone.get_text() if self.clockTime2Timezone.get_text() else CLOCK_TIME2_TIMEZONE))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "clock_tooltip_timezone = %s\n" % (self.clockTooltipTimezone.get_text() if self.clockTooltipTimezone.get_text() else CLOCK_TOOLTIP_TIMEZONE))
+                       
+                       
                self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Tooltips\n")
                self.configBuf.insert(self.configBuf.get_end_iter(), "tooltip = %s\n" % int(self.tooltipShow.get_active()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "tooltip_padding = %s %s\n" % (self.tooltipPadX.get_text() if self.tooltipPadX.get_text() else TOOLTIP_PADDING_Y,
@@ -1706,226 +1400,114 @@ class TintWizardGUI(gtk.Window):
                self.configBuf.insert(self.configBuf.get_end_iter(), "mouse_middle = %s\n" % (self.mouseMiddle.get_active_text()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "mouse_right = %s\n" % (self.mouseRight.get_active_text()))
                self.configBuf.insert(self.configBuf.get_end_iter(), "mouse_scroll_up = %s\n" % (self.mouseUp.get_active_text()))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "mouse_scroll_down = %s\n" % (self.mouseDown.get_active_text()))
-
-               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Battery\n")
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery = %s\n" % int(self.batteryCheckButton.get_active()))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_low_status = %s\n" % (self.batteryLow.get_text() if self.batteryLow.get_text() else BATTERY_LOW))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_low_cmd = %s\n" % (self.batteryLowAction.get_text() if self.batteryLowAction.get_text() else BATTERY_ACTION))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "bat1_font = %s\n" % (self.bat1FontButton.get_font_name()))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "bat2_font = %s\n" % (self.bat2FontButton.get_font_name()))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_font_color = %s %s\n" % (self.getHexFromWidget(self.batteryFontColButton),
-                                                                                                                       int(self.batteryFontColButton.get_alpha() / 65535.0 * 100)))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_padding = %s %s\n" % (self.batteryPadX.get_text() if self.batteryPadX.get_text() else BATTERY_PADDING_Y,
-                                                                                                                       self.batteryPadY.get_text() if self.batteryPadY.get_text() else BATTERY_PADDING_Y))
-               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_background_id = %s\n" % (self.batteryBg.get_active()))
-
-               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# End of config")
-
-       def getColorButton(self, widget):
-               """Returns the color button associated with widget."""
-               if widget.get_name() == "fontCol":
-                       return self.fontColButton
-               elif widget.get_name() == "fontActiveCol":
-                       return self.fontActiveColButton
-               elif widget.get_name() == "clockFontCol":
-                       return self.clockFontColButton
-               elif widget.get_name() == "batteryFontCol":
-                       return self.batteryFontColButton
-               elif widget.get_name() == "tooltipFontCol":
-                       return self.tooltipFontColButton
-               elif widget.get_name() == "bgColEntry":
-                       bgID = self.bgNotebook.get_current_page()
-
-                       for child in self.bgs[bgID].get_children():
-                               if child.get_name() == "bgCol":
-
-                                       return child
-               elif widget.get_name() == "borderColEntry":
-                       bgID = self.bgNotebook.get_current_page()
-
-                       for child in self.bgs[bgID].get_children():
-                               if child.get_name() == "borderCol":
-
-                                       return child
-
-               # No button found which matches label
-               return None
-
-       def getColorLabel(self, widget):
-               """Gets the color label associated with a color button."""
-               if widget.get_name() == "fontCol":
-                       return self.fontCol
-               elif widget.get_name() == "fontActiveCol":
-                       return self.fontActiveCol
-               elif widget.get_name() == "clockFontCol":
-                       return self.clockFontCol
-               elif widget.get_name() == "batteryFontCol":
-                       return self.batteryFontCol
-               elif widget.get_name() == "tooltipFontCol":
-                       return self.tooltipFontCol
-               elif widget.get_name() == "bgCol":
-                       bgID = self.bgNotebook.get_current_page()
-
-                       for child in self.bgs[bgID].get_children():
-                               if child.get_name() == "bgColEntry":
-
-                                       return child
-               elif widget.get_name() == "borderCol":
-                       bgID = self.bgNotebook.get_current_page()
-
-                       for child in self.bgs[bgID].get_children():
-                               if child.get_name() == "borderColEntry":
-
-                                       return child
-
-               # No label found which matches color button
-               return None
-
-       def getHexFromWidget(self, widget):
-               """Returns the #RRGGBB value of a widget."""
-               r = widget.get_color().red
-               g = widget.get_color().green
-               b = widget.get_color().blue
-
-               return rgbToHex(r, g, b)
-
-       def help(self, action=None):
-               """Opens the Help wiki page in the default web browser."""
-               try:
-                       webbrowser.open("http://code.google.com/p/tintwizard/wiki/Help")
-               except:
-                       errorDialog(self, "Your default web-browser could not be opened.\nPlease visit http://code.google.com/p/tintwizard/wiki/Help")
-
-       def reportBug(self, action=None):
-               """Opens the bug report page in the default web browser."""
-               try:
-                       webbrowser.open("http://code.google.com/p/tintwizard/issues/entry")
-               except:
-                       errorDialog(self, "Your default web-browser could not be opened.\nPlease visit http://code.google.com/p/tintwizard/issues/entry")
-
-       def main(self):
-               """Enters the main loop."""
-               gtk.main()
-
-       def resetConfig(self):
-               """Resets all the widgets to their default values."""
-               # Backgrounds
-               for i in range(len(self.bgs)):
-                       self.delBgClick(prompt=False, init=True)
-
-               for i in range(self.defaults["bgCount"]):
-                       self.addBgClick(init=True)
-
-               self.bgNotebook.set_current_page(0)
-
-               # Panel
-               self.panelPosY.set_active(0)
-               self.panelPosX.set_active(0)
-               self.panelOrientation.set_active(0)
-               self.panelSizeX.set_text(PANEL_SIZE_X)
-               self.panelSizeY.set_text(PANEL_SIZE_Y)
-               self.panelMarginX.set_text(PANEL_MARGIN_X)
-               self.panelMarginY.set_text(PANEL_MARGIN_Y)
-               self.panelPadX.set_text(PANEL_PADDING_Y)
-               self.panelPadY.set_text(PANEL_PADDING_Y)
-               self.panelSpacing.set_text(TASKBAR_SPACING)
-               self.panelBg.set_active(0)
-               self.panelMenu.set_active(0)
-               self.panelDock.set_active(0)
-               self.panelMonitor.set_text(PANEL_MONITOR)
-               # Taskbar
-               self.taskbarMode.set_active(0)
-               self.taskbarPadX.set_text(TASKBAR_PADDING_X)
-               self.taskbarPadY.set_text(TASKBAR_PADDING_Y)
-               self.taskbarSpacing.set_text(TASK_SPACING)
-               self.taskbarBg.set_active(0)
-               self.taskbarActiveBg.set_active(0)
-               self.taskbarActiveBgEnable.set_active(0)
-               # Tasks
-               self.taskBlinks.set_text(TASK_BLINKS)
-               self.taskCentreCheckButton.set_active(True)
-               self.taskTextCheckButton.set_active(True)
-               self.taskIconCheckButton.set_active(True)
-               self.taskMaxSizeX.set_text(TASK_MAXIMUM_SIZE_X)
-               self.taskMaxSizeY.set_text(TASK_MAXIMUM_SIZE_Y)
-               self.taskPadX.set_text(TASK_PADDING_X)
-               self.taskPadY.set_text(TASK_PADDING_Y)
-               self.taskBg.set_active(0)
-               self.taskActiveBg.set_active(0)
-               # Icons
-               self.iconHue.set_text(ICON_ALPHA)
-               self.iconSat.set_text(ICON_SAT)
-               self.iconBri.set_text(ICON_BRI)
-               self.activeIconHue.set_text(ACTIVE_ICON_ALPHA)
-               self.activeIconSat.set_text(ACTIVE_ICON_SAT)
-               self.activeIconBri.set_text(ACTIVE_ICON_BRI)
-               # Fonts
-               self.fontButton.set_font_name(self.defaults["font"])
-               self.fontColButton.set_alpha(65535)
-               self.fontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.fontCol.set_text(self.defaults["fgColor"])
-               self.fontActiveColButton.set_alpha(65535)
-               self.fontActiveColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.fontActiveCol.set_text(self.defaults["fgColor"])
-               self.fontShadowCheckButton.set_active(False)
-               # Systray
-               self.trayShow.set_active(True)
-               self.trayPadX.set_text(TRAY_PADDING_X)
-               self.trayPadY.set_text(TRAY_PADDING_X)
-               self.traySpacing.set_text(TRAY_SPACING)
-               self.trayOrder.set_active(0)
-               self.trayBg.set_active(0)
-               # Clock
-               self.clockCheckButton.set_active(True)
-               self.clock1Format.set_text(CLOCK_FMT_1)
-               self.clock1CheckButton.set_active(True)
-               self.clock1FontButton.set_font_name(self.defaults["font"])
-               self.clock2Format.set_text(CLOCK_FMT_2)
-               self.clock2CheckButton.set_active(True)
-               self.clock2FontButton.set_font_name(self.defaults["font"])
-               self.clockFontColButton.set_alpha(65535)
-               self.clockFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.clockFontCol.set_text(self.defaults["fgColor"])
-               self.clockPadX.set_text(CLOCK_PADDING_X)
-               self.clockPadY.set_text(CLOCK_PADDING_Y)
-               self.clockBg.set_active(0)
-               self.clockLClick.set_text(CLOCK_LCLICK)
-               self.clockRClick.set_text(CLOCK_RCLICK)
-               # Tooltips
-               self.tooltipShow.set_active(False)
-               self.tooltipPadX.set_text(TOOLTIP_PADDING_X)
-               self.tooltipPadY.set_text(TOOLTIP_PADDING_Y)
-               self.tooltipShowTime.set_text(TOOLTIP_SHOW_TIMEOUT)
-               self.tooltipHideTime.set_text(TOOLTIP_HIDE_TIMEOUT)
-               self.tooltipBg.set_active(0)
-               self.tooltipFont.set_font_name(self.defaults["font"])
-               self.tooltipFontColButton.set_alpha(65535)
-               self.tooltipFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.tooltipFontCol.set_text(self.defaults["fgColor"])
-               # Mouse
-               self.mouseMiddle.set_active(0)
-               self.mouseRight.set_active(0)
-               self.mouseUp.set_active(0)
-               self.mouseDown.set_active(0)
-               # Battery
-               self.batteryCheckButton.set_active(False)
-               self.batteryLow.set_text(BATTERY_LOW)
-               self.batteryLowAction.set_text(BATTERY_ACTION)
-               self.bat1FontButton.set_font_name(self.defaults["font"])
-               self.bat2FontButton.set_font_name(self.defaults["font"])
-               self.batteryFontColButton.set_alpha(65535)
-               self.batteryFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
-               self.batteryFontCol.set_text(self.defaults["fgColor"])
-               self.batteryPadX.set_text(BATTERY_PADDING_Y)
-               self.batteryPadY.set_text(BATTERY_PADDING_Y)
-               self.batteryBg.set_active(0)
+               self.configBuf.insert(self.configBuf.get_end_iter(), "mouse_scroll_down = %s\n" % (self.mouseDown.get_active_text()))
+
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# Battery\n")
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_low_status = %s\n" % (self.batteryLow.get_text() if self.batteryLow.get_text() else BATTERY_LOW))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_low_cmd = %s\n" % (self.batteryLowAction.get_text() if self.batteryLowAction.get_text() else BATTERY_ACTION))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_hide = %s\n" % (self.batteryHide.get_text() if self.batteryHide.get_text() else BATTERY_HIDE))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "bat1_font = %s\n" % (self.bat1FontButton.get_font_name()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "bat2_font = %s\n" % (self.bat2FontButton.get_font_name()))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_font_color = %s %s\n" % (self.getHexFromWidget(self.batteryFontColButton),
+                                                                                                                       int(self.batteryFontColButton.get_alpha() / 65535.0 * 100)))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_padding = %s %s\n" % (self.batteryPadX.get_text() if self.batteryPadX.get_text() else BATTERY_PADDING_Y,
+                                                                                                                       self.batteryPadY.get_text() if self.batteryPadY.get_text() else BATTERY_PADDING_Y))
+               self.configBuf.insert(self.configBuf.get_end_iter(), "battery_background_id = %s\n" % (self.batteryBg.get_active()))
+
+               self.configBuf.insert(self.configBuf.get_end_iter(), "\n# End of config")
+
+       def getColorButton(self, widget):
+               """Returns the color button associated with widget."""
+               if widget.get_name() == "fontCol":
+                       return self.fontColButton
+               elif widget.get_name() == "fontActiveCol":
+                       return self.fontActiveColButton
+               elif widget.get_name() == "fontUrgentCol":
+                       return self.fontUrgentColButton
+               elif widget.get_name() == "fontIconifiedCol":
+                       return self.fontIconifiedColButton
+               elif widget.get_name() == "clockFontCol":
+                       return self.clockFontColButton
+               elif widget.get_name() == "batteryFontCol":
+                       return self.batteryFontColButton
+               elif widget.get_name() == "tooltipFontCol":
+                       return self.tooltipFontColButton
+               elif widget.get_name() == "bgColEntry":
+                       bgID = self.bgNotebook.get_current_page()
+
+                       for child in self.bgs[bgID].get_children():
+                               if child.get_name() == "bgCol":
+
+                                       return child
+               elif widget.get_name() == "borderColEntry":
+                       bgID = self.bgNotebook.get_current_page()
+
+                       for child in self.bgs[bgID].get_children():
+                               if child.get_name() == "borderCol":
+
+                                       return child
+
+               # No button found which matches label
+               return None
+
+       def getColorLabel(self, widget):
+               """Gets the color label associated with a color button."""
+               if widget.get_name() == "fontCol":
+                       return self.fontCol
+               elif widget.get_name() == "fontActiveCol":
+                       return self.fontActiveCol
+               elif widget.get_name() == "fontUrgentCol":
+                       return self.fontUrgentCol
+               elif widget.get_name() == "fontIconifiedCol":
+                       return self.fontIconifiedCol
+               elif widget.get_name() == "clockFontCol":
+                       return self.clockFontCol
+               elif widget.get_name() == "batteryFontCol":
+                       return self.batteryFontCol
+               elif widget.get_name() == "tooltipFontCol":
+                       return self.tooltipFontCol
+               elif widget.get_name() == "bgCol":
+                       bgID = self.bgNotebook.get_current_page()
+
+                       for child in self.bgs[bgID].get_children():
+                               if child.get_name() == "bgColEntry":
+
+                                       return child
+               elif widget.get_name() == "borderCol":
+                       bgID = self.bgNotebook.get_current_page()
+
+                       for child in self.bgs[bgID].get_children():
+                               if child.get_name() == "borderColEntry":
+
+                                       return child
+
+               # No label found which matches color button
+               return None
+
+       def getHexFromWidget(self, widget):
+               """Returns the #RRGGBB value of a widget."""
+               r = widget.get_color().red
+               g = widget.get_color().green
+               b = widget.get_color().blue
 
+               return rgbToHex(r, g, b)
+
+       def help(self, action=None):
+               """Opens the Help wiki page in the default web browser."""
+               try:
+                       webbrowser.open("http://code.google.com/p/tintwizard/wiki/Help")
+               except:
+                       errorDialog(self, "Your default web-browser could not be opened.\nPlease visit http://code.google.com/p/tintwizard/wiki/Help")
+       
+       def main(self):
+               """Enters the main loop."""
+               gtk.main()
+       
        def new(self, action=None):
                """Prepares a new config."""
                if self.toSave:
                        self.savePrompt()
-
+               
                self.toSave = True
                self.filename = None
 
@@ -1973,47 +1555,6 @@ class TintWizardGUI(gtk.Window):
                self.generateConfig()
                self.updateStatusBar()
 
-       def addBgDefs(self, bgDefs):
-               """Add interface elements for a list of background style definitions. bgDefs
-               should be a list containing dictionaries with the following keys: rounded,
-               border_width, background_color, border_color"""
-               for d in bgDefs:
-                       self.addBg()
-
-                       for child in self.bgs[-1].get_children():
-                               if child.get_name() == "rounded":
-                                       child.set_text(d["rounded"])
-                               elif child.get_name() == "border":
-                                       child.set_text(d["border_width"])
-                               elif child.get_name() == "bgColEntry":
-                                       child.set_text(d["background_color"].split(" ")[0].strip())
-                                       child.activate()
-                               elif child.get_name() == "borderColEntry":
-                                       child.set_text(d["border_color"].split(" ")[0].strip())
-                                       child.activate()
-                               elif child.get_name() == "bgCol":
-                                       list = d["background_color"].split(" ")
-                                       if len(list) > 1:
-                                               child.set_alpha(int(int(list[1].strip()) * 65535 / 100.0))
-                                       else:
-                                               child.set_alpha(65535)
-                               elif child.get_name() == "borderCol":
-                                       list = d["border_color"].split(" ")
-                                       if len(list) > 1:
-                                               child.set_alpha(int(int(list[1].strip()) * 65535 / 100.0))
-                                       else:
-                                               child.set_alpha(65535)
-
-                       newId = len(self.bgs)
-
-                       self.bgNotebook.append_page(self.bgs[newId-1], gtk.Label("Background ID %d" % (newId)))
-
-                       self.bgNotebook.show_all()
-
-                       self.updateComboBoxes(newId-1, "add")
-
-                       self.bgNotebook.set_current_page(newId)
-
        def parseBgs(self, string):
                """Parses the background definitions from a string."""
                s = string.split("\n")
@@ -2045,53 +1586,51 @@ class TintWizardGUI(gtk.Window):
                        e = s[0].strip()                                                                                                # Strip whitespace from KEY
 
                        if e == "time1_format":                                                                                 # Set the VALUE of KEY
-                               self.parseProp(self.propUI[e], s[1], True, "time1")
+                               self.parseProp(self.getComponent(e), s[1], True, "time1")
                        elif e == "time2_format":
-                               self.parseProp(self.propUI[e], s[1], True, "time2")
+                               self.parseProp(self.getComponent(e), s[1], True, "time2")
+                       elif e == "clock_tooltip":
+                               self.parseProp(self.getComponent(e), s[1], True, "clock_tooltip")
+                       elif e == "time1_timezone":
+                               self.parseProp(self.getComponent(e), s[1], True, "time1_timezone")
+                       elif e == "time2_timezone":
+                               self.parseProp(self.getComponent(e), s[1], True, "time2_timezone")
+                       elif e == "clock_tooltip_timezone":
+                               self.parseProp(self.getComponent(e), s[1], True, "tooltip_timezone")
                        elif e == "systray_padding":
-                               self.parseProp(self.propUI[e], s[1], True, "tray")
+                               self.parseProp(self.getComponent(e), s[1], True, "tray")
                        elif e == "taskbar_active_background_id":
-                               self.parseProp(self.propUI[e], s[1], True, "activeBg")
+                               self.parseProp(self.getComponent(e), s[1], True, "activeBg")
                        else:
-                               if self.propUI.has_key(e):
-                                       self.parseProp(self.propUI[e], s[1])
+                               component = self.getComponent(e)
+                               if component != None:
+                                       self.parseProp(self.getComponent(e), s[1])
 
        def parseProp(self, prop, string, special=False, propType=""):
                """Parses a variable definition from the conf file and updates the correct UI widget."""
                string = string.strip()                                                                         # Remove whitespace from the VALUE
                eType = type(prop)                                                                                      # Get widget type
 
-               if special:                                                                                                     # 'Special' properties are those which are optional
-                       if propType == "time1":
-                               self.clockCheckButton.set_active(True)
-                               self.clock1CheckButton.set_active(True)
-                       elif propType == "time2":
-                               self.clockCheckButton.set_active(True)
-                               self.clock2CheckButton.set_active(True)
-                       elif propType == "tray":
-                               self.trayShow.set_active(True)
-                       elif propType == "activeBg":
-                               self.taskbarActiveBgEnable.set_active(True)
-
                if eType == gtk.Entry:
                        prop.set_text(string)
                        prop.activate()
                elif eType == gtk.ComboBox:
+                       # This allows us to select the correct combo-box value.
                        if string in ["bottom", "top", "left", "right", "center", "single_desktop", "multi_desktop", "single_monitor",
                                                        "none", "close", "shade", "iconify", "toggle", "toggle_iconify", "maximize_restore",
                                                        "desktop_left", "desktop_right", "horizontal", "vertical", "ascending", "descending",
-                                                       "left2right", "right2left"]:
+                                                       "left2right", "right2left", "next_task", "prev_task", "minimum", "follow_size", "normal"]:
                                if string in ["bottom", "left", "single_desktop", "none", "horizontal", "ascending"]:
                                        i = 0
-                               elif string in ["top", "right", "multi_desktop", "close", "vertical", "descending"]:
+                               elif string in ["top", "right", "multi_desktop", "close", "vertical", "descending", "minimum"]:
                                        i = 1
-                               elif string in ["center", "single_monitor", "toggle", "left2right"]:
+                               elif string in ["center", "single_monitor", "toggle", "left2right", "follow_size", "normal"]:
                                        i = 2
                                elif string in ["right2left"]:
                                        i = 3
                                else:
                                        i = ["none", "close", "toggle", "iconify", "shade", "toggle_iconify", "maximize_restore",
-                                               "desktop_left", "desktop_right"].index(string)
+                                               "desktop_left", "desktop_right", "next_task", "prev_task"].index(string)
 
                                prop.set_active(i)
                        else:
@@ -2135,16 +1674,13 @@ class TintWizardGUI(gtk.Window):
 
        def readConf(self):
                """Reads the tintwizard configuration file - NOT tint2 config files."""
-               self.defaults = {"font": None, "bgColor": None, "fgColor": None, "borderColor": None, "bgCount": None, "dir": None}
+               self.defaults = {"font": None, "bgColor": None, "fgColor": None, "borderColor": None, "bgCount": None}
 
                if self.oneConfigFile:
                        # don't need tintwizard.conf
                        return
 
-               pathName = os.path.dirname(sys.argv[0])
-
-               if pathName != "":
-                       pathName += "/"
+               pathName = os.path.expandvars("${HOME}") + "/.config/tint2/"
 
                if not os.path.exists(pathName + "tintwizard.conf"):
                        self.writeConf()
@@ -2171,13 +1707,6 @@ class TintWizardGUI(gtk.Window):
 
                f.close()
 
-               # Deselect the optional stuff, and we'll re-check them if the config has them enabled
-               self.clockCheckButton.set_active(False)
-               self.clock1CheckButton.set_active(False)
-               self.clock2CheckButton.set_active(False)
-               self.trayShow.set_active(False)
-               self.taskbarActiveBgEnable.set_active(False)
-
                # Remove all background styles so we can create new ones as we read them
                for i in range(len(self.bgs)):
                        self.delBgClick(None, False)
@@ -2189,7 +1718,152 @@ class TintWizardGUI(gtk.Window):
                noBgDefs = self.parseBgs(string)
 
                self.parseConfig(noBgDefs)
+       
+       def reportBug(self, action=None):
+               """Opens the bug report page in the default web browser."""
+               try:
+                       webbrowser.open("http://code.google.com/p/tintwizard/issues/entry")
+               except:
+                       errorDialog(self, "Your default web-browser could not be opened.\nPlease visit http://code.google.com/p/tintwizard/issues/entry")
+
+       
+       def resetConfig(self):
+               """Resets all the widgets to their default values."""
+               # Backgrounds
+               for i in range(len(self.bgs)):
+                       self.delBgClick(prompt=False, init=True)
+
+               for i in range(self.defaults["bgCount"]):
+                       self.addBgClick(init=True)
+
+               self.bgNotebook.set_current_page(0)
 
+               # Panel
+               self.panelPosY.set_active(0)
+               self.panelPosX.set_active(0)
+               self.panelOrientation.set_active(0)
+               self.panelItems.set_text(PANEL_ITEMS)
+               self.panelSizeX.set_text(PANEL_SIZE_X)
+               self.panelSizeY.set_text(PANEL_SIZE_Y)
+               self.panelMarginX.set_text(PANEL_MARGIN_X)
+               self.panelMarginY.set_text(PANEL_MARGIN_Y)
+               self.panelPadX.set_text(PANEL_PADDING_Y)
+               self.panelPadY.set_text(PANEL_PADDING_Y)
+               self.panelSpacing.set_text(TASKBAR_SPACING)
+               self.panelBg.set_active(0)
+               self.panelMenu.set_active(0)
+               self.panelDock.set_active(0)
+               self.panelLayer.set_active(0)
+               self.panelMonitor.set_text(PANEL_MONITOR)
+               self.panelAutohide.set_active(0)
+               self.panelAutohideShow.set_text(PANEL_AUTOHIDE_SHOW)
+               self.panelAutohideHide.set_text(PANEL_AUTOHIDE_HIDE)
+               self.panelAutohideHeight.set_text(PANEL_AUTOHIDE_HEIGHT)
+               self.panelAutohideStrut.set_active(0)
+               # Taskbar
+               self.taskbarMode.set_active(0)
+               self.taskbarPadX.set_text(TASKBAR_PADDING_X)
+               self.taskbarPadY.set_text(TASKBAR_PADDING_Y)
+               self.taskbarSpacing.set_text(TASK_SPACING)
+               self.taskbarBg.set_active(0)
+               self.taskbarActiveBg.set_active(0)
+               # Tasks
+               self.taskBlinks.set_text(TASK_BLINKS)
+               self.taskCentreCheckButton.set_active(True)
+               self.taskTextCheckButton.set_active(True)
+               self.taskIconCheckButton.set_active(True)
+               self.taskMaxSizeX.set_text(TASK_MAXIMUM_SIZE_X)
+               self.taskMaxSizeY.set_text(TASK_MAXIMUM_SIZE_Y)
+               self.taskPadX.set_text(TASK_PADDING_X)
+               self.taskPadY.set_text(TASK_PADDING_Y)
+               self.taskBg.set_active(0)
+               self.taskActiveBg.set_active(0)
+               self.taskUrgentBg.set_active(0)
+               self.taskIconifiedBg.set_active(0)
+               # Icons
+               self.iconHue.set_text(ICON_ALPHA)
+               self.iconSat.set_text(ICON_SAT)
+               self.iconBri.set_text(ICON_BRI)
+               self.activeIconHue.set_text(ACTIVE_ICON_ALPHA)
+               self.activeIconSat.set_text(ACTIVE_ICON_SAT)
+               self.activeIconBri.set_text(ACTIVE_ICON_BRI)
+               self.urgentIconHue.set_text(URGENT_ICON_ALPHA)
+               self.urgentIconSat.set_text(URGENT_ICON_SAT)
+               self.urgentIconBri.set_text(URGENT_ICON_BRI)
+               self.iconifiedIconHue.set_text(ICONIFIED_ICON_ALPHA)
+               self.iconifiedIconSat.set_text(ICONIFIED_ICON_SAT)
+               self.iconifiedIconBri.set_text(ICONIFIED_ICON_BRI)
+               # Fonts
+               self.fontButton.set_font_name(self.defaults["font"])
+               self.fontColButton.set_alpha(65535)
+               self.fontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.fontCol.set_text(self.defaults["fgColor"])
+               self.fontActiveColButton.set_alpha(65535)
+               self.fontActiveColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.fontActiveCol.set_text(self.defaults["fgColor"])
+               self.fontUrgentColButton.set_alpha(65535)
+               self.fontUrgentColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.fontUrgentCol.set_text(self.defaults["fgColor"])
+               self.fontIconifiedColButton.set_alpha(65535)
+               self.fontIconifiedColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.fontIconifiedCol.set_text(self.defaults["fgColor"])
+               self.fontShadowCheckButton.set_active(False)
+               # System Tray
+               self.trayPadX.set_text(TRAY_PADDING_X)
+               self.trayPadY.set_text(TRAY_PADDING_X)
+               self.traySpacing.set_text(TRAY_SPACING)
+               self.trayOrder.set_active(0)
+               self.trayBg.set_active(0)
+               self.trayMaxIconSize.set_text(TRAY_MAX_ICON_SIZE)
+               self.trayIconHue.set_text(TRAY_ICON_ALPHA)
+               self.trayIconSat.set_text(TRAY_ICON_SAT)
+               self.trayIconBri.set_text(TRAY_ICON_BRI)
+               # Clock
+               self.clock1Format.set_text(CLOCK_FMT_1)
+               self.clock1FontButton.set_font_name(self.defaults["font"])
+               self.clock2Format.set_text(CLOCK_FMT_2)
+               self.clockTooltipFormat.set_text(CLOCK_TOOLTIP)
+               self.clock2FontButton.set_font_name(self.defaults["font"])
+               self.clockFontColButton.set_alpha(65535)
+               self.clockFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.clockFontCol.set_text(self.defaults["fgColor"])
+               self.clockPadX.set_text(CLOCK_PADDING_X)
+               self.clockPadY.set_text(CLOCK_PADDING_Y)
+               self.clockBg.set_active(0)
+               self.clockLClick.set_text(CLOCK_LCLICK)
+               self.clockRClick.set_text(CLOCK_RCLICK)
+               self.clockTime1Timezone.set_text(CLOCK_TIME1_TIMEZONE)
+               self.clockTime2Timezone.set_text(CLOCK_TIME2_TIMEZONE)
+               self.clockTooltipTimezone.set_text(CLOCK_TOOLTIP_TIMEZONE)
+               # Tooltips
+               self.tooltipShow.set_active(False)
+               self.tooltipPadX.set_text(TOOLTIP_PADDING_X)
+               self.tooltipPadY.set_text(TOOLTIP_PADDING_Y)
+               self.tooltipShowTime.set_text(TOOLTIP_SHOW_TIMEOUT)
+               self.tooltipHideTime.set_text(TOOLTIP_HIDE_TIMEOUT)
+               self.tooltipBg.set_active(0)
+               self.tooltipFont.set_font_name(self.defaults["font"])
+               self.tooltipFontColButton.set_alpha(65535)
+               self.tooltipFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.tooltipFontCol.set_text(self.defaults["fgColor"])
+               # Mouse
+               self.mouseMiddle.set_active(0)
+               self.mouseRight.set_active(0)
+               self.mouseUp.set_active(0)
+               self.mouseDown.set_active(0)
+               # Battery
+               self.batteryLow.set_text(BATTERY_LOW)
+               self.batteryLowAction.set_text(BATTERY_ACTION)
+               self.batteryHide.set_text(BATTERY_HIDE)
+               self.bat1FontButton.set_font_name(self.defaults["font"])
+               self.bat2FontButton.set_font_name(self.defaults["font"])
+               self.batteryFontColButton.set_alpha(65535)
+               self.batteryFontColButton.set_color(gtk.gdk.color_parse(self.defaults["fgColor"]))
+               self.batteryFontCol.set_text(self.defaults["fgColor"])
+               self.batteryPadX.set_text(BATTERY_PADDING_Y)
+               self.batteryPadY.set_text(BATTERY_PADDING_Y)
+               self.batteryBg.set_active(0)
+       
        def save(self, widget=None, event=None):
                """Saves the generated config file."""
 
@@ -2278,7 +1952,7 @@ class TintWizardGUI(gtk.Window):
 
        def updateComboBoxes(self, i, action="add"):
                """Updates the contents of a combo box when a background style has been added/removed."""
-               cbs = [self.batteryBg, self.clockBg, self.taskbarBg, self.taskbarActiveBg, self.trayBg, self.taskActiveBg, self.taskBg, self.panelBg, self.tooltipBg]
+               cbs = [self.batteryBg, self.clockBg, self.taskbarBg, self.taskbarActiveBg, self.trayBg, self.taskActiveBg, self.taskBg, self.panelBg, self.tooltipBg, self.taskUrgentBg, self.taskIconifiedBg]
 
                if action == "add":
                        for cb in cbs:
@@ -2309,18 +1983,15 @@ class TintWizardGUI(gtk.Window):
 
                for key in self.defaults:
                        confStr += "%s = %s\n" % (key, str(self.defaults[key]))
-
+               
                confStr += "#End\n"
-
-               pathName = os.path.dirname(sys.argv[0])
-
-               if pathName == "":
-                       f = open("tintwizard.conf", "w")
-               else:
-                       f = open(pathName+"/tintwizard.conf", "w")
-
+               
+               pathName = os.path.expandvars("${HOME}") + "/.config/tint2/"
+               
+               f = open(pathName+"tintwizard.conf", "w")
+               
                f.write(confStr)
-
+               
                f.close()
 
        def writeFile(self):
@@ -2341,6 +2012,88 @@ class TintWizardGUI(gtk.Window):
                        errorDialog(self, "Could not save file")
 
 # General use functions
+def createLabel(parent, text="", gridX=0, gridY=0, sizeX=1, sizeY=1, xPadding=0):
+       """Creates a label and adds it to a parent widget."""
+       
+       temp = gtk.Label(text)
+       temp.set_alignment(0, 0.5)
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xpadding=xPadding)
+       return temp
+
+def createComboBox(parent, choices=["null"], active=0, gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None):
+       """Creates a combo box with text choices and adds it to a parent widget."""
+       temp = gtk.combo_box_new_text()
+       
+       for choice in choices:
+               temp.append_text(choice)
+       
+       temp.set_active(active)
+       
+       if handler != None:
+               temp.connect("changed", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
+def createEntry(parent, maxSize, width, text="", gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None, name=""):
+       """Creates a text entry widget and adds it to a parent widget."""
+       temp = gtk.Entry(maxSize)
+       temp.set_width_chars(width)
+       temp.set_text(text)
+       temp.set_name(name)
+       
+       if handler != None:
+               temp.connect("changed", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
+def createCheckButton(parent, text="", active=False, gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None):
+       """Creates a checkbox widget and adds it to a parent widget."""
+       temp = gtk.CheckButton(text if text != "" else None)
+       temp.set_active(active)
+       temp.connect("toggled", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
+def createButton(parent, text="", stock=None, name="", gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None):
+       """Creates a button widget and adds it to a parent widget."""
+       if stock:
+               temp = gtk.Button(text, stock)
+       else:
+               temp = gtk.Button(text)
+       
+       temp.set_name(name)
+       temp.connect("clicked", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
+def createFontButton(parent, font, gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None):
+       """Creates a font button widget and adds it to a parent widget."""
+       temp = gtk.FontButton()
+       temp.set_font_name(font)
+       temp.connect("font-set", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
+def createColorButton(parent, color="#000000", useAlpha=True, name="", gridX=0, gridY=0, sizeX=1, sizeY=1, xExpand=True, yExpand=True, handler=None):
+       temp = gtk.ColorButton(gtk.gdk.color_parse(color))
+       temp.set_use_alpha(useAlpha)
+       temp.set_name(name)
+       temp.connect("color-set", handler)
+       
+       parent.attach(temp, gridX, gridX+sizeX, gridY, gridY+sizeY, xoptions=gtk.EXPAND if xExpand else 0, yoptions=gtk.EXPAND if yExpand else 0)
+       
+       return temp
+
 def confirmDialog(parent, message):
        """Creates a confirmation dialog and returns the response."""
        dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, message)
@@ -2383,5 +2136,10 @@ def trunc(n):
 
 # Direct execution of application
 if __name__ == "__main__":
+       if len(sys.argv) > 1 and sys.argv[1] == "-version":
+               print NAME, VERSION
+               exit()
+       
        tw = TintWizardGUI()
        tw.main()
+
This page took 0.095496 seconds and 4 git commands to generate.