[brasero] Don't store some settings with GConf anymore (like window size, position of widgets, ...) but in a n



commit 8e5e403ae9223eb283201c1fa01b038329ce1e6e
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Fri Oct 23 10:58:52 2009 +0200

    Don't store some settings with GConf anymore (like window size, position of widgets, ...) but in a new BraseroSetting object that saves and loads them to and from a GKeyFile

 data/brasero.schemas.in     |  120 ---------
 src/Makefile.am             |    4 +-
 src/brasero-app.c           |  253 ++++--------------
 src/brasero-data-disc.c     |   40 ++--
 src/brasero-file-chooser.c  |   43 ++--
 src/brasero-filter-option.h |    2 -
 src/brasero-layout.c        |  516 ++++++------------------------------
 src/brasero-player-bacon.c  |   25 +-
 src/brasero-player.c        |   72 +++---
 src/brasero-playlist.c      |    9 -
 src/brasero-preview.h       |    2 -
 src/brasero-project.c       |   33 +--
 src/brasero-search-entry.c  |  255 +++++++-----------
 src/brasero-setting.c       |  611 +++++++++++++++++++++++++++++++++++++++++++
 src/brasero-setting.h       |  106 ++++++++
 src/brasero-xsession.c      |    3 -
 src/main.c                  |    2 +
 17 files changed, 1041 insertions(+), 1055 deletions(-)
---
diff --git a/data/brasero.schemas.in b/data/brasero.schemas.in
index a5ddb53..152bca6 100644
--- a/data/brasero.schemas.in
+++ b/data/brasero.schemas.in
@@ -95,66 +95,6 @@
       </schema> 
 
       <schema>
-        <key>/schemas/apps/brasero/display/sidepane</key>
-	<applyto>/apps/brasero/display/sidepane</applyto>
-	<owner>brasero</owner>
-	<type>bool</type>
-	<default>false</default>
-	<locale name="C">
-	  <short>Enable side pane</short>
-	  <long>Whether to display a side pane. Set to true to use it.</long>
-	</locale>
-       </schema>
-
-      <schema>
-        <key>/schemas/apps/brasero/display/audio_pane</key>
-	<applyto>/apps/brasero/display/audio_pane</applyto>
-	<owner>brasero</owner>
-	<type>string</type>
-	<default>Chooser</default>
-	<locale name="C">
-	  <short>Pane to display audio projects</short>
-	  <long>The pane to display with audio projects. It should be one of the following: "Chooser", "Search" or "Playlist".</long>
-	</locale>
-       </schema>
-
-       <schema>
-        <key>/schemas/apps/brasero/display/data_pane</key>
-	<applyto>/apps/brasero/display/data_pane</applyto>
-	<owner>brasero</owner>
-	<type>string</type>
-	<default>Chooser</default>
-	<locale name="C">
-	  <short>Pane to display data projects</short>
-	  <long>The pane to display with data projects. It should be one of the following: "Chooser" or "Search".</long>
-	</locale>
-       </schema>
-
-       <schema>
-        <key>/schemas/apps/brasero/display/video_pane</key>
-	<applyto>/apps/brasero/display/video_pane</applyto>
-	<owner>brasero</owner>
-	<type>string</type>
-	<default>Chooser</default>
-	<locale name="C">
-	  <short>Pane to display video projects</short>
-	  <long>The pane to display with video projects. It should be one of the following: "Chooser", "Search" or "Playlist".</long>
-	</locale>
-       </schema>
-
-       <schema>
-        <key>/schemas/apps/brasero/display/layout</key>
-	<applyto>/apps/brasero/display/layout</applyto>
-	<owner>brasero</owner>
-	<type>int</type>
-	<default>0</default>
-	<locale name="C">
-	  <short>Layout of UI</short>
-	  <long>This key sets where the project pane should be (0 = on the right, 1 = on the left, 2 = at the top, 3 = at the bottom)</long>
-	</locale>
-       </schema>
-
-      <schema>
         <key>/schemas/apps/brasero/display/viewer</key>
 	<applyto>/apps/brasero/display/viewer</applyto>
 	<owner>brasero</owner>
@@ -166,54 +106,6 @@
 	</locale>
        </schema>
 
-        <schema>
-        <key>/schemas/apps/brasero/display/image_width</key>
-	<applyto>/apps/brasero/display/image_width</applyto>
-	<owner>brasero</owner>
-	<type>int</type>
-	<default>120</default>
-	<locale name="C">
-	  <short>Width for image preview</short>
-	  <long>Default width for image preview.</long>
-	</locale>
-       </schema>
-
-      <schema>
-        <key>/schemas/apps/brasero/display/image_height</key>
-	<applyto>/apps/brasero/display/image_height</applyto>
-	<owner>brasero</owner>
-	<type>int</type>
-	<default>90</default>
-	<locale name="C">
-	  <short>Height of image preview</short>
-	  <long>Default height for image preview.</long>
-	</locale>
-       </schema>
-
-        <schema>
-        <key>/schemas/apps/brasero/display/video_width</key>
-	<applyto>/apps/brasero/display/video_width</applyto>
-	<owner>brasero</owner>
-	<type>int</type>
-	<default>120</default>
-	<locale name="C">
-	  <short>Width for video preview</short>
-	  <long>Default width for video preview.</long>
-	</locale>
-       </schema>
-
-      <schema>
-        <key>/schemas/apps/brasero/display/video_height</key>
-	<applyto>/apps/brasero/display/video_height</applyto>
-	<owner>brasero</owner>
-	<type>int</type>
-	<default>90</default>
-	<locale name="C">
-	  <short>Height for video preview</short>
-	  <long>Default height for video preview.</long>
-	</locale>
-       </schema>
-
       <schema>
         <key>/schemas/apps/brasero/filter/hidden</key>
 	<applyto>/apps/brasero/filter/hidden</applyto>
@@ -250,17 +142,5 @@
 	</locale>
        </schema>
 
-      <schema>
-        <key>/schemas/apps/brasero/filter/notify</key>
-	<applyto>/apps/brasero/filter/notify</applyto>
-	<owner>brasero</owner>
-	<type>bool</type>
-	<default>true</default>
-	<locale name="C">
-	  <short>Should brasero notify when files are filtered</short>
-	  <long>Should brasero notify when files are filtered. Set to true, brasero will display the notification.</long>
-	</locale>
-       </schema>
-
   </schemalist>
 </gconfschemafile>
diff --git a/src/Makefile.am b/src/Makefile.am
index 80baeab..90b1e0e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -123,7 +123,9 @@ brasero_SOURCES = \
 	eggsmclient.c        \
 	eggsmclient.h        \
 	eggsmclient-private.h        \
-	eggsmclient-xsmp.c
+	eggsmclient-xsmp.c        \
+	brasero-setting.h        \
+	brasero-setting.c
 
 brasero_LDADD =						\
 	$(top_builddir)/libbrasero-media/libbrasero-media.la	\
diff --git a/src/brasero-app.c b/src/brasero-app.c
index be55d40..62337b2 100644
--- a/src/brasero-app.c
+++ b/src/brasero-app.c
@@ -30,16 +30,12 @@
 
 #include <gtk/gtk.h>
 
-#include <libxml/xmlerror.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/parser.h>
-#include <libxml/xmlstring.h>
-
 #include <unique/unique.h>
 
 #include "brasero-misc.h"
 
 #include "brasero-app.h"
+#include "brasero-setting.h"
 #include "brasero-blank-dialog.h"
 #include "brasero-sum-dialog.h"
 #include "brasero-eject-dialog.h"
@@ -66,6 +62,8 @@
 typedef struct _BraseroAppPrivate BraseroAppPrivate;
 struct _BraseroAppPrivate
 {
+	BraseroSetting *setting;
+
 	GdkWindow *parent;
 
 	GtkWidget *mainwin;
@@ -84,12 +82,9 @@ struct _BraseroAppPrivate
 
 	guint tooltip_ctx;
 
-	gint width;
-	gint height;
-
 	gchar *saved_contents;
 
-	guint is_maximised:1;
+	guint is_maximized:1;
 	guint mainwin_running:1;
 };
 
@@ -98,10 +93,6 @@ struct _BraseroAppPrivate
 
 G_DEFINE_TYPE (BraseroApp, brasero_app, G_TYPE_OBJECT);
 
-
-#define SESSION_VERSION "0.1"
-#define BRASERO_SESSION_TMP_SESSION_PATH	"brasero.session"
-
 /**
  * Menus and toolbar
  */
@@ -198,17 +189,10 @@ brasero_app_get_path (const gchar *name)
 static gboolean
 brasero_app_load_window_state (BraseroApp *app)
 {
-	gchar *height_str = NULL;
-	gchar *width_str = NULL;
-	gchar *state_str = NULL;
-	gchar *version = NULL;
-	gint height;
 	gint width;
+	gint height;
 	gint state = 0;
-
-	gchar *session_path;
-	xmlNodePtr item;
-	xmlDocPtr session = NULL;
+	gpointer value;
 
 	GdkScreen *screen;
 	GdkRectangle rect;
@@ -223,98 +207,30 @@ brasero_app_load_window_state (BraseroApp *app)
 	screen = gtk_window_get_screen (GTK_WINDOW (priv->mainwin));
 	monitor = gdk_screen_get_monitor_at_window (screen, GTK_WIDGET (priv->mainwin)->window);
 	gdk_screen_get_monitor_geometry (screen, monitor, &rect);
-	width = rect.width / 100 * 85;
-	height = rect.height / 100 * 85;
-
-	session_path = brasero_app_get_path (BRASERO_SESSION_TMP_SESSION_PATH);
-	if (!session_path)
-		goto end;
-
-	session = xmlParseFile (session_path);
-	g_free (session_path);
-
-	if (!session)
-		goto end;
-
-	item = xmlDocGetRootElement (session);
-	if (!item)
-		goto end;
-
-	if (xmlStrcmp (item->name, (const xmlChar *) "Session") || item->next)
-		goto end;
-
-	item = item->children;
-	while (item) {
-		if (!xmlStrcmp (item->name, (const xmlChar *) "version")) {
-			if (version)
-				goto end;
-
-			version = (char *) xmlNodeListGetString (session,
-								 item->xmlChildrenNode,
-								 1);
-		}
-		else if (!xmlStrcmp (item->name, (const xmlChar *) "width")) {
-			if (width_str)
-				goto end;
-
-			width_str = (char *) xmlNodeListGetString (session,
-								   item->xmlChildrenNode,
-								   1);
-		}
-		else if (!xmlStrcmp (item->name, (const xmlChar *) "height")) {
-			if (height_str)
-				goto end;
-
-			height_str = (char *) xmlNodeListGetString (session,
-								    item->xmlChildrenNode,
-								    1);
-		}
-		else if (!xmlStrcmp (item->name, (const xmlChar *) "state")) {
-			if (state_str)
-				goto end;
-
-			state_str = (char *) xmlNodeListGetString (session,
-								   item->xmlChildrenNode,
-								   1);
-		}
-		else if (item->type == XML_ELEMENT_NODE)
-			goto end;
-
-		item = item->next;
-	}
-
-	if (!version || strcmp (version, SESSION_VERSION))
-		goto end;
-
-	/* restore the window state */
-	if (height_str)
-		height = (int) g_strtod (height_str, NULL);
-
-	if (width_str)
-		width = (int) g_strtod (width_str, NULL);
-
-	if (state_str)
-		state = (int) g_strtod (state_str, NULL);
-
-end:
-	if (height_str)
-		g_free (height_str);
 
-	if (width_str)
-		g_free (width_str);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_WIN_WIDTH,
+	                           &value);
+	width = GPOINTER_TO_INT (value);
 
-	if (state_str)
-		g_free (state_str);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_WIN_HEIGHT,
+	                           &value);
+	height = GPOINTER_TO_INT (value);
 
-	if (version)
-		g_free (version);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_WIN_MAXIMIZED,
+	                           &value);
+	state = GPOINTER_TO_INT (value);
 
