[Utopia] patch for gnome-volume-properties



This is a folloup patch to the one I wrote for gnome-volume-manage to
make it such that it only updated settings that changed.

For gnome-volume-manager to really benefit from those changes, though,
gnome-volume-properties needed to be fixed to not re-save all of the
settings anytime any of them changed, thus the attached patch.

I once again used my overly-fun table-driven strategy

A couple things I noticed while hacking away at g-v-p:

1. all the file entries used the same history_id, CD_CAPPLET_ID. Is this
really the intended behaviour? I can imagine the same id being used for
CDAs and DVDs (perhaps), but for CDRs as well? Seemed kinda strange...

I'm not even sure CDAs and DVDs sharing the same history id is really
desirable, since the commands for each are likely to be completely
different. or maybe I just don't understand the idea behind history_id's
(I really don't know)

2. the Eject command and the Autorun path settings are not configurable
via g-v-p. Is there a reason other than "haven't gotten to it yet"? If
that is the case, shall I feel free to hack up a UI for them?

The Autorun path UI should probably be a list widget with some way of
adding/removing entries?

-- 
Jeffrey Stedfast
Evolution Hacker - Novell, Inc.
fejj ximian com  - www.novell.com
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gnome-volume-manager/ChangeLog,v
retrieving revision 1.139
diff -u -r1.139 ChangeLog
--- ChangeLog	26 May 2005 20:48:44 -0000	1.139
+++ ChangeLog	1 Jun 2005 19:30:34 -0000
@@ -1,3 +1,13 @@
+2005-06-01  Jeffrey Stedfast  <fejj novell com>
+
+	* gnome-volume-properties.glade: Renamed various widgets to match
+	their gconf key names to make it easier to make the code
+	table-driven on gconf keys.
+
+	* src/properties.c: Changed to be table-driven like manager.c
+	which more easily allows us to save single setting chanegs rather
+	than re-saving all settings whenever any setting changes.
+
 2005-05-26  Jeffrey Stedfast  <fejj novell com>
 
 	* src/manager.c (gvm_config_changed): Instead of free()ing all the
Index: gnome-volume-properties.glade
===================================================================
RCS file: /cvs/gnome/gnome-volume-manager/gnome-volume-properties.glade,v
retrieving revision 1.5
diff -u -r1.5 gnome-volume-properties.glade
--- gnome-volume-properties.glade	6 Feb 2005 16:10:39 -0000	1.5
+++ gnome-volume-properties.glade	1 Jun 2005 19:30:35 -0000
@@ -17,6 +17,7 @@
   <property name="skip_pager_hint">False</property>
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
   <property name="has_separator">False</property>
   <accessibility>
     <atkproperty name="AtkObject::accessible_name" translatable="yes">Drives and Media Preferences</atkproperty>
@@ -91,6 +92,10 @@
 		      <property name="yalign">0.5</property>
 		      <property name="xpad">0</property>
 		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
 		    </widget>
 		    <packing>
 		      <property name="padding">0</property>
@@ -127,7 +132,7 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="automount_drives_cb">
+			    <widget class="GtkCheckButton" id="automount_drives">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">_Mount removable drives when hot-plugged</property>
@@ -146,7 +151,7 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="automount_media_cb">
+			    <widget class="GtkCheckButton" id="automount_media">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Mount removable media when _inserted</property>
@@ -165,7 +170,7 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autobrowse_cb">
+			    <widget class="GtkCheckButton" id="autobrowse">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Browse _removable media when inserted</property>
@@ -184,7 +189,7 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autorun_cb">
+			    <widget class="GtkCheckButton" id="autorun">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">_Auto-run programs on new drives and media</property>
@@ -242,6 +247,10 @@
 		      <property name="yalign">0.5</property>
 		      <property name="xpad">0</property>
 		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
 		    </widget>
 		    <packing>
 		      <property name="padding">0</property>
@@ -278,7 +287,7 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autoburn_cdr_cb">
+			    <widget class="GtkCheckButton" id="autoburn_cdr">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Perform action on _blank discs when inserted</property>
@@ -315,6 +324,10 @@
 				  <property name="yalign">0.5</property>
 				  <property name="xpad">0</property>
 				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -324,7 +337,7 @@
 			      </child>
 
 			      <child>
-				<widget class="GtkHBox" id="command_cdr_hbox">
+				<widget class="GtkHBox" id="autoburn_cdr_hbox">
 				  <property name="visible">True</property>
 				  <property name="homogeneous">False</property>
 				  <property name="spacing">12</property>
@@ -342,6 +355,10 @@
 				      <property name="yalign">0.5</property>
 				      <property name="xpad">0</property>
 				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -351,15 +368,16 @@
 				  </child>
 
 				  <child>
-				    <widget class="GnomeFileEntry" id="command_cdr_fileentry">
+				    <widget class="GnomeFileEntry" id="autoburn_cdr_command_fileentry">
 				      <property name="visible">True</property>
 				      <property name="max_saved">10</property>
 				      <property name="directory_entry">False</property>
 				      <property name="modal">False</property>
 				      <property name="use_filechooser">True</property>
+				      <property name="filechooser_action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
 
 				      <child internal-child="entry">
-					<widget class="GtkEntry" id="command_cdr_entry">
+					<widget class="GtkEntry" id="autoburn_cdr_command">
 					  <property name="visible">True</property>
 					  <property name="can_focus">True</property>
 					  <property name="editable">True</property>
@@ -367,7 +385,7 @@
 					  <property name="max_length">0</property>
 					  <property name="text" translatable="yes"></property>
 					  <property name="has_frame">True</property>
-					  <property name="invisible_char" translatable="yes">*</property>
+					  <property name="invisible_char">*</property>
 					  <property name="activates_default">False</property>
 					</widget>
 				      </child>
@@ -433,6 +451,10 @@
 	      <property name="yalign">0.5</property>
 	      <property name="xpad">0</property>
 	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
 	    </widget>
 	    <packing>
 	      <property name="type">tab</property>
@@ -465,6 +487,10 @@
 		      <property name="yalign">0.5</property>
 		      <property name="xpad">0</property>
 		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
 		    </widget>
 		    <packing>
 		      <property name="padding">0</property>
@@ -501,7 +527,7 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autoplay_cda_cb">
+			    <widget class="GtkCheckButton" id="autoplay_cda">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Play _audio CD discs when inserted</property>
@@ -538,6 +564,10 @@
 				  <property name="yalign">0.5</property>
 				  <property name="xpad">0</property>
 				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -547,7 +577,7 @@
 			      </child>
 
 			      <child>
-				<widget class="GtkHBox" id="command_cda_hbox">
+				<widget class="GtkHBox" id="autoplay_cda_hbox">
 				  <property name="visible">True</property>
 				  <property name="homogeneous">False</property>
 				  <property name="spacing">12</property>
@@ -565,7 +595,11 @@
 				      <property name="yalign">0.5</property>
 				      <property name="xpad">0</property>
 				      <property name="ypad">0</property>
-				      <property name="mnemonic_widget">command_cda_entry</property>
+				      <property name="mnemonic_widget">autoplay_cda_command</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -575,15 +609,16 @@
 				  </child>
 
 				  <child>
-				    <widget class="GnomeFileEntry" id="command_cda_fileentry">
+				    <widget class="GnomeFileEntry" id="autoplay_cda_command_fileentry">
 				      <property name="visible">True</property>
 				      <property name="max_saved">10</property>
 				      <property name="directory_entry">False</property>
 				      <property name="modal">False</property>
 				      <property name="use_filechooser">True</property>
+				      <property name="filechooser_action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
 
 				      <child internal-child="entry">
-					<widget class="GtkEntry" id="command_cda_entry">
+					<widget class="GtkEntry" id="autoplay_cda_command">
 					  <property name="visible">True</property>
 					  <property name="can_focus">True</property>
 					  <property name="editable">True</property>
@@ -591,7 +626,7 @@
 					  <property name="max_length">0</property>
 					  <property name="text" translatable="yes"></property>
 					  <property name="has_frame">True</property>
-					  <property name="invisible_char" translatable="yes">*</property>
+					  <property name="invisible_char">*</property>
 					  <property name="activates_default">False</property>
 					</widget>
 				      </child>
@@ -657,6 +692,10 @@
 		      <property name="yalign">0.5</property>
 		      <property name="xpad">0</property>
 		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
 		    </widget>
 		    <packing>
 		      <property name="padding">0</property>
@@ -693,7 +732,7 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autoplay_dvd_cb">
+			    <widget class="GtkCheckButton" id="autoplay_dvd">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Play _video DVD disks when inserted</property>
@@ -730,6 +769,10 @@
 				  <property name="yalign">0.5</property>
 				  <property name="xpad">0</property>
 				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -739,7 +782,7 @@
 			      </child>
 
 			      <child>
-				<widget class="GtkHBox" id="command_dvd_hbox">
+				<widget class="GtkHBox" id="autoplay_dvd_hbox">
 				  <property name="visible">True</property>
 				  <property name="homogeneous">False</property>
 				  <property name="spacing">12</property>
@@ -757,7 +800,11 @@
 				      <property name="yalign">0.5</property>
 				      <property name="xpad">0</property>
 				      <property name="ypad">0</property>
-				      <property name="mnemonic_widget">command_dvd_entry</property>
+				      <property name="mnemonic_widget">autoplay_dvd_command</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -767,15 +814,16 @@
 				  </child>
 
 				  <child>
-				    <widget class="GnomeFileEntry" id="command_dvd_fileentry">
+				    <widget class="GnomeFileEntry" id="autoplay_dvd_command_fileentry">
 				      <property name="visible">True</property>
 				      <property name="max_saved">10</property>
 				      <property name="directory_entry">False</property>
 				      <property name="modal">False</property>
 				      <property name="use_filechooser">True</property>
+				      <property name="filechooser_action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
 
 				      <child internal-child="entry">
-					<widget class="GtkEntry" id="command_dvd_entry">
+					<widget class="GtkEntry" id="autoplay_dvd_command">
 					  <property name="visible">True</property>
 					  <property name="can_focus">True</property>
 					  <property name="editable">True</property>
@@ -783,7 +831,7 @@
 					  <property name="max_length">0</property>
 					  <property name="text" translatable="yes"></property>
 					  <property name="has_frame">True</property>
-					  <property name="invisible_char" translatable="yes">*</property>
+					  <property name="invisible_char">*</property>
 					  <property name="activates_default">False</property>
 					</widget>
 				      </child>
@@ -849,6 +897,10 @@
 		      <property name="yalign">0.5</property>
 		      <property name="xpad">0</property>
 		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
 		    </widget>
 		    <packing>
 		      <property name="padding">0</property>
@@ -885,7 +937,7 @@
 			  <property name="spacing">6</property>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="autophoto_cb">
+			    <widget class="GtkCheckButton" id="autophoto">
 			      <property name="visible">True</property>
 			      <property name="can_focus">True</property>
 			      <property name="label" translatable="yes">Import digital _photographs when connected</property>
@@ -922,6 +974,10 @@
 				  <property name="yalign">0.5</property>
 				  <property name="xpad">0</property>
 				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -931,7 +987,7 @@
 			      </child>
 
 			      <child>
-				<widget class="GtkHBox" id="command_photo_hbox">
+				<widget class="GtkHBox" id="autophoto_hbox">
 				  <property name="visible">True</property>
 				  <property name="homogeneous">False</property>
 				  <property name="spacing">12</property>
@@ -949,7 +1005,11 @@
 				      <property name="yalign">0.5</property>
 				      <property name="xpad">0</property>
 				      <property name="ypad">0</property>
-				      <property name="mnemonic_widget">command_photo_entry</property>
+				      <property name="mnemonic_widget">autophoto_command</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
 				    </widget>
 				    <packing>
 				      <property name="padding">0</property>
@@ -959,15 +1019,16 @@
 				  </child>
 
 				  <child>
-				    <widget class="GnomeFileEntry" id="command_photo_fileentry">
+				    <widget class="GnomeFileEntry" id="autophoto_command_fileentry">
 				      <property name="visible">True</property>
 				      <property name="max_saved">10</property>
 				      <property name="directory_entry">False</property>
 				      <property name="modal">False</property>
 				      <property name="use_filechooser">True</property>
+				      <property name="filechooser_action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
 
 				      <child internal-child="entry">
-					<widget class="GtkEntry" id="command_photo_entry">
+					<widget class="GtkEntry" id="autophoto_command">
 					  <property name="visible">True</property>
 					  <property name="can_focus">True</property>
 					  <property name="editable">True</property>
@@ -975,7 +1036,7 @@
 					  <property name="max_length">0</property>
 					  <property name="text" translatable="yes"></property>
 					  <property name="has_frame">True</property>
-					  <property name="invisible_char" translatable="yes">*</property>
+					  <property name="invisible_char">*</property>
 					  <property name="activates_default">False</property>
 					</widget>
 				      </child>
@@ -1041,6 +1102,10 @@
 	      <property name="yalign">0.5</property>
 	      <property name="xpad">0</property>
 	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
 	    </widget>
 	    <packing>
 	      <property name="type">tab</property>
Index: src/properties.c
===================================================================
RCS file: /cvs/gnome/gnome-volume-manager/src/properties.c,v
retrieving revision 1.14
diff -u -r1.14 properties.c
--- src/properties.c	30 Mar 2005 21:26:38 -0000	1.14
+++ src/properties.c	1 Jun 2005 19:30:35 -0000
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * src/properties.c - control panel applet for gnome-volume-manager
  *
@@ -8,295 +9,176 @@
  * Licensed under the GNU GPL v2.  See COPYING.
  */
 
+#ifdef HAVE_CONFIG_H
 #include "config.h"
+#endif
 
 #include <gnome.h>
 #include <gdk/gdkx.h>
-#include <gtk/gtkwindow.h>
+#include <libgnome/gnome-i18n.h>
 #include <glade/glade.h>
 #include <gconf/gconf-client.h>
 #include <libhal.h>
 
 #include "gvm.h"
 
-#ifdef ENABLE_NLS
-#  include <libintl.h>
-#  define _(String) gettext (String)
-#  ifdef gettext_noop
-#    define N_(String) gettext_noop (String)
-#  else
-#    define N_(String) (String)
-#  endif
-#else
-#  define _(String)
-#  define N_(String) (String)
-#endif
-
-GtkWidget *dialog;
-GtkWidget *automount_drives_cb;
-GtkWidget *automount_media_cb;
-GtkWidget *autobrowse_cb;
-GtkWidget *autorun_cb;
-GtkWidget *autoplay_cda_cb;
-GtkWidget *command_cda_hbox;
-GtkWidget *command_cda_entry;
-GtkWidget *command_cda_fileentry;
-GtkWidget *autoburn_cdr_cb;
-GtkWidget *command_cdr_fileentry;
-GtkWidget *command_cdr_entry;
-GtkWidget *command_cdr_hbox;
-GtkWidget *autoplay_dvd_cb;
-GtkWidget *command_dvd_hbox;
-GtkWidget *command_dvd_fileentry;
-GtkWidget *command_dvd_entry;
-GtkWidget *autophoto_cb;
-GtkWidget *autophoto_command;
-GtkWidget *command_photo_fileentry;
-GtkWidget *command_photo_entry;
-GtkWidget *command_photo_hbox;
+#define GLADE_XML_FILE	"gnome-volume-properties.glade"
 
-gboolean lock_config = FALSE;
 
-struct gvm_configuration config;
+typedef enum {
+	TYPE_BOOL,
+	TYPE_STRING,
+} type_t;
+
+enum {
+	AUTOBROWSE,
+	AUTOBURN_CDR,
+	AUTOBURN_CDR_COMMAND,
+	AUTOMOUNT_DRIVES,
+	AUTOMOUNT_MEDIA,
+	AUTOPHOTO,
+	AUTOPHOTO_COMMAND,
+	AUTOPLAY_CDA,
+	AUTOPLAY_CDA_COMMAND,
+	AUTOPLAY_DVD,
+	AUTOPLAY_DVD_COMMAND,
+	AUTORUN,
+	AUTORUN_PATH,
+	EJECT_COMMAND,
+};
+
+static struct {
+	const char *key;
+	type_t type;
+	GtkWidget *widget;
+	gboolean need_daemon;
+} gvm_settings[] = {
+	{ GCONF_ROOT "autobrowse",           TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "autoburn_cdr",         TYPE_BOOL,   NULL, FALSE },
+	{ GCONF_ROOT "autoburn_cdr_command", TYPE_STRING, NULL, FALSE },
+	{ GCONF_ROOT "automount_drives",     TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "automount_media",      TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "autophoto",            TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "autophoto_command",    TYPE_STRING, NULL, FALSE },
+	{ GCONF_ROOT "autoplay_cda",         TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "autoplay_cda_command", TYPE_STRING, NULL, FALSE },
+	{ GCONF_ROOT "autoplay_dvd",         TYPE_BOOL,   NULL, TRUE  },
+	{ GCONF_ROOT "autoplay_dvd_command", TYPE_STRING, NULL, FALSE },
+	{ GCONF_ROOT "autorun",              TYPE_BOOL,   NULL, TRUE  },
+	/* The following entries do not yet have a UI */
+	/*{ GCONF_ROOT "autorun_path",         TYPE_STRING, NULL, FALSE },
+	  { GCONF_ROOT "eject_command",        TYPE_STRING, NULL, FALSE },*/
+};
+
+static GHashTable *gvm_settings_hash = NULL;
+static GConfClient *gconf = NULL;
+static GladeXML *xml = NULL;
+static gboolean updating = FALSE;
+static GtkWidget *props = NULL;
 
-/*
- * set_sensitivity - set the widget sensitivity based on the configuration
- */
 static void
-set_sensitivity (void)
+changed_cb (GtkEntry *entry, const char *key)
 {
-	gtk_widget_set_sensitive (autorun_cb,
-			config.automount_media || config.automount_drives);
-	gtk_widget_set_sensitive (command_cda_hbox, config.autoplay_cda);
-	gtk_widget_set_sensitive (command_cdr_hbox, config.autoburn_cdr);
-	gtk_widget_set_sensitive (command_dvd_hbox, config.autoplay_dvd);
-	gtk_widget_set_sensitive (command_photo_hbox, config.autophoto);
+	const char *str;
+	
+	if (updating)
+		return;
+	
+	str = gtk_entry_get_text (entry);
+	gconf_client_set_string (gconf, key, str ? str : "", NULL);
 }
 
-/*
- * write_config - sync configure structure => gconf keys
- */
 static void
-write_config (void)
+toggled_cb (GtkToggleButton *toggle, const char *key)
 {
-	gconf_client_set_bool (config.client, GCONF_ROOT "automount_drives",
-			       config.automount_drives, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "automount_media",
-			       config.automount_media, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "autobrowse",
-			       config.autobrowse, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "autorun",
-			       config.autorun, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "autoburn_cdr",
-			       config.autoburn_cdr, NULL);
-	gconf_client_set_string (config.client,
-				 GCONF_ROOT "autoburn_cdr_command",
-				 config.autoburn_cdr_command, NULL);	
-	gconf_client_set_bool (config.client, GCONF_ROOT "autoplay_cda",
-			       config.autoplay_cda, NULL);
-	gconf_client_set_string (config.client,
-				 GCONF_ROOT "autoplay_cda_command",
-				 config.autoplay_cda_command, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "autoplay_dvd",
-			config.autoplay_dvd, NULL);
-	gconf_client_set_string (config.client,
-				 GCONF_ROOT "autoplay_dvd_command",
-				 config.autoplay_dvd_command, NULL);
-	gconf_client_set_bool (config.client, GCONF_ROOT "autophoto",
-			       config.autophoto, NULL);
-	gconf_client_set_string (config.client, GCONF_ROOT "autophoto_command",
-				 config.autophoto_command, NULL);
-}
-
-/*
- * signal_response - respond to GTK signal by sync'ing widgets => config struct
- */
-static void
-signal_response (void)
-{
-	config.automount_drives = GTK_TOGGLE_BUTTON
-			(automount_drives_cb)->active;
-	config.automount_media = GTK_TOGGLE_BUTTON
-			(automount_media_cb)->active;
-	config.autobrowse = GTK_TOGGLE_BUTTON
-			(autobrowse_cb)->active;
-	config.autorun = GTK_TOGGLE_BUTTON (autorun_cb)->active;
-	config.autoburn_cdr = GTK_TOGGLE_BUTTON (autoburn_cdr_cb)->active;
-	config.autoplay_cda = GTK_TOGGLE_BUTTON (autoplay_cda_cb)->active;
-	config.autoplay_dvd = GTK_TOGGLE_BUTTON (autoplay_dvd_cb)->active;
-	config.autophoto = GTK_TOGGLE_BUTTON (autophoto_cb)->active;
-	g_free (config.autoplay_cda_command);
-	config.autoplay_cda_command = gtk_editable_get_chars
-	    (GTK_EDITABLE (command_cda_entry), 0, -1);
-	g_free (config.autoplay_dvd_command);
-	config.autoplay_dvd_command = gtk_editable_get_chars
-	    (GTK_EDITABLE (command_dvd_entry), 0, -1);
-	g_free (config.autoburn_cdr_command);
-	config.autoburn_cdr_command = gtk_editable_get_chars
-		(GTK_EDITABLE (command_cdr_entry), 0, -1);
-	g_free (config.autophoto_command);
-	config.autophoto_command = gtk_editable_get_chars
-		(GTK_EDITABLE (command_photo_entry), 0, -1);
-
-	set_sensitivity ();
-
-	if (lock_config == FALSE)
-		write_config ();
-}
-
-/*
- * check_clipboard - check if the CLIPBOARD_NAME clipboard is available
- *
- * Returns TRUE if the CLIPBOARD_NAME clipboard is out there and FALSE
- * otherwise
- */
-static gboolean
-check_clipboard (void)
-{
-	Atom clipboard_atom = gdk_x11_get_xatom_by_name (CLIPBOARD_NAME);
-
-	return XGetSelectionOwner (GDK_DISPLAY (), clipboard_atom) != None;
+	GtkWidget *hbox;
+	gboolean bool;
+	char *name;
+	
+	bool = gtk_toggle_button_get_active (toggle);
+	
+	if (!updating)
+		gconf_client_set_bool (gconf, key, bool, NULL);
+	
+	name = strrchr (key, '/') + 1;
+	if (!strncmp (name, "automount_", 10)) {
+		bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[AUTOMOUNT_MEDIA].widget)) ||
+			gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[AUTOMOUNT_DRIVES].widget));
+		gtk_widget_set_sensitive (gvm_settings[AUTORUN].widget, bool);
+	} else {
+		name = g_strdup_printf ("%s_hbox", name);
+		if ((hbox = glade_xml_get_widget (xml, name)))
+			gtk_widget_set_sensitive (hbox, bool);
+		g_free (name);
+	}
 }
 