-	xmlFreeDoc (session);
-
-	if (width && height)
+	if (width > 0 && height > 0)
 		gtk_window_resize (GTK_WINDOW (priv->mainwin),
 				   width,
 				   height);
+	else
+		gtk_window_resize (GTK_WINDOW (priv->mainwin),
+		                   rect.width / 100 *85,
+		                   rect.height / 100 * 85);
 
 	if (state)
 		gtk_window_maximize (GTK_WINDOW (priv->mainwin));
@@ -322,86 +238,6 @@ end:
 	return TRUE;
 }
 
-void
-brasero_app_save_window_state (BraseroApp *app)
-{
-	gint success;
-	gchar *session_path;
-	xmlTextWriter *session;
-	BraseroAppPrivate *priv;
-
-	priv = BRASERO_APP_PRIVATE (app);
-
-	/* now save the state of the window */
-	session_path = brasero_app_get_path (BRASERO_SESSION_TMP_SESSION_PATH);
-	if (!session_path)
-		return;
-
-	/* write information */
-	session = xmlNewTextWriterFilename (session_path, 0);
-	if (!session) {
-		g_free (session_path);
-		return;
-	}
-
-	xmlTextWriterSetIndent (session, 1);
-	xmlTextWriterSetIndentString (session, (xmlChar *) "\t");
-
-	success = xmlTextWriterStartDocument (session,
-					      NULL,
-					      NULL,
-					      NULL);
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterStartElement (session,
-					     (xmlChar *) "Session");
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterWriteElement (session,
-					     (xmlChar *) "version",
-					     (xmlChar *) SESSION_VERSION);
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterWriteFormatElement (session,
-						   (xmlChar *) "width",
-						   "%i",
-						   priv->width);
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterWriteFormatElement (session,
-						   (xmlChar *) "height",
-						   "%i",
-						   priv->height);
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterWriteFormatElement (session,
-						   (xmlChar *) "state",
-						   "%i",
-						   priv->is_maximised);
-	if (success < 0)
-		goto error;
-
-	success = xmlTextWriterEndElement (session);
-	if (success < 0)
-		goto error;
-
-	xmlTextWriterEndDocument (session);
-	xmlFreeTextWriter (session);
-	g_free (session_path);
-	return;
-
-error:
-	xmlTextWriterEndDocument (session);
-	xmlFreeTextWriter (session);
-	g_remove (session_path);
-	g_free (session_path);
-}
-
 /**
  * returns FALSE when nothing prevents the shutdown
  * returns TRUE when shutdown should be delayed
@@ -640,7 +476,6 @@ on_delete_cb (GtkWidget *window, GdkEvent *event, BraseroApp *app)
 	if (brasero_app_save_contents (app, TRUE))
 		return TRUE;
 
-	brasero_app_save_window_state (app);
 	return FALSE;
 }
 
@@ -654,10 +489,8 @@ on_exit_cb (GtkAction *action, BraseroApp *app)
 	if (brasero_app_save_contents (app, TRUE))
 		return;
 
-	if (priv->mainwin) {
-		brasero_app_save_window_state (app);
+	if (priv->mainwin)
 		gtk_widget_destroy (GTK_WIDGET (priv->mainwin));
-	}
 }
 
 gboolean
@@ -1109,10 +942,18 @@ on_window_state_changed_cb (GtkWidget *widget,
 
 	priv = BRASERO_APP_PRIVATE (app);
 
-	if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
-		priv->is_maximised = 1;
-	else
-		priv->is_maximised = 0;
+	if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) {
+		priv->is_maximized = 1;
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_WIN_MAXIMIZED,
+		                           GINT_TO_POINTER (1));
+	}
+	else {
+		priv->is_maximized = 0;
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_WIN_MAXIMIZED,
+		                           GINT_TO_POINTER (0));
+	}
 
 	return FALSE;
 }
@@ -1126,9 +967,13 @@ on_configure_event_cb (GtkWidget *widget,
 
 	priv = BRASERO_APP_PRIVATE (app);
 
-	if (!priv->is_maximised) {
-		priv->width = event->width;
-		priv->height = event->height;
+	if (!priv->is_maximized) {
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_WIN_WIDTH,
+		                           GINT_TO_POINTER (event->width));
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_WIN_HEIGHT,
+		                           GINT_TO_POINTER (event->height));
 	}
 
 	return FALSE;
@@ -1701,11 +1546,15 @@ brasero_app_init (BraseroApp *object)
 {
 	BraseroAppPrivate *priv;
 
+	priv = BRASERO_APP_PRIVATE (object);
+
+	/* Load settings */
+	priv->setting = brasero_setting_get_default ();
+	brasero_setting_load (priv->setting);
+
 	/* Connect to session */
 	brasero_session_connect (object);
 
-	priv = BRASERO_APP_PRIVATE (object);
-
 	g_set_application_name (_("Brasero Disc Burner"));
 	gtk_window_set_default_icon_name ("brasero");
 }
@@ -1717,6 +1566,10 @@ brasero_app_finalize (GObject *object)
 
 	priv = BRASERO_APP_PRIVATE (object);
 
+	brasero_setting_save (priv->setting);
+	g_object_unref (priv->setting);
+	priv->setting = NULL;
+
 	brasero_session_disconnect (BRASERO_APP (object));
 
 	if (priv->saved_contents) {
diff --git a/src/brasero-data-disc.c b/src/brasero-data-disc.c
index ff3d67b..e8d8cc5 100644
--- a/src/brasero-data-disc.c
+++ b/src/brasero-data-disc.c
@@ -33,8 +33,6 @@
 
 #include <gtk/gtk.h>
 
-#include <gconf/gconf-client.h>
-
 #include "brasero-misc.h"
 
 #include "eggtreemultidnd.h"
@@ -60,7 +58,7 @@
 #include "brasero-session.h"
 
 #include "brasero-volume.h"
-
+#include "brasero-setting.h"
 
 typedef struct _BraseroDataDiscPrivate BraseroDataDiscPrivate;
 struct _BraseroDataDiscPrivate
@@ -164,8 +162,6 @@ enum {
 	TARGET_URIS_LIST,
 };
 
-#define GCONF_COLUMN_KEY				"/apps/brasero/display/data_column"
-#define GCONF_COLUMN_ORDER_KEY		"/apps/brasero/display/data_sort_order"
 
 static GtkTargetEntry ntables_cd [] = {
 	{BRASERO_DND_TARGET_DATA_TRACK_REFERENCE_LIST, GTK_TARGET_SAME_WIDGET, TREE_MODEL_ROW},
@@ -1307,20 +1303,16 @@ brasero_data_disc_sort_column_changed (GtkTreeSortable *sortable,
                                        BraseroDataDisc *disc)
 {
 	GtkSortType sort_order;
-	GConfClient *client;
 	gint sort_column;
 
 	gtk_tree_sortable_get_sort_column_id (sortable, &sort_column, &sort_order);
 
-	client = gconf_client_get_default ();
-	gconf_client_set_int (client,
-	                      GCONF_COLUMN_KEY,
-	                      sort_column,
-	                      NULL);
-	gconf_client_set_int (client,
-	                      GCONF_COLUMN_ORDER_KEY,
-	                      sort_order,
-	                      NULL);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DATA_DISC_COLUMN,
+	                           GINT_TO_POINTER (sort_column));
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DATA_DISC_COLUMN_ORDER,
+	                           GINT_TO_POINTER (sort_order));
 }
 
 static BraseroDiscResult
@@ -1331,21 +1323,22 @@ brasero_data_disc_set_track (BraseroDataDisc *disc,
 	BraseroDataDiscPrivate *priv;
 	BraseroStatus *status;
 	GtkWidget *message;
-	GConfClient *client;
 	gint sort_column;
+	gpointer value;
 	gint sort_order;
 
 	priv = BRASERO_DATA_DISC_PRIVATE (disc);
 
 	priv->project = g_object_ref (track);
 
-	client = gconf_client_get_default ();
-	sort_column = gconf_client_get_int (client,
-	                                    GCONF_COLUMN_KEY,
-	                                    NULL);
-	sort_order = gconf_client_get_int (client,
-	                                   GCONF_COLUMN_ORDER_KEY,
-	                                   NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DATA_DISC_COLUMN,
+	                           &value);
+	sort_column = GPOINTER_TO_INT (value);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DATA_DISC_COLUMN_ORDER,
+	                           &value);
+	sort_order = GPOINTER_TO_INT (value);
 
 	if ((sort_column == BRASERO_DATA_TREE_MODEL_SIZE
 	||   sort_column == BRASERO_DATA_TREE_MODEL_MIME_DESC
@@ -1355,7 +1348,6 @@ brasero_data_disc_set_track (BraseroDataDisc *disc,
 		gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (track),
 						      sort_column,
 						      sort_order);
-	g_object_unref (client);
 
 	/* filtered files */
 	priv->filter = brasero_file_filtered_new (priv->project);
diff --git a/src/brasero-file-chooser.c b/src/brasero-file-chooser.c
index 4820f3f..eab1d2c 100644
--- a/src/brasero-file-chooser.c
+++ b/src/brasero-file-chooser.c
@@ -36,10 +36,9 @@
 
 #include <gtk/gtk.h>
 
-#include <gconf/gconf-client.h>
-
 #include "eggtreemultidnd.h"
 
+#include "brasero-setting.h"
 #include "brasero-file-chooser.h"
 #include "brasero-uri-container.h"
 #include "brasero-layout-object.h"
@@ -68,10 +67,6 @@ struct BraseroFileChooserPrivate {
 
 static GObjectClass *parent_class = NULL;
 
-#define BRASERO_KEY_DISPLAY_FILE_CHOOSER_PERCENT "/apps/brasero/display/file_chooser_percent"
-#define BRASERO_KEY_DISPLAY_BRASERO_FILE_CHOOSER_PERCENT "/apps/brasero/display/file_brasero_chooser_percent"
-
-
 GType
 brasero_file_chooser_get_type ()
 {
@@ -133,18 +128,14 @@ static void
 brasero_file_chooser_paned_destroy (GObject *object,
                                                       gpointer NULL_data)
 {
-	gint percent;
-	GConfClient *client;
-
-	percent = GPOINTER_TO_INT (g_object_get_data (object, "position-percent"));
-
-	client = gconf_client_get_default ();
 	if (GPOINTER_TO_INT (g_object_get_data (object, "is-stock-file-chooser")))
-		gconf_client_set_int (client, BRASERO_KEY_DISPLAY_FILE_CHOOSER_PERCENT, percent, NULL);
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_STOCK_FILE_CHOOSER_PERCENT,
+		                           g_object_get_data (object, "position-percent"));
 	else
-		gconf_client_set_int (client, BRASERO_KEY_DISPLAY_BRASERO_FILE_CHOOSER_PERCENT, percent, NULL);
-
-	g_object_unref (client);
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_BRASERO_FILE_CHOOSER_PERCENT,
+		                           g_object_get_data (object, "position-percent"));
 }
 
 static void
@@ -152,24 +143,28 @@ brasero_file_chooser_paned_map_event (GtkWidget *widget,
                                       GdkEvent *event,
                                       gpointer NULL_data)
 {
-	gint percent;
 	gint position;
-	GConfClient *client;
+	gpointer percent;
 	GtkWidget *toplevel;
 
 	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (widget));
-	client = gconf_client_get_default ();
 	if (G_TYPE_FROM_INSTANCE (toplevel) == GTK_TYPE_FILE_CHOOSER_DIALOG) {
 		g_object_set_data (G_OBJECT (widget), "is-stock-file-chooser", GINT_TO_POINTER (1));
-		percent = gconf_client_get_int (client, BRASERO_KEY_DISPLAY_FILE_CHOOSER_PERCENT, NULL);
+		brasero_setting_get_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_STOCK_FILE_CHOOSER_PERCENT,
+		                           &percent);
 	}
 	else
-		percent = gconf_client_get_int (client, BRASERO_KEY_DISPLAY_BRASERO_FILE_CHOOSER_PERCENT, NULL);
+		brasero_setting_get_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_BRASERO_FILE_CHOOSER_PERCENT,
+		                           &percent);
 
-	if (percent < 0)
-		return;
+	if (GPOINTER_TO_INT (percent) < 0) {
+		/* No value so set something sane */
+		percent = GINT_TO_POINTER (30);
+	}
 
-	position = widget->allocation.width * percent / 100;
+	position = widget->allocation.width * GPOINTER_TO_INT (percent) / 100;
 	gtk_paned_set_position (GTK_PANED (widget), position);
 }
 
diff --git a/src/brasero-filter-option.h b/src/brasero-filter-option.h
index b67233c..cac3b8b 100644
--- a/src/brasero-filter-option.h
+++ b/src/brasero-filter-option.h
@@ -29,8 +29,6 @@
 
 G_BEGIN_DECLS
 
-#define BRASERO_FILTER_NOTIFY_KEY		"/apps/brasero/filter/notify"
-
 #define BRASERO_TYPE_FILTER_OPTION             (brasero_filter_option_get_type ())
 #define BRASERO_FILTER_OPTION(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_FILTER_OPTION, BraseroFilterOption))
 #define BRASERO_FILTER_OPTION_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_FILTER_OPTION, BraseroFilterOptionClass))
diff --git a/src/brasero-layout.c b/src/brasero-layout.c
index e14fc2b..2445041 100644
--- a/src/brasero-layout.c
+++ b/src/brasero-layout.c
@@ -35,8 +35,7 @@
 
 #include <gtk/gtk.h>
 
-#include <gconf/gconf-client.h>
-
+#include "brasero-setting.h"
 #include "brasero-layout.h"
 #include "brasero-preview.h"
 #include "brasero-project.h"
@@ -86,12 +85,6 @@ struct BraseroLayoutPrivate {
 	BraseroLayoutType ctx_type;
 	BraseroLayoutItem *active_item;
 
-	GConfClient *client;
-	gint radio_notify;
-	gint preview_notify;
-	gint layout_notify;
-	gint sidepane_notify;
-
 	GtkWidget *notebook;
 	GtkWidget *main_box;
 	GtkWidget *preview_pane;
@@ -144,17 +137,6 @@ const gchar description [] =
 	"</menubar>"
 	"</ui>";
 
-/* GCONF keys */
-#define BRASERO_KEY_DISPLAY_LAYOUT	"/apps/brasero/display/layout"
-#define BRASERO_KEY_DISPLAY_POSITION	"/apps/brasero/display/position"
-
-
-#define BRASERO_KEY_DISPLAY_DIR		"/apps/brasero/display/"
-#define BRASERO_KEY_SHOW_SIDEPANE	BRASERO_KEY_DISPLAY_DIR "sidepane"
-#define BRASERO_KEY_LAYOUT_AUDIO	BRASERO_KEY_DISPLAY_DIR "audio_pane"
-#define BRASERO_KEY_LAYOUT_DATA		BRASERO_KEY_DISPLAY_DIR "data_pane"
-#define BRASERO_KEY_LAYOUT_VIDEO	BRASERO_KEY_DISPLAY_DIR "video_pane"
-
 /* signals */
 typedef enum {
 	SIDEPANE_SIGNAL,
@@ -342,59 +324,30 @@ brasero_layout_preview_toggled_cb (GtkToggleAction *action, BraseroLayout *layou
 		gtk_widget_show (layout->priv->preview_pane);
 	else
 		gtk_widget_hide (layout->priv->preview_pane);
-	
-	/* we set the correct value in GConf */
-	gconf_client_set_bool (layout->priv->client,
-			       BRASERO_KEY_SHOW_PREVIEW,
-			       active,
-			       NULL);
-}
-
-static void
-brasero_layout_preview_changed_cb (GConfClient *client,
-				   guint cxn,
-				   GConfEntry *entry,
-				   gpointer data)
-{
-	BraseroLayout *layout;
-	GtkAction *action;
-	GConfValue *value;
-	gboolean active;
-
-	layout = BRASERO_LAYOUT (data);
-
-	value = gconf_entry_get_value (entry);
-	if (value->type != GCONF_VALUE_BOOL)
-		return;
-
-	active = gconf_value_get_bool (value);
-	action = gtk_action_group_get_action (layout->priv->action_group,
-					      BRASERO_LAYOUT_PREVIEW_ID);
-	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
 
-	if (active) {
-		brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), TRUE);
-		gtk_widget_show (layout->priv->preview_pane);
-	}
-	else {
-		brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), FALSE);
-		gtk_widget_hide (layout->priv->preview_pane);
-	}
+	brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), active);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SHOW_PREVIEW,
+	                           GINT_TO_POINTER (active));
 }
 
 void
 brasero_layout_add_preview (BraseroLayout *layout,
 			    GtkWidget *preview)
 {
+	gpointer value;
 	gboolean active;
-	GtkAction *action;
 	gchar *accelerator;
-	GError *error = NULL;
 	GtkToggleActionEntry entry;
 
 	layout->priv->preview_pane = preview;
 	brasero_layout_pack_preview (layout);
 
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SHOW_PREVIEW,
+	                           &value);
+	active = GPOINTER_TO_INT (value);
+
 	/* add menu entry in display */
 	accelerator = g_strdup ("F11");
 