-/*
- * check_daemon - check if the daemon itself is running. if not, and if we
- * have configuration options set that would make it worthwhile to run, run
- * it.
- */
 static void
-check_daemon (void)
+gconf_changed_cb (GConfClient *client __attribute__((__unused__)),
+		  guint id __attribute__((__unused__)),
+		  GConfEntry *entry,
+		  gpointer data __attribute__((__unused__)))
 {
-	char *argv[2];
-	GError *error = NULL;
-
-	if (!(config.automount_drives || config.automount_media 
-			|| config.autobrowse || config.autorun 
-			|| config.autoplay_cda || config.autoplay_dvd 
-			|| config.autophoto) || check_clipboard ()) 
+	GConfValue *value;
+	int which;
+	
+	g_return_if_fail (gconf_entry_get_key (entry) != NULL);
+	
+	if (!(value = gconf_entry_get_value (entry)))
 		return;
-
-	argv[0] = BINDIR "/gnome-volume-manager";
-	argv[1] = NULL;
-	g_spawn_async (g_get_home_dir (), argv, NULL, 0, NULL,
-			NULL, NULL, &error);
-
-	if (error) {
-		GtkWidget *message = gtk_message_dialog_new
-			(GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT,
-			GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-			_("Error starting gnome-volume-manager daemon:\n%s"),
-			error->message);
-
-		gtk_dialog_run (GTK_DIALOG (message));
-
-		g_error_free (error);
-
-		exit (EXIT_FAILURE);
+	
+	which = GPOINTER_TO_INT (g_hash_table_lookup (gvm_settings_hash, entry->key));
+	
+	updating = TRUE;
+	
+	if (gvm_settings[which].type == TYPE_STRING) {
+		gtk_entry_set_text (GTK_ENTRY (gvm_settings[which].widget), gconf_value_get_string (value));
+	} else if (gvm_settings[which].type == TYPE_BOOL) {
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gvm_settings[which].widget),
+					      gconf_value_get_bool (value));
+	} else {
+		g_assert_not_reached ();
 	}