@@ -403,7 +356,7 @@ brasero_layout_add_preview (BraseroLayout *layout,
 	entry.label = BRASERO_LAYOUT_PREVIEW_MENU;
 	entry.accelerator = accelerator;
 	entry.tooltip = BRASERO_LAYOUT_PREVIEW_TOOLTIP;
-	entry.is_active = FALSE;
+	entry.is_active = active;
 	entry.callback = G_CALLBACK (brasero_layout_preview_toggled_cb);
 
 	gtk_action_group_add_toggle_actions (layout->priv->action_group,
@@ -413,40 +366,12 @@ brasero_layout_add_preview (BraseroLayout *layout,
 	g_free (accelerator);
 
 	/* initializes the display */
-	active = gconf_client_get_bool (layout->priv->client,
-					BRASERO_KEY_SHOW_PREVIEW,
-					&error);
-	if (error) {
-		g_warning ("Can't access GConf key %s. This is probably harmless (first launch of brasero).\n", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
-
-	action = gtk_action_group_get_action (layout->priv->action_group, BRASERO_LAYOUT_PREVIEW_ID);
-	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
-
-	if (active) {
-		brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), TRUE);
+	if (active)
 		gtk_widget_show (layout->priv->preview_pane);
-	}
-	else {
-		brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), FALSE);
+	else
 		gtk_widget_hide (layout->priv->preview_pane);
-	}
 
-	if (!layout->priv->preview_notify)
-		layout->priv->preview_notify = gconf_client_notify_add (layout->priv->client,
-									BRASERO_KEY_SHOW_PREVIEW,
-									brasero_layout_preview_changed_cb,
-									layout,
-									NULL,
-									&error);
-
-	if (error) {
-		g_warning ("Could set notify for GConf key %s.\n", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
+	brasero_preview_set_enabled (BRASERO_PREVIEW (layout->priv->preview_pane), active);
 }
 
 /**************************** for the source panes *****************************/
@@ -551,166 +476,21 @@ brasero_layout_item_set_active (BraseroLayout *layout,
 }
 
 static void
-brasero_layout_show_sidepane_changed_cb (GConfClient *client,
-					 guint cxn,
-					 GConfEntry *entry,
-					 gpointer data)
-{
-	BraseroLayout *layout;
-	GtkAction *action;
-	GConfValue *value;
-	gboolean show;
-
-	value = gconf_entry_get_value (entry);
-	if (value->type != GCONF_VALUE_BOOL)
-		return;
-
-	show = gconf_value_get_bool (value);
-
-	layout = BRASERO_LAYOUT (data);
-
-	action = gtk_action_group_get_action (layout->priv->action_group, BRASERO_LAYOUT_NONE_ID);
-	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show);
-	brasero_layout_set_side_pane_visible (layout, show);
-}
-
-static void
-brasero_layout_displayed_item_changed_cb (GConfClient *client,
-					  guint cxn,
-					  GConfEntry *entry,
-					  gpointer data)
-{
-	BraseroLayout *layout;
-	GConfValue *value;
-	GtkTreeModel *model;
-	GtkAction *action;
-	GtkTreeIter iter;
-	const gchar *id;
-
-	layout = BRASERO_LAYOUT (data);
-
-	/* this is only called if the changed gconf key is the
-	 * one corresponding to the current type of layout */
-	if (!strcmp (entry->key, BRASERO_KEY_LAYOUT_AUDIO)
-	&&  layout->priv->ctx_type == BRASERO_LAYOUT_AUDIO)
-		return;
-
-	if (!strcmp (entry->key, BRASERO_KEY_LAYOUT_DATA)
-	&&  layout->priv->ctx_type == BRASERO_LAYOUT_DATA)
-		return;
-
-	if (!strcmp (entry->key, BRASERO_KEY_LAYOUT_VIDEO)
-	&&  layout->priv->ctx_type == BRASERO_LAYOUT_VIDEO)
-		return;
-
-	value = gconf_entry_get_value (entry);
-	if (value->type != GCONF_VALUE_STRING)
-		return;
-
-	id = gconf_value_get_string (value);
-
-	action = gtk_action_group_get_action (layout->priv->action_group, BRASERO_LAYOUT_NONE_ID);
-	if (!id || !strcmp (id, BRASERO_LAYOUT_NONE_ID)) {
-		/* nothing should be displayed */
-		gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
-		brasero_layout_set_side_pane_visible (layout, FALSE);
-		return;
-	}
-
-	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), FALSE);
-	model = gtk_combo_box_get_model (GTK_COMBO_BOX (layout->priv->combo));
-	model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
-
-	if (!gtk_tree_model_get_iter_first (model, &iter))
-		return;
-
-	do {
-		BraseroLayoutItem *item;
-
-		gtk_tree_model_get (model, &iter,
-				    ITEM_COL, &item,
-				    -1);
-		if (!strcmp (id, item->id))
-			brasero_layout_item_set_active (layout, item);
-	} while (gtk_tree_model_iter_next (model, &iter));
-}
-
-static void
 brasero_layout_save (BraseroLayout *layout,
 		     const gchar *id)
 {
-	GError *error = NULL;
-
-	/* update gconf value */
-	if (layout->priv->radio_notify) {
-		gconf_client_notify_remove (layout->priv->client,
-					    layout->priv->radio_notify);
-		layout->priv->radio_notify = 0;
-	}
-
-	if (layout->priv->ctx_type == BRASERO_LAYOUT_AUDIO) {
-		gconf_client_set_string (layout->priv->client,
-					 BRASERO_KEY_LAYOUT_AUDIO,
-					 id,
-					 &error);
-
-		if (error) {
-			g_warning ("Can't set GConf key %s. \n", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_AUDIO,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-	}
-	else if (layout->priv->ctx_type == BRASERO_LAYOUT_DATA) {
-		gconf_client_set_string (layout->priv->client,
-					 BRASERO_KEY_LAYOUT_DATA,
-					 id,
-					 &error);
-
-		if (error) {
-			g_warning ("Can't set GConf key %s. \n", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_DATA,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-	}
-	else if (layout->priv->ctx_type == BRASERO_LAYOUT_VIDEO) {
-		gconf_client_set_string (layout->priv->client,
-					 BRASERO_KEY_LAYOUT_VIDEO,
-					 id,
-					 &error);
-
-		if (error) {
-			g_warning ("Can't set GConf key %s. \n", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_VIDEO,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-	}
-
-	if (error) {
-		g_warning ("Can't set GConf notify on key %s. \n", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
+	if (layout->priv->ctx_type == BRASERO_LAYOUT_AUDIO)
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_AUDIO,
+		                           id);
+	else if (layout->priv->ctx_type == BRASERO_LAYOUT_DATA)
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_DATA,
+		                           id);
+	else if (layout->priv->ctx_type == BRASERO_LAYOUT_VIDEO)
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_VIDEO,
+		                           id);
 }
 
 void
@@ -848,19 +628,12 @@ brasero_layout_load (BraseroLayout *layout,
 		     BraseroLayoutType type)
 {
 	gchar *layout_id = NULL;
-	GError *error = NULL;
 	GtkTreeModel *model;
-	GtkAction *action;
 	gboolean sidepane;
+	GtkAction *action;
+	gpointer value;
 	GtkTreeIter iter;
 
-	/* remove GCONF notification if any */
-	if (layout->priv->radio_notify) {
-		gconf_client_notify_remove (layout->priv->client,
-					    layout->priv->radio_notify);
-		layout->priv->radio_notify = 0;
-	}
-
 	if (layout->priv->preview_pane)
 		brasero_preview_hide (BRASERO_PREVIEW (layout->priv->preview_pane));
 
@@ -872,52 +645,23 @@ brasero_layout_load (BraseroLayout *layout,
 	gtk_widget_show (GTK_WIDGET (layout));
 
 	/* takes care of other panes */
-	if (type == BRASERO_LAYOUT_AUDIO)
-		layout_id = gconf_client_get_string (layout->priv->client,
-						     BRASERO_KEY_LAYOUT_AUDIO,
-						     &error);
-	else if (type == BRASERO_LAYOUT_DATA)
-		layout_id = gconf_client_get_string (layout->priv->client,
-						     BRASERO_KEY_LAYOUT_DATA,
-						     &error);
-	else if (type == BRASERO_LAYOUT_VIDEO)
-		layout_id = gconf_client_get_string (layout->priv->client,
-						     BRASERO_KEY_LAYOUT_VIDEO,
-						     &error);
-
-	if (error) {
-		g_warning ("Can't access GConf key %s. This is probably harmless (first launch of brasero).\n", error->message);
-		g_error_free (error);
-		error = NULL;
+	if (type == BRASERO_LAYOUT_AUDIO) {
+		brasero_setting_get_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_AUDIO,
+		                           &value);
+		layout_id = value;
 	}
-
-	/* add new notify for the new */
-	if (type == BRASERO_LAYOUT_AUDIO)
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_AUDIO,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-	else if (type == BRASERO_LAYOUT_DATA)
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_DATA,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-	else if (type == BRASERO_LAYOUT_VIDEO)
-		layout->priv->radio_notify = gconf_client_notify_add (layout->priv->client,
-								      BRASERO_KEY_LAYOUT_VIDEO,
-								      brasero_layout_displayed_item_changed_cb,
-								      layout,
-								      NULL,
-								      &error);
-
-	if (error) {
-		g_warning ("Could not set notify for GConf key %s.\n", error->message);
-		g_error_free (error);
-		error = NULL;
+	else if (type == BRASERO_LAYOUT_DATA) {
+		brasero_setting_get_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_DATA,
+		                           &value);
+		layout_id = value;
+	}
+	else if (type == BRASERO_LAYOUT_VIDEO) {
+		brasero_setting_get_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_DISPLAY_LAYOUT_VIDEO,
+		                           &value);
+		layout_id = value;
 	}
 
 	/* even if we're not showing a side pane go through all items to make 
@@ -968,9 +712,10 @@ brasero_layout_load (BraseroLayout *layout,
 	}
 
 	/* hide or show side pane */
-	sidepane = gconf_client_get_bool (layout->priv->client,
-					  BRASERO_KEY_SHOW_SIDEPANE,
-					  NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SHOW_SIDEPANE,
+	                           &value);
+	sidepane = GPOINTER_TO_INT (value);
 
 	action = gtk_action_group_get_action (layout->priv->action_group, BRASERO_LAYOUT_NONE_ID);
 	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), sidepane);
@@ -982,10 +727,9 @@ brasero_layout_pane_moved_cb (GtkWidget *paned,
 			      GParamSpec *pspec,
 			      BraseroLayout *layout)
 {
-	gconf_client_set_int (layout->priv->client,
-			      BRASERO_KEY_DISPLAY_POSITION,
-			      gtk_paned_get_position (GTK_PANED (paned)),
-			      NULL);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DISPLAY_PROPORTION,
+	                           GINT_TO_POINTER (gtk_paned_get_position (GTK_PANED (paned))));
 }
 
 static void
@@ -1084,51 +828,6 @@ brasero_layout_change_type (BraseroLayout *layout,
 static void
 brasero_layout_HV_radio_button_toggled_cb (GtkRadioAction *radio,
 					   GtkRadioAction *current,
-					   BraseroLayout *layout);
-
-static void
-brasero_layout_type_changed_cb (GConfClient *client,
-				guint cxn,
-				GConfEntry *entry,
-				gpointer data)
-{
-	GSList *iter;
-	GSList *radios;
-	GtkAction *action;
-	GConfValue *value;
-	BraseroLayoutType layout_type;
-	BraseroLayout *layout = BRASERO_LAYOUT (data);
-
-	value = gconf_entry_get_value (entry);
-	if (value->type != GCONF_VALUE_INT)
-		return;
-
-	layout_type = gconf_value_get_int (value);
-	brasero_layout_change_type (layout, layout_type);
-
-	/* make sure our radio actions reflect the change */
-	action = gtk_action_group_get_action (layout->priv->action_group, "HView");
-
-	radios = gtk_radio_action_get_group (GTK_RADIO_ACTION (action));
-	for (iter = radios; iter; iter = iter->next)
-		g_signal_handlers_block_by_func (iter->data,
-						 brasero_layout_HV_radio_button_toggled_cb,
-						 layout);
-
-	gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action),
-					    GTK_IS_VPANED (layout->priv->pane));
-
-	for (iter = radios; iter; iter = iter->next)
-		g_signal_handlers_unblock_by_func (iter->data,
-						   brasero_layout_HV_radio_button_toggled_cb,
-						   layout);
-
-	g_slist_free (radios);
-}
-
-static void
-brasero_layout_HV_radio_button_toggled_cb (GtkRadioAction *radio,
-					   GtkRadioAction *current,
 					   BraseroLayout *layout)
 {
 	guint layout_type;
@@ -1139,25 +838,9 @@ brasero_layout_HV_radio_button_toggled_cb (GtkRadioAction *radio,
 		layout_type = BRASERO_LAYOUT_RIGHT;
 
 	brasero_layout_change_type (layout, layout_type);
-
-	/* update the GConf key */
-	gconf_client_notify_remove (layout->priv->client,
-				    layout->priv->layout_notify);
-	layout->priv->layout_notify = 0;
-
-	gconf_client_set_int (layout->priv->client,
-			      BRASERO_KEY_DISPLAY_LAYOUT,
-			      layout_type,
-			      NULL);
-
-	/* This is to avoid a notification for change */
-	gconf_client_clear_cache (layout->priv->client);
-	layout->priv->layout_notify = gconf_client_notify_add (layout->priv->client,
-							       BRASERO_KEY_DISPLAY_LAYOUT,
-							       brasero_layout_type_changed_cb,
-							       layout,
-							       NULL,
-							       NULL);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DISPLAY_LAYOUT,
+	                           GINT_TO_POINTER (layout_type));
 }
 
 static void
@@ -1180,34 +863,13 @@ brasero_layout_empty_toggled_cb (GtkToggleAction *action,
 				 BraseroLayout *layout)
 {
 	gboolean active;
-	GError *error = NULL;
 
 	active = gtk_toggle_action_get_active (action);
 	brasero_layout_set_side_pane_visible (layout, active);
 
-	if (layout->priv->sidepane_notify) {
-		gconf_client_notify_remove (layout->priv->client,
-					    layout->priv->sidepane_notify);
-		layout->priv->sidepane_notify = 0;
-	}
-
-	gconf_client_set_bool (layout->priv->client,
-			       BRASERO_KEY_SHOW_SIDEPANE,
-			       active,
-			       &error);
-
-	if (error) {
-		g_warning ("Can't set GConf key %s. \n", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
-
-	layout->priv->sidepane_notify = gconf_client_notify_add (layout->priv->client,
-								 BRASERO_KEY_SHOW_SIDEPANE,
-								 brasero_layout_show_sidepane_changed_cb,
-								 layout,
-								 NULL,
-								 &error);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SHOW_SIDEPANE,
+	                           GINT_TO_POINTER (active));
 }
 
 void
@@ -1253,32 +915,22 @@ brasero_layout_foreach_item_cb (GtkTreeModel *model,
 }
 
 static void
-brasero_layout_destroy (GtkObject *object)
+brasero_layout_combo_destroy_cb (GtkObject *object,
+                                 gpointer NULL_data)
 {
-	BraseroLayout *cobj;
 	GtkTreeModel *model;
 
-	cobj = BRASERO_LAYOUT(object);
-
-	if (!cobj->priv->client) {
-		GTK_OBJECT_CLASS (parent_class)->destroy (object);
-		return;
-	}
-
-	/* close GConf */
-	gconf_client_notify_remove (cobj->priv->client, cobj->priv->layout_notify);
-	gconf_client_notify_remove (cobj->priv->client, cobj->priv->preview_notify);
-	gconf_client_notify_remove (cobj->priv->client, cobj->priv->radio_notify);
-	g_object_unref (cobj->priv->client);
-	cobj->priv->client = NULL;
-
 	/* empty tree */
-	model = gtk_combo_box_get_model (GTK_COMBO_BOX (cobj->priv->combo));
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (object));
 	model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
 	gtk_tree_model_foreach (model,
 				brasero_layout_foreach_item_cb,
 				NULL);
+}
 
+static void
+brasero_layout_destroy (GtkObject *object)
+{
 	GTK_OBJECT_CLASS (parent_class)->destroy (object);
 }
 
@@ -1328,6 +980,7 @@ brasero_layout_init (BraseroLayout *obj)
 	GtkTreeModel *model;
 	GtkWidget *button;
 	GtkWidget *box;
+	gpointer value;
 	gint position;
 
 	obj->priv = g_new0 (BraseroLayoutPrivate, 1);
@@ -1341,13 +994,12 @@ brasero_layout_init (BraseroLayout *obj)
 					     1,
 					     obj);
 
-	/* init GConf */
-	obj->priv->client = gconf_client_get_default ();
-
 	/* get our layout */
-	obj->priv->layout_type = gconf_client_get_int (obj->priv->client,
-						       BRASERO_KEY_DISPLAY_LAYOUT,
-						       NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DISPLAY_LAYOUT,
+	                           &value);
+
+	obj->priv->layout_type = GPOINTER_TO_INT (value);
 
 	if (obj->priv->layout_type > BRASERO_LAYOUT_BOTTOM
 	||  obj->priv->layout_type < BRASERO_LAYOUT_RIGHT)
@@ -1385,9 +1037,11 @@ brasero_layout_init (BraseroLayout *obj)
 					    obj);
 
 	/* remember the position */
-	position = gconf_client_get_int (obj->priv->client,
-					 BRASERO_KEY_DISPLAY_POSITION,
-					 NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_DISPLAY_PROPORTION,
+	                           &value);
+
+	position = GPOINTER_TO_INT (value);
 	if (position > 0)
 		gtk_paned_set_position (GTK_PANED (obj->priv->pane), position);
 
@@ -1401,13 +1055,6 @@ brasero_layout_init (BraseroLayout *obj)
 	else
 		gtk_paned_pack2 (GTK_PANED (obj->priv->pane), box, TRUE, FALSE);
 
-	obj->priv->layout_notify = gconf_client_notify_add (obj->priv->client,
-							    BRASERO_KEY_DISPLAY_LAYOUT,
-							    brasero_layout_type_changed_cb,
-							    obj,
-							    NULL,
-							    NULL);
-
 	/* set up containers */
 	alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
 	gtk_widget_show (alignment);