+	
+	updating = FALSE;
 }
 
-/*
- * update_widgets - sync configure structure -> widgets
- */
 static void
-update_widgets (void)
-{
-	lock_config = TRUE;
-
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (automount_drives_cb),
-				      config.automount_drives);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (automount_media_cb),
-				      config.automount_media);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autobrowse_cb),
-				      config.autobrowse);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autorun_cb),
-				      config.autorun);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autoplay_cda_cb),
-				      config.autoplay_cda);
-
-	if (config.autoplay_cda_command != NULL)
-		gtk_entry_set_text (GTK_ENTRY (command_cda_entry),
-				    config.autoplay_cda_command);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autoburn_cdr_cb),
-				      config.autoburn_cdr);
-	if (config.autoburn_cdr_command != NULL)
-		gtk_entry_set_text (GTK_ENTRY (command_cdr_entry),
-				    config.autoburn_cdr_command);	
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autoplay_dvd_cb),
-				      config.autoplay_dvd);
-	if (config.autoplay_dvd_command != NULL)
-		gtk_entry_set_text (GTK_ENTRY (command_dvd_entry),
-				    config.autoplay_dvd_command);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (autophoto_cb),
-				      config.autophoto);
-	if (config.autophoto_command != NULL)
-		gtk_entry_set_text (GTK_ENTRY (command_photo_entry),
-				    config.autophoto_command);
-
-	set_sensitivity ();
-
-	check_daemon ();
-
-	lock_config = FALSE;
-}
-
-/*
- * read_config - sync gconf keys -> configure structure
- */
-static void
-read_config (void)
-{
-	config.automount_drives = gconf_client_get_bool (config.client,
-			GCONF_ROOT "automount_drives", NULL);
-	config.automount_media = gconf_client_get_bool (config.client,
-			GCONF_ROOT "automount_media", NULL);
-	config.autobrowse = gconf_client_get_bool (config.client,
-			GCONF_ROOT "autobrowse", NULL);
-	config.autorun = gconf_client_get_bool (config.client,
-			GCONF_ROOT "autorun", NULL);
-	config.autoplay_cda = gconf_client_get_bool (config.client,
-			GCONF_ROOT "autoplay_cda", NULL);
-	config.autoplay_cda_command =
-			gconf_client_get_string (config.client,
-			GCONF_ROOT "autoplay_cda_command", NULL);
-	config.autoburn_cdr =
-			gconf_client_get_bool (config.client,
-			GCONF_ROOT "autoburn_cdr", NULL);
-	config.autoburn_cdr_command =
-			gconf_client_get_string (config.client,
-			GCONF_ROOT "autoburn_cdr_command", NULL);
-	config.autoplay_dvd = gconf_client_get_bool (config.client,
-			GCONF_ROOT "autoplay_dvd", NULL);
-	config.autoplay_dvd_command =
-			gconf_client_get_string (config.client,
-			GCONF_ROOT "autoplay_dvd_command", NULL);
-	config.autophoto = gconf_client_get_bool (config.client,
-			GCONF_ROOT "autophoto", NULL);
-	config.autophoto_command =
-			gconf_client_get_string (config.client,
-			GCONF_ROOT "autophoto_command", NULL);
-
-	update_widgets ();
-}
-
-/*
- * config_change_cb - gconf call-back in response to gconf key change.  causes
- * us to reread our configuration.
- */
-static void
-config_change_cb (GConfClient *client __attribute__((__unused__)),
-		  guint id __attribute__((__unused__)),
-		  GConfEntry *entry __attribute__((__unused__)),
-		  gpointer data __attribute__((__unused__)))
+set_sensitivity (void)
 {
-	read_config ();
+	GtkWidget *hbox;
+	gboolean bool;
+	size_t i;
+	
+	/* this is the only strange one */
+	bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[AUTOMOUNT_MEDIA].widget)) ||
+		gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[AUTOMOUNT_DRIVES].widget));
+	gtk_widget_set_sensitive (gvm_settings[AUTORUN].widget, bool);
+	
+	/* checkboxes can enable/disable the ability to change other settings */
+	for (i = 0; i < G_N_ELEMENTS (gvm_settings); i++) {
+		if (gvm_settings[i].type == TYPE_BOOL) {
+			/* check if we have dependents */
+			char *name;
+			
+			name = strrchr (gvm_settings[i].key, '/') + 1;
+			name = g_strdup_printf ("%s_hbox", name);
+			if ((hbox = glade_xml_get_widget (xml, name))) {
+				bool = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[i].widget));
+				gtk_widget_set_sensitive (hbox, bool);
+			}
+			g_free (name);
+		}
+	}
 }
 
 /*
  * close_cb - gtk call-back on the "Close" button
  */
 static void
-close_cb (void)
+close_cb (GtkWidget *dialog,
+	  int response __attribute__((__unused__)),
+	  gpointer user_data __attribute__((__unused__)))
 {
 	gtk_widget_destroy (dialog);
 	gtk_main_quit ();
@@ -310,7 +192,7 @@
 set_icon (GtkImage *image, GnomeIconTheme *theme, const char *name)
 {
 	char *file;
-
+	
 	file = gnome_icon_theme_lookup_icon (theme, name, 48, NULL, NULL);
 	if (file) {
 		gtk_image_set_from_file (image, file);
@@ -318,6 +200,99 @@
 	}
 }
 
+static void
+show_props (void)
+{
+	GnomeIconTheme *icon_theme;
+	GtkWidget *icon;
+	char *filename;
+	size_t i;
+	
+	filename = g_concat_dir_and_file (GLADEDIR, GLADE_XML_FILE);
+	xml = glade_xml_new (filename, NULL, PACKAGE);
+	g_free (filename);
+	
+	if (xml == NULL) {
+		GtkWidget *dialog;
+		
+		dialog = gtk_message_dialog_new (NULL,
+						 0, GTK_MESSAGE_ERROR,
+						 GTK_BUTTONS_OK,
+						 _("Could not load the main "
+						   "interface"));
+		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+				 _("Please make sure that the "
+				   "volume manager is properly "
+				   "installed"));
+		
+		gtk_dialog_set_default_response (GTK_DIALOG (dialog),
+						 GTK_RESPONSE_OK);
+		gtk_dialog_run (GTK_DIALOG (dialog));
+		gtk_widget_destroy (dialog);
+		exit (EXIT_FAILURE);
+	}
+	
+	props = glade_xml_get_widget (xml, "dialog1");
+	g_signal_connect (props, "response", G_CALLBACK (close_cb), NULL);
+	
+	icon_theme = gnome_icon_theme_new ();
+	
+	icon = glade_xml_get_widget (xml, "removable_drives_image");
+	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-removable");
+	icon = glade_xml_get_widget (xml, "audio_cd_image");
+	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-cdrom-audio");
+	icon = glade_xml_get_widget (xml, "blank_cd_image");
+	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-disc-cdr");
+	icon = glade_xml_get_widget (xml, "dvd_video_image");
+	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-dvd");
+	icon = glade_xml_get_widget (xml, "digital_camera_image");
+	set_icon (GTK_IMAGE (icon), icon_theme, "applets-screenshooter");
+	
+	gtk_window_set_default_icon_name ("gnome-dev-cdrom");
+	
+	g_object_unref (icon_theme);
+	
+	gvm_settings_hash = g_hash_table_new (g_str_hash, g_str_equal);
+	for (i = 0; i < G_N_ELEMENTS (gvm_settings); i++) {
+		const char *name;
+		
+		g_hash_table_insert (gvm_settings_hash, (void *) gvm_settings[i].key, GINT_TO_POINTER (i));
+		
+		name = strrchr (gvm_settings[i].key, '/') + 1;
+		gvm_settings[i].widget = glade_xml_get_widget (xml, name);
+		if (gvm_settings[i].type == TYPE_STRING) {
+			GtkWidget *fileentry;
+			char *str;
+			
+			str = gconf_client_get_string (gconf, gvm_settings[i].key, NULL);
+			gtk_entry_set_text (GTK_ENTRY (gvm_settings[i].widget), str ? str : "");
+			g_free (str);
+			
+			str = g_strdup_printf ("%s_fileentry", name);
+			fileentry = gnome_file_entry_gnome_entry (GNOME_FILE_ENTRY (glade_xml_get_widget (xml, str)));
+			g_free (str);
+			
+			/* FIXME: do we really want to share the same history_id across CDR, CDA, and DVD command file entries? */
+			/*gnome_entry_set_history_id (GNOME_ENTRY (fileentry), "CD_CAPPLET_ID");*/
+			gtk_combo_set_case_sensitive (GTK_COMBO (fileentry), FALSE);
+			
+			g_signal_connect (gvm_settings[i].widget, "changed", G_CALLBACK (changed_cb), (void *) gvm_settings[i].key);
+		} else if (gvm_settings[i].type == TYPE_BOOL) {
+			gboolean bool;
+			
+			bool = gconf_client_get_bool (gconf, gvm_settings[i].key, NULL);
+			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gvm_settings[i].widget), bool);
+			g_signal_connect (gvm_settings[i].widget, "toggled", G_CALLBACK (toggled_cb), (void *) gvm_settings[i].key);
+		} else {
+			g_assert_not_reached ();
+		}
+	}
+	
+	set_sensitivity ();
+	
+	gtk_widget_show_all (props);
+}
+
 /** Check if HAL is running
  *
  * @return			TRUE if HAL is running and working.
@@ -331,26 +306,25 @@
 	int nr;
 	DBusError error;
 	DBusConnection *conn;
-
-	ctx = libhal_ctx_new ();
-	if (!ctx)
+	
+	if (!(ctx = libhal_ctx_new ()))
 		return FALSE;
-
+	
 	dbus_error_init (&error);
-
+	
 	conn = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
 	if (dbus_error_is_set (&error)) {
 		dbus_error_free (&error);
 		return FALSE;
 	}
-
+	
 	libhal_ctx_set_dbus_connection (ctx, conn);
-
-	if(!libhal_ctx_init (ctx, &error)) {
+	
+	if (!libhal_ctx_init (ctx, &error)) {
 		dbus_error_free (&error);
 		return FALSE;
 	}
-
+	
 	/*
 	 * Do something to ping the HAL daemon - the above functions will
 	 * succeed even if hald is not running, so long as DBUS is.  But we
@@ -365,30 +339,84 @@
 		return FALSE;
 	}
 	libhal_free_string_array (devices);
-
+	
 	libhal_ctx_shutdown (ctx, NULL);
 	libhal_ctx_free (ctx);
 	return TRUE;
 }
 
-#define GLADE_XML_FILE	"gnome-volume-properties.glade"
+/*
+ * check_clipboard - check if the CLIPBOARD_NAME clipboard is available
+ *
+ * Returns TRUE if the CLIPBOARD_NAME clipboard is out there and FALSE
+ * otherwise
+ */
+static gboolean
+check_clipboard (void)
+{
+	Atom clipboard_atom = gdk_x11_get_xatom_by_name (CLIPBOARD_NAME);
+
+	return XGetSelectionOwner (GDK_DISPLAY (), clipboard_atom) != None;
+}
 
 /*
- * init_capplet - initialize this little beast.
+ * check_daemon - check if the daemon itself is running. if not, and if we
+ * have configuration options set that would make it worthwhile to run, run
+ * it.
  */
 static void