@@ -1422,13 +1069,6 @@ brasero_layout_init (BraseroLayout *obj)
 	gtk_container_add (GTK_CONTAINER (alignment), obj->priv->main_box);
 	gtk_widget_show (obj->priv->main_box);
 
-	obj->priv->sidepane_notify = gconf_client_notify_add (obj->priv->client,
-							      BRASERO_KEY_SHOW_SIDEPANE,
-							      brasero_layout_show_sidepane_changed_cb,
-							      obj,
-							      NULL,
-							      NULL);
-
 	/* close button and combo. Don't show it now. */
 	box = gtk_hbox_new (FALSE, 6);
 	obj->priv->top_box = box;
@@ -1455,6 +1095,10 @@ brasero_layout_init (BraseroLayout *obj)
 			  "changed",
 			  G_CALLBACK (brasero_layout_combo_changed_cb),
 			  obj);
+	g_signal_connect (obj->priv->combo,
+			  "destroy",
+			  G_CALLBACK (brasero_layout_combo_destroy_cb),
+			  obj);
 	gtk_widget_show (obj->priv->combo);
 	g_object_unref (G_OBJECT (model));
 
diff --git a/src/brasero-player-bacon.c b/src/brasero-player-bacon.c
index 6d91b03..86caed9 100644
--- a/src/brasero-player-bacon.c
+++ b/src/brasero-player-bacon.c
@@ -37,13 +37,12 @@
 
 #include <gtk/gtk.h>
 
-#include <gconf/gconf-client.h>
-
 #include <gst/gst.h>
 #include <gst/interfaces/xoverlay.h>
 
 #include "brasero-player-bacon.h"
- 
+#include "brasero-setting.h"
+
 static void brasero_player_bacon_class_init(BraseroPlayerBaconClass *klass);
 static void brasero_player_bacon_init(BraseroPlayerBacon *sp);
 static void brasero_player_bacon_finalize(GObject *object);
@@ -365,19 +364,14 @@ brasero_player_bacon_destroy (GtkObject *obj)
 
 	/* save volume */
 	if (cobj->priv->pipe) {
-		GConfClient *client;
 		gdouble volume;
 
-		client = gconf_client_get_default ();
 		g_object_get (cobj->priv->pipe,
 			      "volume", &volume,
 			      NULL);
-
-		volume = gconf_client_set_int (client,
-					       GCONF_PLAYER_VOLUME,
-					       (gint) (volume * 100.0),
-					       NULL);
-		g_object_unref (client);
+		brasero_setting_set_value (brasero_setting_get_default (),
+		                           BRASERO_SETTING_PLAYER_VOLUME,
+		                           GINT_TO_POINTER (volume * 100));
 	}
 
 	if (cobj->priv->xoverlay
@@ -676,8 +670,8 @@ brasero_player_bacon_setup_pipe (BraseroPlayerBacon *bacon)
 {
 	GstElement *video_sink, *audio_sink;
 	GstBus *bus = NULL;
-	GConfClient *client;
 	gdouble volume;
+	gpointer value;
 
 	bacon->priv->pipe = gst_element_factory_make ("playbin", NULL);
 	if (!bacon->priv->pipe) {
@@ -717,13 +711,14 @@ brasero_player_bacon_setup_pipe (BraseroPlayerBacon *bacon)
 	gst_object_unref (bus);
 
 	/* set saved volume */
-	client = gconf_client_get_default ();
-	volume = gconf_client_get_int (client, GCONF_PLAYER_VOLUME, NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_PLAYER_VOLUME,
+	                           &value);
+	volume = GPOINTER_TO_INT (value);
 	volume = CLAMP (volume, 0, 500);
 	g_object_set (bacon->priv->pipe,
 		      "volume", (gdouble) volume / 100.0,
 		      NULL);
-	g_object_unref (client);
 
 	return;
 
diff --git a/src/brasero-player.c b/src/brasero-player.c
index 1767b9e..f12c9d8 100644
--- a/src/brasero-player.c
+++ b/src/brasero-player.c
@@ -35,14 +35,14 @@
 
 #include <gtk/gtk.h>
 
-#include <gconf/gconf-client.h>
-
 #include "brasero-misc.h"
 #include "brasero-metadata.h"
 #include "brasero-io.h"
 
 #include "brasero-units.h"
 
+#include "brasero-setting.h"
+
 #include "brasero-player.h"
 #include "brasero-player-bacon.h"
 #include "brasero-utils.h"
@@ -1244,33 +1244,21 @@ static void
 brasero_player_destroy (GtkObject *obj)
 {
 	BraseroPlayer *player;
-	GConfClient *client;
 
 	player = BRASERO_PLAYER (obj);
 
-	client = gconf_client_get_default ();
-
-	gconf_client_set_int (client,
-			      GCONF_IMAGE_SIZE_WIDTH,
-			      player->priv->image_width,
-			      NULL);
-
-	gconf_client_set_int (client,
-			      GCONF_IMAGE_SIZE_HEIGHT,
-			      player->priv->image_height,
-			      NULL);
-
-	gconf_client_set_int (client,
-			      GCONF_VIDEO_SIZE_WIDTH,
-			      player->priv->video_width,
-			      NULL);
-
-	gconf_client_set_int (client,
-			      GCONF_VIDEO_SIZE_HEIGHT,
-			      player->priv->video_height,
-			      NULL);
-
-	g_object_unref (client);
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_IMAGE_SIZE_WIDTH,
+	                           GINT_TO_POINTER (player->priv->image_width));
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_IMAGE_SIZE_HEIGHT,
+	                           GINT_TO_POINTER (player->priv->image_height));
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_VIDEO_SIZE_WIDTH,
+	                           GINT_TO_POINTER (player->priv->video_width));
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_VIDEO_SIZE_WIDTH,
+	                           GINT_TO_POINTER (player->priv->video_width));
 
 	player->priv->image = NULL;
 
@@ -1346,7 +1334,7 @@ static void
 brasero_player_init (BraseroPlayer *obj)
 {
 	GtkWidget *alignment;
-	GConfClient *client;
+	gpointer value;
 
 	obj->priv = g_new0 (BraseroPlayerPrivate, 1);
 
@@ -1398,34 +1386,37 @@ brasero_player_init (BraseroPlayer *obj)
 				  obj->priv->bacon,
 				  NULL);
 
-	client = gconf_client_get_default ();
-	obj->priv->image_width = gconf_client_get_int (client,
-						       GCONF_IMAGE_SIZE_WIDTH,
-						       NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_IMAGE_SIZE_WIDTH,
+	                           &value);
+	obj->priv->image_width = GPOINTER_TO_INT (value);
 
 	if (obj->priv->image_width > PLAYER_BACON_WIDTH * 3
 	||  obj->priv->image_width < PLAYER_BACON_WIDTH)
 		obj->priv->image_width = PLAYER_BACON_WIDTH;
 
-	obj->priv->image_height = gconf_client_get_int (client,
-						        GCONF_IMAGE_SIZE_HEIGHT,
-						        NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_IMAGE_SIZE_HEIGHT,
+	                           &value);
+	obj->priv->image_height = GPOINTER_TO_INT (value);
 
 	if (obj->priv->image_height > PLAYER_BACON_HEIGHT * 3
 	||  obj->priv->image_height < PLAYER_BACON_HEIGHT)
 		obj->priv->image_height = PLAYER_BACON_HEIGHT;
 
-	obj->priv->video_width = gconf_client_get_int (client,
-						       GCONF_VIDEO_SIZE_WIDTH,
-						       NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_VIDEO_SIZE_WIDTH,
+	                           &value);
+	obj->priv->video_width = GPOINTER_TO_INT (value);
 
 	if (obj->priv->video_width > PLAYER_BACON_WIDTH * 3
 	||  obj->priv->video_width < PLAYER_BACON_WIDTH)
 		obj->priv->video_width = PLAYER_BACON_WIDTH;
 
-	obj->priv->video_height = gconf_client_get_int (client,
-							GCONF_VIDEO_SIZE_HEIGHT,
-							NULL);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_VIDEO_SIZE_HEIGHT,
+	                           &value);
+	obj->priv->video_height = GPOINTER_TO_INT (value);
 
 	if (obj->priv->video_height > PLAYER_BACON_HEIGHT * 3
 	||  obj->priv->video_height < PLAYER_BACON_HEIGHT)
@@ -1434,7 +1425,6 @@ brasero_player_init (BraseroPlayer *obj)
 	gtk_widget_set_size_request (obj->priv->bacon,
 				     obj->priv->video_width,
 				     obj->priv->video_height);
-	g_object_unref (client);
 }
 
 GtkWidget *
diff --git a/src/brasero-playlist.c b/src/brasero-playlist.c
index ee563c4..82275f4 100644
--- a/src/brasero-playlist.c
+++ b/src/brasero-playlist.c
@@ -614,15 +614,6 @@ brasero_playlist_get_selected_uri (BraseroURIContainer *container)
 }
 
 static void