-init_capplet (void)
+check_daemon (void)
 {
-	GnomeIconTheme *icon_theme;
-	GtkWidget *icon;
-	GladeXML *xml;
-	gchar *glade_file;
-	char *file;
+	gboolean need_daemon = FALSE;
+	GError *error = NULL;
+	char *argv[2];
+	size_t i;
+	
+	for (i = 0; !need_daemon && i < G_N_ELEMENTS (gvm_settings); i++) {
+		if (gvm_settings[i].need_daemon)
+			need_daemon = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gvm_settings[i].widget));
+	}
+	
+	if (!need_daemon || check_clipboard ()) 
+		return;
+	
+	argv[0] = BINDIR "/gnome-volume-manager";
+	argv[1] = NULL;
+	g_spawn_async (g_get_home_dir (), argv, NULL, 0, NULL,
+			NULL, NULL, &error);
+	
+	if (error) {
+		GtkWidget *message = gtk_message_dialog_new
+			(GTK_WINDOW (props), GTK_DIALOG_DESTROY_WITH_PARENT,
+			 GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+			 _("Error starting gnome-volume-manager daemon:\n%s"),
+			 error->message);
+		
+		gtk_dialog_run (GTK_DIALOG (message));
+		
+		g_error_free (error);
+		
+		exit (EXIT_FAILURE);
+	}
+}
 
+
+int
+main (int argc, char **argv)
+{
+	gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
+			    GNOME_PARAM_NONE);
+	
+	glade_gnome_init ();
+	
+	bindtextdomain (PACKAGE, GNOMELOCALEDIR);
+	bind_textdomain_codeset (PACKAGE, "UTF-8");
+	textdomain (PACKAGE);
+	
 	/* bail out now if hald is not even running */
 	if (!check_if_hal_is_running ()) {
 		GtkWidget *dialog;
-
+		
 		dialog = gtk_message_dialog_new (NULL,
 						 0, GTK_MESSAGE_ERROR,
 						 GTK_BUTTONS_OK,
@@ -397,159 +425,26 @@
 							  _("The \"hald\" service is required but not currently "
 							    "running. Enable the service and rerun this applet, "
 							    "or contact your system administrator."));
-
+		
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 		exit (EXIT_FAILURE);
 	}
-
-	config.client = gconf_client_get_default ();
-	gconf_client_add_dir (config.client, GCONF_ROOT_SANS_SLASH,
+	
+	gconf = gconf_client_get_default ();
+	gconf_client_add_dir (gconf, GCONF_ROOT_SANS_SLASH,
 			      GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-	gconf_client_notify_add (config.client, GCONF_ROOT_SANS_SLASH,
-				 config_change_cb, NULL, NULL, NULL);
-
-	glade_file = g_concat_dir_and_file (GLADEDIR, GLADE_XML_FILE);
-	xml = glade_xml_new (glade_file, NULL, PACKAGE);
-	g_free (glade_file);
-
-	if (xml == NULL) {
-		dialog = gtk_message_dialog_new (NULL,
-						 0, GTK_MESSAGE_ERROR,
-						 GTK_BUTTONS_OK,
-						 _("Could not load the main "
-						   "interface"));
-		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-				 _("Please make sure that the "
-				   "volume manager is properly "
-				   "installed"));
-
-		gtk_dialog_set_default_response (GTK_DIALOG (dialog),
-						 GTK_RESPONSE_OK);
-		gtk_dialog_run (GTK_DIALOG (dialog));
-		gtk_widget_destroy (dialog);
-		exit (EXIT_FAILURE);
-	}
-
-	dialog = glade_xml_get_widget (xml, "dialog1");
-
-	icon_theme = gnome_icon_theme_new ();
-
-	icon = glade_xml_get_widget (xml, "removable_drives_image");
-	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-removable");
-	icon = glade_xml_get_widget (xml, "audio_cd_image");
-	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-cdrom-audio");
-	icon = glade_xml_get_widget (xml, "blank_cd_image");
-	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-disc-cdr");
-	icon = glade_xml_get_widget (xml, "dvd_video_image");
-	set_icon (GTK_IMAGE (icon), icon_theme, "gnome-dev-dvd");
-	icon = glade_xml_get_widget (xml, "digital_camera_image");
-	set_icon (GTK_IMAGE (icon), icon_theme, "applets-screenshooter");
-
-	gtk_window_set_default_icon_name ("gnome-dev-cdrom");
-
-	g_object_unref (icon_theme);
-
-	automount_drives_cb = glade_xml_get_widget (xml, "automount_drives_cb");
-	automount_media_cb = glade_xml_get_widget (xml, "automount_media_cb");
-	autobrowse_cb = glade_xml_get_widget (xml, "autobrowse_cb");
-	autorun_cb = glade_xml_get_widget (xml, "autorun_cb");
-
-	autoplay_cda_cb = glade_xml_get_widget (xml, "autoplay_cda_cb");
-	command_cda_entry = glade_xml_get_widget (xml, "command_cda_entry");
-	command_cda_fileentry = gnome_file_entry_gnome_entry (GNOME_FILE_ENTRY
-			(glade_xml_get_widget (xml, "command_cda_fileentry")));
-	command_cda_hbox = glade_xml_get_widget (xml, "command_cda_hbox");
-
-	gnome_entry_set_history_id (GNOME_ENTRY (command_cda_fileentry),
-				    "CD_CAPPLET_ID");
-	gtk_combo_set_case_sensitive (GTK_COMBO (command_cda_fileentry),
-				      FALSE);
-
-	autoplay_dvd_cb = glade_xml_get_widget (xml, "autoplay_dvd_cb");
-	command_dvd_entry = glade_xml_get_widget (xml, "command_dvd_entry");
-	command_dvd_fileentry = gnome_file_entry_gnome_entry (GNOME_FILE_ENTRY
-			(glade_xml_get_widget (xml, "command_dvd_fileentry")));
-	command_dvd_hbox = glade_xml_get_widget (xml, "command_dvd_hbox");
-	gnome_entry_set_history_id (GNOME_ENTRY (command_dvd_fileentry),
-			"CD_CAPPLET_ID");
-	gtk_combo_set_case_sensitive (GTK_COMBO (command_dvd_fileentry),
-				      FALSE);
-
-	autoburn_cdr_cb = glade_xml_get_widget (xml, "autoburn_cdr_cb");
-	command_cdr_entry = glade_xml_get_widget (xml, "command_cdr_entry");
-	command_cdr_fileentry = gnome_file_entry_gnome_entry (GNOME_FILE_ENTRY
-			(glade_xml_get_widget (xml, "command_cdr_fileentry")));
-	command_cdr_hbox = glade_xml_get_widget (xml, "command_cdr_hbox");
-	gnome_entry_set_history_id (GNOME_ENTRY (command_cdr_fileentry),
-			"CD_CAPPLET_ID");
-	gtk_combo_set_case_sensitive (GTK_COMBO (command_cdr_fileentry),
-			FALSE);
-	autophoto_cb = glade_xml_get_widget (xml, "autophoto_cb");
-	command_photo_entry = glade_xml_get_widget (xml, "command_photo_entry");
-	command_photo_fileentry = gnome_file_entry_gnome_entry
-			(GNOME_FILE_ENTRY (glade_xml_get_widget (xml,
-			"command_photo_fileentry")));
-	command_photo_hbox = glade_xml_get_widget (xml, "command_photo_hbox");
-	gnome_entry_set_history_id (GNOME_ENTRY (command_photo_fileentry),
-			"CD_CAPPLET_ID");
-	gtk_combo_set_case_sensitive (GTK_COMBO (command_photo_fileentry),
-			FALSE);
-
-	read_config ();
-
-	gtk_signal_connect (GTK_OBJECT (automount_drives_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (automount_media_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (autobrowse_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (autorun_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-
-	gtk_signal_connect (GTK_OBJECT (autoplay_cda_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (command_cda_entry), "changed",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-
-	gtk_signal_connect (GTK_OBJECT (autoburn_cdr_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (command_cdr_entry), "changed",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-
-	gtk_signal_connect (GTK_OBJECT (autoplay_dvd_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (command_dvd_entry), "changed",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-
-	gtk_signal_connect (GTK_OBJECT (autophoto_cb), "toggled",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);
-	gtk_signal_connect (GTK_OBJECT (command_photo_entry), "changed",
-			    GTK_SIGNAL_FUNC (signal_response), NULL);	
-
-	gtk_widget_show_all (dialog);
-	gtk_signal_connect (GTK_OBJECT (dialog), "response",
-			    GTK_SIGNAL_FUNC (close_cb), NULL);
-
+	gconf_client_notify_add (gconf, GCONF_ROOT_SANS_SLASH,
+				 gconf_changed_cb, NULL, NULL, NULL);
+	
+	show_props ();
 	check_daemon ();
-}
-
-int
-main (int argc, char *argv[])
-{
-
-	gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE, argc, argv,
-			    GNOME_PARAM_NONE);
-
-	glade_gnome_init ();
-
-	bindtextdomain(PACKAGE, GNOMELOCALEDIR);
-	bind_textdomain_codeset(PACKAGE, "UTF-8");
-	textdomain(PACKAGE);
-
-	init_capplet ();
-
+	
 	gtk_main ();
-
+	
+	g_hash_table_destroy (gvm_settings_hash);
+	g_object_unref (gconf);
+	g_object_unref (xml);
+	
 	return 0;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]