-brasero_playlist_unselect_all (BraseroPlaylist *playlist)
-{
-	GtkTreeSelection *selection;
-
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (playlist->priv->tree));
-	gtk_tree_selection_unselect_all (selection);
-}
-
-static void
 brasero_playlist_add_cb (GtkButton *button, BraseroPlaylist *playlist)
 {
 	GtkWidget *dialog, *toplevel;
diff --git a/src/brasero-preview.h b/src/brasero-preview.h
index 44f38d9..ee1373b 100644
--- a/src/brasero-preview.h
+++ b/src/brasero-preview.h
@@ -36,8 +36,6 @@
 
 G_BEGIN_DECLS
 
-#define BRASERO_KEY_SHOW_PREVIEW	"/apps/brasero/display/viewer"
-
 #define BRASERO_TYPE_PREVIEW             (brasero_preview_get_type ())
 #define BRASERO_PREVIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_PREVIEW, BraseroPreview))
 #define BRASERO_PREVIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_PREVIEW, BraseroPreviewClass))
diff --git a/src/brasero-project.c b/src/brasero-project.c
index 898d636..6ac2b13 100644
--- a/src/brasero-project.c
+++ b/src/brasero-project.c
@@ -38,20 +38,8 @@
 
 #include <gtk/gtk.h>
 
-#include <libxml/xmlerror.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/parser.h>
-#include <libxml/xmlstring.h>
-#include <libxml/uri.h>
-
-#include <gconf/gconf-client.h>
-
 #include <gst/gst.h>
 
-#ifdef BUILD_PLAYLIST
-#include <totem-pl-parser.h>
-#endif
-
 #include "brasero-units.h"
 
 #include "brasero-misc.h"
@@ -60,6 +48,8 @@
 #include "brasero-tags.h"
 #include "brasero-session.h"
 
+#include "brasero-setting.h"
+
 #ifdef BUILD_PREVIEW
 #include "brasero-player.h"
 #endif
@@ -247,8 +237,6 @@ static GObjectClass *parent_class = NULL;
 
 #define BRASERO_PROJECT_SIZE_WIDGET_BORDER	1
 
-#define BRASERO_KEY_SHOW_PREVIEW		"/apps/brasero/display/viewer"
-
 #define BRASERO_PROJECT_VERSION "0.2"
 
 #define BRASERO_RESPONSE_ADD			1976
@@ -2007,9 +1995,9 @@ brasero_project_add_uris_cb (GtkAction *action,
 		return;
 	}
 
-	/* set the Add button grey as we don't want
-	 * the user to be able to click again until it
-	 * the dialog has been closed */
+	/* Set the Add button grey as we don't want
+	 * the user to be able to click again until the
+	 * dialog has been closed */
 	gtk_action_set_sensitive (action, FALSE);
 
 	toplevel = gtk_widget_get_toplevel (GTK_WIDGET (project));
@@ -2081,15 +2069,14 @@ brasero_project_add_uris_cb (GtkAction *action,
 
 #ifdef BUILD_PREVIEW
 
-	GConfClient *client;
 	GtkWidget *player;
-	gboolean res;
+	gpointer value;
 
-	client = gconf_client_get_default ();
-	res = gconf_client_get_bool (client, BRASERO_KEY_SHOW_PREVIEW, NULL);
-	g_object_unref (client);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SHOW_PREVIEW,
+	                           &value);
 
-	if (!res)
+	if (!GPOINTER_TO_INT (value))
 		return;
 
 	/* if preview is activated add it */
diff --git a/src/brasero-search-entry.c b/src/brasero-search-entry.c
index e85137c..6416d17 100644
--- a/src/brasero-search-entry.c
+++ b/src/brasero-search-entry.c
@@ -40,10 +40,9 @@
 
 #include <beagle/beagle.h>
 
-#include <gconf/gconf-client.h>
-
 #include "brasero-search-entry.h"
 #include "brasero-layout.h"
+#include "brasero-setting.h"
 
 static void brasero_search_entry_class_init (BraseroSearchEntryClass *klass);
 static void brasero_search_entry_init (BraseroSearchEntry *sp);
@@ -53,9 +52,6 @@ static void brasero_search_entry_destroy (GtkObject *gtk_object);
 struct BraseroSearchEntryPrivate {
 	GtkWidget *button;
 	GtkWidget *combo;
-	GSList *history;
-	GConfClient *client;
-	guint cxn;
 	gint search_id;
 
 	BraseroLayoutType ctx;
@@ -77,19 +73,15 @@ enum {
 
 static GObjectClass *parent_class = NULL;
 
-#define BRASERO_SEARCH_ENTRY_HISTORY_KEY "/apps/brasero/search_history"
 #define BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS	10
 
-static void brasero_search_entry_history_changed_cb (GConfClient *client,
-						      guint cxn_id,
-						      GConfEntry *entry,
-						      BraseroSearchEntry *widget);
 static void brasero_search_entry_button_clicked_cb (GtkButton *button,
 						      BraseroSearchEntry *entry);
 static void brasero_search_entry_entry_activated_cb (GtkComboBox *combo,
 						      BraseroSearchEntry *entry);
 static void brasero_search_entry_activated (BraseroSearchEntry *entry, gboolean query_now);
-static void brasero_search_entry_set_history (BraseroSearchEntry *entry);
+static void brasero_search_entry_set_history (BraseroSearchEntry *entry,
+                                              const gchar * const *history);
 static void brasero_search_entry_save_history (BraseroSearchEntry *entry);
 static void brasero_search_entry_add_current_keyword_to_history (BraseroSearchEntry *entry);
 static void brasero_search_entry_category_clicked_cb (GtkWidget *button, BraseroSearchEntry *entry);
@@ -172,10 +164,10 @@ static void
 brasero_search_entry_init (BraseroSearchEntry *obj)
 {
 	gchar *string;
+	gpointer value;
 	GtkWidget *table;
 	GtkWidget *label;
 	GtkWidget *entry;
-	GError *error = NULL;
 	GtkListStore *store;
 	GtkCellRenderer *renderer;
 	GtkEntryCompletion *completion;
@@ -344,54 +336,17 @@ brasero_search_entry_init (BraseroSearchEntry *obj)
 	gtk_widget_set_tooltip_text (obj->priv->button,
 				     _("Click to start the search"));
 
-	/* Set up GConf Client */
-	obj->priv->client = gconf_client_get_default ();
-	if (obj->priv->client) {
-		if (error) {
-			g_warning ("ERROR : %s\n", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-		else
-			obj->priv->cxn = gconf_client_notify_add (obj->priv->client,
-								  BRASERO_SEARCH_ENTRY_HISTORY_KEY,
-								  (GConfClientNotifyFunc) brasero_search_entry_history_changed_cb,
-								  obj, 
-								  NULL,
-								  &error);
-
-		if (error) {
-			g_warning ("ERROR : %s\n", error->message);
-			g_error_free (error);
-			error = NULL;
-		}
-
-		obj->priv->history = gconf_client_get_list (obj->priv->client,
-							    BRASERO_SEARCH_ENTRY_HISTORY_KEY,
-							    GCONF_VALUE_STRING,
-							    &error);
+	brasero_setting_get_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SEARCH_ENTRY_HISTORY,
+	                           &value);
 
-		if (error) {
-			g_warning ("ERROR : %s\n", error->message);
-			g_error_free (error);
-		}
-		else if (obj->priv->history)
-			brasero_search_entry_set_history (obj);
-	}
-	else
-		g_warning ("ERROR : could not connect to GCONF.\n");
+	brasero_search_entry_set_history (obj, value);
+	g_strfreev (value);
 }
 
 static void
 brasero_search_entry_destroy (GtkObject *gtk_object)
 {
-	BraseroSearchEntry *cobj;
-
-	cobj = BRASERO_SEARCH_ENTRY (gtk_object);
-
-	/* release gconf client */
-	g_object_unref (cobj->priv->client);
-
 	GTK_OBJECT_CLASS (parent_class)->destroy (gtk_object);
 }
 
@@ -402,10 +357,6 @@ brasero_search_entry_finalize (GObject *object)
 
 	cobj = BRASERO_SEARCH_ENTRY (object);
 
-	g_slist_foreach (cobj->priv->history, (GFunc) g_free, NULL);
-	g_slist_free (cobj->priv->history);
-	cobj->priv->history = NULL;
-
 	if (cobj->priv->search_id) {
 		g_source_remove (cobj->priv->search_id);
 		cobj->priv->search_id = 0;
@@ -438,41 +389,6 @@ brasero_search_entry_category_clicked_cb (GtkWidget *button,
 }
 
 static void
-brasero_search_entry_history_changed_cb (GConfClient *client,
-					 guint cnx_id,
-					 GConfEntry *entry,
-					 BraseroSearchEntry *widget)
-{
-	GConfValue *value;
-	GSList *list = NULL, *iter;
-	const char *keywords;
-
-	/* a few checks */
-	value = gconf_entry_get_value (entry);
-	if (value->type != GCONF_VALUE_LIST)
-		return;
-
-	if (gconf_value_get_list_type (value) != GCONF_VALUE_STRING)
-		return;
-
-	/* clears up history */
-	g_slist_foreach (widget->priv->history, (GFunc) g_free, NULL);
-	g_slist_free (widget->priv->history);
-	widget->priv->history = NULL;
-
-	/* get the new history */
-	list = gconf_value_get_list (value);
-	for (iter = list; iter && g_slist_length (widget->priv->history) < BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS; iter = iter->next) {
-		value = (GConfValue *) iter->data;
-		keywords = gconf_value_get_string (value);
-		widget->priv->history = g_slist_append (widget->priv->history,
-							g_strdup (keywords));
-	}
-
-	brasero_search_entry_set_history (widget);
-}
-
-static void
 brasero_search_entry_button_clicked_cb (GtkButton *button,
 					BraseroSearchEntry *entry)
 {
@@ -560,41 +476,24 @@ brasero_search_entry_activated (BraseroSearchEntry *entry,
 }
 
 static void
-brasero_search_entry_set_history (BraseroSearchEntry *entry)
+brasero_search_entry_set_history (BraseroSearchEntry *entry,
+                                  const gchar * const *history)
 {
 	int i;
-	GSList *iter;
 	GtkTreeIter row;
 	GtkListStore *store;
 
 	store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (entry->priv->combo)));
 	gtk_list_store_clear (GTK_LIST_STORE (store));
 
-	if (entry->priv->history == NULL)
-		return;
-
-	i = 0;
-	for (iter = entry->priv->history; iter && i < BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS; iter = iter->next) {
-		gtk_list_store_append (store, &row);
-		gtk_list_store_set (store, &row,
-				    BRASERO_SEARCH_ENTRY_DISPLAY_COL, iter->data,
-				    BRASERO_SEARCH_ENTRY_BACKGRD_COL, NULL,
-				    -1);
-		i ++;
-	}
-
-	if (iter) {
-		GSList *next;
-
-		next = iter->next;
-
-		/* if there are other items simply free them */
-		entry->priv->history = g_slist_remove_link (entry->priv->history, iter);
-		g_free (iter->data);
-		g_slist_free (iter);
-
-		g_slist_foreach (next, (GFunc) g_free, NULL);
-		g_slist_free (next);
+	if (history) {
+		for (i = 0; history [i] && i < BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS; i ++) {
+			gtk_list_store_append (store, &row);
+			gtk_list_store_set (store, &row,
+					    BRASERO_SEARCH_ENTRY_DISPLAY_COL, history [i],
+					    BRASERO_SEARCH_ENTRY_BACKGRD_COL, NULL,
+					    -1);
+		}
 	}
 
 	/* separator */
@@ -616,64 +515,110 @@ brasero_search_entry_set_history (BraseroSearchEntry *entry)
 static void
 brasero_search_entry_save_history (BraseroSearchEntry *entry)
 {
-	GError *error = NULL;
-
-	gconf_client_notify_remove (entry->priv->client, entry->priv->cxn);
-	gconf_client_set_list (entry->priv->client,
-			       BRASERO_SEARCH_ENTRY_HISTORY_KEY,
-			       GCONF_VALUE_STRING,
-			       entry->priv->history, &error);
-	if (error) {
-		g_warning ("ERROR : %s\n", error->message);
-		g_error_free (error);
-		error = NULL;
+	GtkTreeModel *model;
+	int num_children;
+	GtkTreeIter iter;
+	gchar **array;
+	int i = 0;
+
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry->priv->combo));
+	if (!gtk_tree_model_get_iter_first (model, &iter)) {
+		brasero_setting_set_value (brasero_setting_get_default (),
+					   BRASERO_SETTING_SEARCH_ENTRY_HISTORY,
+					   NULL);
+		return;
 	}
 
-	entry->priv->cxn = gconf_client_notify_add (entry->priv->client,
-						    BRASERO_SEARCH_ENTRY_HISTORY_KEY,
-						    (GConfClientNotifyFunc) brasero_search_entry_history_changed_cb,
-						    entry, NULL, &error);
-	if (error) {
-		g_warning ("ERROR : %s\n", error->message);
-		g_error_free (error);
-	}
+	/* NOTE: the last item is not to be included nor
+	 * the blank line should be included. Only
+	 * substract one to have an empty row in the
+	 * array. */
+	num_children = gtk_tree_model_iter_n_children (model, NULL);
+	array = g_new0 (gchar *, -- num_children);
+
+	do {
+		gchar *string;
+
+		string = NULL;
+		gtk_tree_model_get (model, &iter,
+		                    BRASERO_SEARCH_ENTRY_DISPLAY_COL, &string,
+		                    -1);
+
+		/* break on the blank line */
+		if (string == NULL)
+			break;
+
+		array [i++] = string;
+	} while (gtk_tree_model_iter_next (model, &iter));
+
+	brasero_setting_set_value (brasero_setting_get_default (),
+	                           BRASERO_SETTING_SEARCH_ENTRY_HISTORY,
+	                           array);
+	g_strfreev (array);
 }
 
 static void
 brasero_search_entry_add_current_keyword_to_history (BraseroSearchEntry *entry)
 {
 	const char *keywords = NULL;
-	GSList *iter;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
 
 	/* we don't want to add static entry */
 	keywords =  gtk_entry_get_text (GTK_ENTRY (GTK_BIN (entry->priv->combo)->child));
 	if (!keywords || !strcmp (keywords, _("All files")))
 		return;
 
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (entry->priv->combo));
+	if (!gtk_tree_model_get_iter_first (model, &iter))
+		return;
+
 	/* make sure the item is not already in the list
 	 * otherwise just move it up in first position */
-	for (iter = entry->priv->history; iter; iter = iter->next) {
-		if (!strcmp (keywords, (char *) iter->data)) {
-			keywords = iter->data;
-			entry->priv->history = g_slist_remove (entry->priv->history,
-							       keywords);
-			entry->priv->history = g_slist_prepend (entry->priv->history,
-								(char *) keywords);
+	do {
+		gchar *string;
+
+		string = NULL;
+		gtk_tree_model_get (model, &iter,
+		                    BRASERO_SEARCH_ENTRY_DISPLAY_COL, &string,
+		                    -1);
+
+		/* break when we reach the blank line */
+		if (!string)
+			break;
+
+		if (!strcmp (keywords, string)) {
+			gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+			gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
+			gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			                    BRASERO_SEARCH_ENTRY_DISPLAY_COL, string,
+			                    -1);
+			g_free (string);
 			goto end;
 		}
-	}
 
-	if (g_slist_length (entry->priv->history) == BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS) {
-		iter = g_slist_last (entry->priv->history);
-		entry->priv->history = g_slist_remove (entry->priv->history, iter);
+		g_free (string);
+	} while (gtk_tree_model_iter_next (model, &iter));
+
+	/* Remember that in model we have the 10 items
+	 * a NULL one and the "All Files" one */
+	if (gtk_tree_model_iter_n_children (model, NULL) == BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS + 2) {
+		gtk_tree_model_iter_nth_child (model,
+		                               &iter,
+		                               NULL, 
+		                               BRASERO_SEARCH_ENTRY_MAX_HISTORY_ITEMS - 1);
+
+		gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
 	}
 
-	entry->priv->history = g_slist_prepend (entry->priv->history,
-						g_strdup (keywords));
+	gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+	                    BRASERO_SEARCH_ENTRY_DISPLAY_COL, keywords,
+	                    -1);
+
+end:
 
-      end:
 	brasero_search_entry_save_history (entry);
-	brasero_search_entry_set_history (entry);
 }
 
 BeagleQuery *
diff --git a/src/brasero-setting.c b/src/brasero-setting.c
new file mode 100644
index 0000000..51cb494
--- /dev/null
+++ b/src/brasero-setting.c
@@ -0,0 +1,611 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2009 <bonfire-app wanadoo fr>
+ * 
+ * brasero is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * brasero is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "brasero-setting.h"
+
+typedef struct _BraseroSettingPrivate BraseroSettingPrivate;
+struct _BraseroSettingPrivate
+{
+	gint win_width;
+	gint win_height;
+	gint stock_file_chooser_percent;
+	gint brasero_file_chooser_percent;
+	gint player_volume;
+	gint display_layout;
+	gint data_disc_column;
+	gint data_disc_column_order;
+	gint image_size_width;
+	gint image_size_height;
+	gint video_size_height;
+	gint video_size_width;
+	gint display_proportion;
+
+	gchar *layout_audio;
+	gchar *layout_video;
+	gchar *layout_data;
+
+	gchar **search_entry_history;
+
+	guint win_maximized:1;
+	guint show_preview:1;
+	guint show_sidepane:1;
+};
+
+#define BRASERO_SETTING_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), BRASERO_TYPE_SETTING, BraseroSettingPrivate))
+
+enum
+{
+	VALUE_CHANGED,
+
+	LAST_SIGNAL
+};
+
+
+static guint setting_signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (BraseroSetting, brasero_setting, G_TYPE_OBJECT);
+
+gboolean
+brasero_setting_get_value (BraseroSetting *setting,
+                           BraseroSettingValue setting_value,
+                           gpointer *value)
+{
+	BraseroSettingPrivate *priv;
+
+	g_return_val_if_fail (BRASERO_IS_SETTING (setting), FALSE);
+	g_return_val_if_fail (value != NULL, FALSE);
+
+	priv = BRASERO_SETTING_PRIVATE (setting);
+
+	switch (setting_value) {
+		/** gint **/
+		case BRASERO_SETTING_WIN_WIDTH:
+			(*value) = GINT_TO_POINTER (priv->win_width);
+			break;
+
+		case BRASERO_SETTING_WIN_HEIGHT:
+			(*value) = GINT_TO_POINTER (priv->win_height);
+			break;
+
+		case BRASERO_SETTING_STOCK_FILE_CHOOSER_PERCENT:
+			(*value) = GINT_TO_POINTER (priv->stock_file_chooser_percent);
+			break;
+	
+		case BRASERO_SETTING_BRASERO_FILE_CHOOSER_PERCENT:
+			(*value) = GINT_TO_POINTER (priv->brasero_file_chooser_percent);
+			break;
+
+		case BRASERO_SETTING_PLAYER_VOLUME:
+			(*value) = GINT_TO_POINTER (priv->player_volume);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT:
+			(*value) = GINT_TO_POINTER (priv->display_layout);
+			break;
+
+		case BRASERO_SETTING_DATA_DISC_COLUMN:
+			(*value) = GINT_TO_POINTER (priv->data_disc_column);
+			break;
+
+		case BRASERO_SETTING_DATA_DISC_COLUMN_ORDER:
+			(*value) = GINT_TO_POINTER (priv->data_disc_column_order);
+			break;
+
+		case BRASERO_SETTING_IMAGE_SIZE_WIDTH:
+			(*value) = GINT_TO_POINTER (priv->image_size_width);
+			break;
+
+		case BRASERO_SETTING_IMAGE_SIZE_HEIGHT:
+			(*value) = GINT_TO_POINTER (priv->image_size_height);
+			break;
+
+		case BRASERO_SETTING_VIDEO_SIZE_HEIGHT:
+			(*value) = GINT_TO_POINTER (priv->video_size_height);
+			break;
+
+		case BRASERO_SETTING_VIDEO_SIZE_WIDTH:
+			(*value) = GINT_TO_POINTER (priv->video_size_width);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_PROPORTION:
+			(*value) = GINT_TO_POINTER (priv->display_proportion);
+			break;
+
+			/** gboolean **/
+		case BRASERO_SETTING_WIN_MAXIMIZED:
+			(*value) = GINT_TO_POINTER (priv->win_maximized);
+			break;
+
+		case BRASERO_SETTING_SHOW_PREVIEW:
+			(*value) = GINT_TO_POINTER (priv->show_preview);
+			break;
+
+		case BRASERO_SETTING_SHOW_SIDEPANE:
+			(*value) = GINT_TO_POINTER (priv->show_sidepane);
+			break;
+
+			/** gchar * **/
+		case BRASERO_SETTING_DISPLAY_LAYOUT_AUDIO:
+			(*value) = priv->layout_audio;
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT_VIDEO:
+			(*value) = priv->layout_video;
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT_DATA:
+			(*value) = priv->layout_data;
+			break;
+
+			/** gchar ** **/
+		case BRASERO_SETTING_SEARCH_ENTRY_HISTORY:
+			(*value) = g_strdupv (priv->search_entry_history);
+			break;
+
+		default:
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+brasero_setting_set_value (BraseroSetting *setting,
+                           BraseroSettingValue setting_value,
+                           gconstpointer value)
+{
+	BraseroSettingPrivate *priv;
+
+	g_return_val_if_fail (BRASERO_IS_SETTING (setting), FALSE);
+
+	priv = BRASERO_SETTING_PRIVATE (setting);
+
+	switch (setting_value) {
+		/** gint **/
+		case BRASERO_SETTING_WIN_WIDTH:
+			priv->win_width = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_WIN_HEIGHT:
+			priv->win_height = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_STOCK_FILE_CHOOSER_PERCENT:
+			priv->stock_file_chooser_percent = GPOINTER_TO_INT (value);
+			break;
+	
+		case BRASERO_SETTING_BRASERO_FILE_CHOOSER_PERCENT:
+			priv->brasero_file_chooser_percent = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_PLAYER_VOLUME:
+			priv->player_volume = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT:
+			priv->display_layout = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_DATA_DISC_COLUMN:
+			priv->data_disc_column = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_DATA_DISC_COLUMN_ORDER:
+			priv->data_disc_column_order = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_IMAGE_SIZE_WIDTH:
+			priv->image_size_width = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_IMAGE_SIZE_HEIGHT:
+			priv->image_size_height = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_VIDEO_SIZE_HEIGHT:
+			priv->video_size_height = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_VIDEO_SIZE_WIDTH:
+			priv->video_size_width = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_PROPORTION:
+			priv->display_proportion = GPOINTER_TO_INT (value);
+			break;
+
+			/** gboolean **/
+		case BRASERO_SETTING_WIN_MAXIMIZED:
+			priv->win_maximized = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_SHOW_PREVIEW:
+			priv->show_preview = GPOINTER_TO_INT (value);
+			break;
+
+		case BRASERO_SETTING_SHOW_SIDEPANE:
+			priv->show_sidepane = GPOINTER_TO_INT (value);
+			break;
+
+			/** gchar * **/
+		case BRASERO_SETTING_DISPLAY_LAYOUT_AUDIO:
+			priv->layout_audio = g_strdup (value);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT_VIDEO:
+			priv->layout_video = g_strdup (value);
+			break;
+
+		case BRASERO_SETTING_DISPLAY_LAYOUT_DATA:
+			priv->layout_data = g_strdup (value);
+			break;
+
+			/** gchar ** **/
+		case BRASERO_SETTING_SEARCH_ENTRY_HISTORY:
+			if (priv->search_entry_history)
+				g_strfreev (priv->search_entry_history);
+
+			if (value)
+				priv->search_entry_history = g_strdupv ((gchar **) value);
+			else
+				priv->search_entry_history = NULL;
+
+			break;
+
+		default:
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+gboolean
+brasero_setting_load (BraseroSetting *setting)
+{
+	BraseroSettingPrivate *priv;
+	GKeyFile *key_file;
+	gboolean res;
+	gchar *path;
+
+	priv = BRASERO_SETTING_PRIVATE (setting);
+
+	path = g_build_path (G_DIR_SEPARATOR_S,
+	                     g_get_user_config_dir (),
+	                     "brasero",
+	                     "application-settings",
+	                     NULL);
+
+	key_file = g_key_file_new ();
+	res = g_key_file_load_from_file (key_file,
+	                                 path,
+	                                 G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+	                                 NULL);
+	g_free (path);
+	if (!res)
+		return res;
+
+	priv->search_entry_history = g_key_file_get_string_list (key_file,
+	                                                         "Filter",
+	                                                         "history",
+	                                                         NULL,
+	                                                         NULL);
+
+	priv->layout_audio = g_key_file_get_string (key_file,
+	                                            "Display",
+	                                            "layout-audio",
+	                                            NULL);
+	priv->layout_video = g_key_file_get_string (key_file,
+	                                            "Display",
+	                                            "layout-video",
+	                                            NULL);
+	priv->layout_data = g_key_file_get_string (key_file,
+	                                           "Display",
+	                                           "layout-data",
+	                                           NULL);
+	priv->show_sidepane = g_key_file_get_boolean (key_file,
+	                                              "Display",
+	                                              "show-sidepane",
+	                                              NULL);
+	priv->show_preview = g_key_file_get_boolean (key_file,
+	                                             "Display",
+	                                             "show-preview",
+	                                             NULL);
+
+	priv->win_width = g_key_file_get_integer (key_file,
+	                                          "Display",
+	                                          "main-window-width",
+	                                          NULL);
+	priv->win_height = g_key_file_get_integer (key_file,
+	                                           "Display",
+	                                           "main-window-height",
+	                                           NULL);
+	priv->win_maximized = g_key_file_get_boolean (key_file,
+	                                             "Display",
+	                                             "main-window-maximized",
+	                                             NULL);
+	priv->stock_file_chooser_percent = g_key_file_get_integer (key_file,
+	                                                           "Display",
+	                                                           "stock-file-chooser-percent",
+	                                                           NULL);
+	priv->brasero_file_chooser_percent = g_key_file_get_integer (key_file,
+	                                                             "Display",
+	                                                             "brasero-file-chooser-percent",
+	                                                             NULL);
+	priv->player_volume = g_key_file_get_integer (key_file,
+	                                              "Player",
+	                                              "player-volume",
+	                                              NULL);
+	priv->display_layout = g_key_file_get_integer (key_file,
+	                                              "Display",
+	                                              "layout",
+	                                              NULL);
+	priv->data_disc_column = g_key_file_get_integer (key_file,
+	                                                 "Display",
+	                                                 "data-disc-column",
+	                                                 NULL);
+	priv->data_disc_column_order = g_key_file_get_integer (key_file,
+	                                                       "Display",
+	                                                       "data-disc-column-order",
+	                                                       NULL);
+	priv->image_size_width = g_key_file_get_integer (key_file,
+	                                                 "Player",
+	                                                 "image-size-width",
+	                                                 NULL);
+	priv->image_size_height = g_key_file_get_integer (key_file,
+	                                                  "Player",
+	                                                  "image-size-height",
+	                                                  NULL);
+	priv->video_size_width = g_key_file_get_integer (key_file,
+	                                                 "Player",
+	                                                 "video-size-width",
+	                                                 NULL);
+	priv->video_size_height = g_key_file_get_integer (key_file,
+	                                                  "Player",
+	                                                  "video-size-height",
+	                                                  NULL);
+	priv->display_proportion = priv->image_size_width = g_key_file_get_integer (key_file,
+	                                                                          "Display",
+	                                                                          "pane-position",
+	                                                                          NULL);
+
+	g_key_file_free (key_file);
+
+	return TRUE;
+}
+
+gboolean
+brasero_setting_save (BraseroSetting *setting)
+{
+	BraseroSettingPrivate *priv;
+	gchar *contents = NULL;
+	gsize content_size = 0;
+	GKeyFile *key_file;
+	gboolean res;
+	gchar *path;
+
+	priv = BRASERO_SETTING_PRIVATE (setting);
+
+	path = g_build_path (G_DIR_SEPARATOR_S,
+	                     g_get_user_config_dir (),
+	                     "brasero",
+	                     "application-settings",
+	                     NULL);
+
+	key_file = g_key_file_new ();
+	res = g_key_file_load_from_file (key_file,
+	                                 path,
+	                                 G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+	                                 NULL);
+
+	/* Don't worry if it does not work, it could be
+	 * that there isn't any at the moment. */
+	if (priv->search_entry_history)
+		g_key_file_set_string_list (key_file,
+					    "Filter",
+					    "history",
+					    (const gchar *const*) priv->search_entry_history,
+					    g_strv_length (priv->search_entry_history));
+
+	if (priv->layout_audio)
+		g_key_file_set_string (key_file,
+		                       "Display",
+		                       "layout-audio",
+		                       priv->layout_audio);
+
+	if (priv->layout_video)
+		g_key_file_set_string (key_file,
+		                       "Display",
+		                       "layout-video",
+		                       priv->layout_video);
+
+	if (priv->layout_data)
+		g_key_file_set_string (key_file,
+		                       "Display",
+		                       "layout-data",
+		                       priv->layout_data);
+
+	g_key_file_set_boolean (key_file,
+	                        "Display",
+	                        "show-sidepane",
+	                        priv->show_sidepane);
+	g_key_file_set_boolean (key_file,
+	                        "Display",
+	                        "show-preview",
+	                        priv->show_preview);
+
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "main-window-width",
+	                        priv->win_width);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "main-window-height",
+	                        priv->win_height);
+	g_key_file_set_boolean (key_file,
+	                        "Display",
+	                        "main-window-maximized",
+	                        priv->win_maximized);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "stock-file-chooser-percent",
+	                        priv->stock_file_chooser_percent);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "brasero-file-chooser-percent",
+	                        priv->brasero_file_chooser_percent);
+	g_key_file_set_integer (key_file,
+	                        "Player",
+	                        "player-volume",
+	                        priv->player_volume);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "layout",
+	                        priv->display_layout);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "data-disc-column",
+	                        priv->data_disc_column);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "data-disc-column-order",
+	                        priv->data_disc_column_order);
+	g_key_file_set_integer (key_file,
+	                        "Player",
+	                        "image-size-width",
+	                        priv->image_size_width);
+	g_key_file_set_integer (key_file,
+	                        "Player",
+	                        "image-size-height",
+	                        priv->image_size_height);
+	g_key_file_set_integer (key_file,
+	                        "Player",
+	                        "video-size-width",
+	                        priv->video_size_width);
+	g_key_file_set_integer (key_file,
+	                        "Player",
+	                        "video-size-height",
+	                        priv->video_size_height);
+	g_key_file_set_integer (key_file,
+	                        "Display",
+	                        "pane-position",
+	                        priv->display_proportion);
+
+	contents = g_key_file_to_data (key_file, &content_size, NULL);
+	g_file_set_contents (path, contents, content_size, NULL);
+	g_free (contents);
+	g_free (path);
+
+	g_key_file_free (key_file);
+
+	return TRUE;
+}
+
+static void
+brasero_setting_init (BraseroSetting *object)
+{
+	BraseroSettingPrivate *priv;
+
+	priv = BRASERO_SETTING_PRIVATE (object);
+	priv->win_width = -1;
+	priv->win_height = -1;
+	priv->stock_file_chooser_percent = -1;
+	priv->brasero_file_chooser_percent = -1;
+	priv->player_volume = -1;
+	priv->display_layout = -1;
+	priv->data_disc_column = -1;
+	priv->data_disc_column_order = -1;
+	priv->image_size_width = -1;
+	priv->image_size_height = -1;
+	priv->video_size_height = -1;
+	priv->video_size_width = -1;
+	priv->display_proportion = -1;
+}
+
+static void
+brasero_setting_finalize (GObject *object)
+{
+	BraseroSettingPrivate *priv;
+
+	priv = BRASERO_SETTING_PRIVATE (object);
+	if (priv->layout_video) {
+		g_free (priv->layout_video);
+		priv->layout_video = NULL;
+	}
+
+	if (priv->layout_data) {
+		g_free (priv->layout_data);
+		priv->layout_data = NULL;
+	}
+
+	if (priv->layout_audio) {
+		g_free (priv->layout_audio);
+		priv->layout_audio = NULL;
+	}
+
+	if (priv->search_entry_history) {
+		g_strfreev (priv->search_entry_history);
+		priv->search_entry_history = NULL;
+	}
+
+	G_OBJECT_CLASS (brasero_setting_parent_class)->finalize (object);
+}
+
+static void
+brasero_setting_value_changed (BraseroSetting *self, gint value)
+{
+	/* TODO: Add default signal handler implementation here */
+}
+
+static void
+brasero_setting_class_init (BraseroSettingClass *klass)
+{
+	GObjectClass* object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (BraseroSettingPrivate));
+
+	object_class->finalize = brasero_setting_finalize;
+
+	klass->value_changed = brasero_setting_value_changed;
+
+	setting_signals[VALUE_CHANGED] =
+		g_signal_new ("value_changed",
+		              G_OBJECT_CLASS_TYPE (klass),
+		              G_SIGNAL_RUN_LAST,
+		              G_STRUCT_OFFSET (BraseroSettingClass, value_changed),
+		              NULL, NULL,
+		              g_cclosure_marshal_VOID__INT,
+		              G_TYPE_NONE, 1,
+		              G_TYPE_INT);
+}
+
+static BraseroSetting *default_setting = NULL;
+
+BraseroSetting *
+brasero_setting_get_default (void)
+{
+	if (!default_setting)
+		default_setting = g_object_new (BRASERO_TYPE_SETTING, NULL);
+
+	return default_setting;
+}
diff --git a/src/brasero-setting.h b/src/brasero-setting.h
new file mode 100644
index 0000000..3fbe98e
--- /dev/null
+++ b/src/brasero-setting.h
@@ -0,0 +1,106 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * brasero
+ * Copyright (C) Philippe Rouquier 2009 <bonfire-app wanadoo fr>
+ * 
+ * brasero is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * brasero is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _BRASERO_SETTING_H_
+#define _BRASERO_SETTING_H_
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+	BRASERO_SETTING_VALUE_NONE,
+
+	/** gint value **/
+	BRASERO_SETTING_WIN_WIDTH,
+	BRASERO_SETTING_WIN_HEIGHT,
+	BRASERO_SETTING_STOCK_FILE_CHOOSER_PERCENT,
+	BRASERO_SETTING_BRASERO_FILE_CHOOSER_PERCENT,
+	BRASERO_SETTING_PLAYER_VOLUME,
+	BRASERO_SETTING_DISPLAY_PROPORTION,
+	BRASERO_SETTING_DISPLAY_LAYOUT,
+	BRASERO_SETTING_DATA_DISC_COLUMN,
+	BRASERO_SETTING_DATA_DISC_COLUMN_ORDER,
+	BRASERO_SETTING_IMAGE_SIZE_WIDTH,
+	BRASERO_SETTING_IMAGE_SIZE_HEIGHT,
+	BRASERO_SETTING_VIDEO_SIZE_HEIGHT,
+	BRASERO_SETTING_VIDEO_SIZE_WIDTH,
+
+	/** gboolean **/
+	BRASERO_SETTING_WIN_MAXIMIZED,
+	BRASERO_SETTING_SHOW_SIDEPANE,
+	BRASERO_SETTING_SHOW_PREVIEW,
+
+	/** gchar * **/
+	BRASERO_SETTING_DISPLAY_LAYOUT_AUDIO,
+	BRASERO_SETTING_DISPLAY_LAYOUT_DATA,
+	BRASERO_SETTING_DISPLAY_LAYOUT_VIDEO,
+
+	/** gchar ** **/
+	BRASERO_SETTING_SEARCH_ENTRY_HISTORY,
+
+} BraseroSettingValue;
+
+#define BRASERO_TYPE_SETTING             (brasero_setting_get_type ())
+#define BRASERO_SETTING(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), BRASERO_TYPE_SETTING, BraseroSetting))
+#define BRASERO_SETTING_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), BRASERO_TYPE_SETTING, BraseroSettingClass))
+#define BRASERO_IS_SETTING(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BRASERO_TYPE_SETTING))
+#define BRASERO_IS_SETTING_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), BRASERO_TYPE_SETTING))
+#define BRASERO_SETTING_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), BRASERO_TYPE_SETTING, BraseroSettingClass))
+
+typedef struct _BraseroSettingClass BraseroSettingClass;
+typedef struct _BraseroSetting BraseroSetting;
+
+struct _BraseroSettingClass
+{
+	GObjectClass parent_class;
+
+	/* Signals */
+	void(* value_changed) (BraseroSetting *self, gint value);
+};
+
+struct _BraseroSetting
+{
+	GObject parent_instance;
+};
+
+GType brasero_setting_get_type (void) G_GNUC_CONST;
+
+BraseroSetting *
+brasero_setting_get_default ();
+
+gboolean
+brasero_setting_get_value (BraseroSetting *setting,
+                           BraseroSettingValue setting_value,
+                           gpointer *value);
+
+gboolean
+brasero_setting_set_value (BraseroSetting *setting,
+                           BraseroSettingValue setting_value,
+                           gconstpointer value);
+
+gboolean
+brasero_setting_load (BraseroSetting *setting);
+
+gboolean
+brasero_setting_save (BraseroSetting *setting);
+
+G_END_DECLS
+
+#endif /* _BRASERO_SETTING_H_ */
diff --git a/src/brasero-xsession.c b/src/brasero-xsession.c
index b944c0f..cc97877 100644
--- a/src/brasero-xsession.c
+++ b/src/brasero-xsession.c
@@ -70,9 +70,6 @@ brasero_session_save_state_cb (EggSMClient *client,
     	const gint argc = 3;
     	const gchar *argv [] = { "brasero", "-p", NULL, NULL };
 
-	/* Save the state of the window */
-	brasero_app_save_window_state (app);
-
 	/* Try to save its contents */
 	argv [2] = brasero_app_get_saved_contents (app);
 
diff --git a/src/main.c b/src/main.c
index 1547f03..c097f40 100644
--- a/src/main.c
+++ b/src/main.c
@@ -487,6 +487,8 @@ main (int argc, char **argv)
 		return 1;
 
 	brasero_app_parse_options (current_app);
+
+	g_object_unref (current_app);
 	current_app = NULL;
 
 	brasero_burn_library_stop ();



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