[sound-juicer/wip/gsettings: 1/3] Port SoundJuicer to gsettings



commit 49b5a57857297a515125738a95ae062662d06d34
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Sat Aug 6 16:07:16 2011 +0200

    Port SoundJuicer to gsettings
    
    This is an updated version of the changes to SoundJuicer made in the
    gsettings branch on git://people.freedesktop.org/~teuf/sound-juicer,
    including changes due to reviews of previous versions of the patches
    found on bgo #625897.

 configure.ac                         |   13 +-
 data/Makefile.am                     |   20 +-
 data/sound-juicer.schemas.in         |  220 ------
 libjuicer/sj-metadata-musicbrainz5.c |   46 +-
 po/POTFILES.in                       |    2 -
 sound-juicer.spec.in                 |   13 -
 src/Makefile.am                      |    2 -
 src/gconf-bridge.c                   | 1246 ----------------------------------
 src/gconf-bridge.h                   |  116 ----
 src/sj-main.c                        |  364 ++++------
 src/sj-play.c                        |    2 +-
 src/sj-prefs.c                       |  138 ++--
 src/sound-juicer.h                   |   44 +-
 tests/mb-test.c                      |   11 -
 14 files changed, 244 insertions(+), 1993 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 97e3cbd..c49b83c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -33,6 +33,7 @@ GNOME_DEBUG_CHECK
 GNOME_MAINTAINER_MODE_DEFINES
 
 GTK_REQUIRED=3.2.0
+GLIB_GSETTINGS
 
 AC_CHECK_FUNC(socket,,[AC_CHECK_LIB(socket,socket)])
 
@@ -40,7 +41,7 @@ AC_CHECK_FUNC(socket,,[AC_CHECK_LIB(socket,socket)])
 GNOME_DOC_INIT
 
 # Find GLib and GObject
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.32 gthread-2.0 gobject-2.0)
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.32 gthread-2.0 gobject-2.0 gio-2.0)
 AC_SUBST(GLIB_CFLAGS)
 AC_SUBST(GLIB_LIBS)
 
@@ -56,7 +57,7 @@ LIBS="$LIBS $BURN_LIBS"
 # LIBS="$oldlibs"
 
 # Find the UI libraries
-PKG_CHECK_MODULES(UI, gtk+-3.0 >= $GTK_REQUIRED gconf-2.0 gio-2.0 gmodule-export-2.0 libcanberra-gtk3)
+PKG_CHECK_MODULES(UI, gtk+-3.0 >= $GTK_REQUIRED gio-2.0 gmodule-export-2.0 libcanberra-gtk3)
 AC_SUBST(UI_CFLAGS)
 AC_SUBST(UI_LIBS)
 
@@ -93,14 +94,6 @@ PKG_CHECK_MODULES(GIO, gio-2.0)
 AC_SUBST(GIO_CFLAGS)
 AC_SUBST(GIO_LIBS)
 
-# Find how and where to put the GConf schemas
-AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
-if test "$GCONFTOOL" = "no"; then
-        AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
-fi
-AM_GCONF_SOURCE_2
-
-
 # Optionally enable G* deprecations
 AC_MSG_CHECKING([whether to enable deprecation warnings])
 AC_ARG_ENABLE([deprecations],
diff --git a/data/Makefile.am b/data/Makefile.am
index b752400..8ca00d0 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -6,11 +6,6 @@ desktop_in_files = sound-juicer.desktop.in.in
 desktop_DATA = $(desktop_in_files:.desktop.in.in=.desktop)
 @INTLTOOL_DESKTOP_RULE@
 
-schemadir = $(GCONF_SCHEMA_FILE_DIR)
-schema_in_files = sound-juicer.schemas.in
-schema_DATA = $(schema_in_files:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
-
 profilesdir = $(datadir)/sound-juicer
 dist_profiles_DATA = rhythmbox.gep
 
@@ -62,27 +57,14 @@ uninstall-icons:
 
 install-data-local: install-icons
 install-data-hook: update-icon-cache
-if GCONF_SCHEMAS_INSTALL
-       @if test -z "$(DESTDIR)" ; then \
-               for p in $(schema_DATA) ; do \
-                       GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) 
--makefile-install-rule $$p 2>&1 > /dev/null; \
-               done \
-       fi ||  (echo ;\
-                echo "*****************************************************"; \
-                echo "Installation of schemas failed, install them manually"; \
-                echo "*****************************************************";)
-       @true
-endif
 
 uninstall-local: uninstall-icons
 uninstall-hook: update-icon-cache
 
 CLEANFILES = \
-       $(desktop_DATA) \
-       $(schema_DATA)
+       $(desktop_DATA)
 
 EXTRA_DIST = \
-       $(schema_in_files) \
        $(man1_MANS) \
        $(icons)
 
diff --git a/libjuicer/sj-metadata-musicbrainz5.c b/libjuicer/sj-metadata-musicbrainz5.c
index 9604449..94a5925 100644
--- a/libjuicer/sj-metadata-musicbrainz5.c
+++ b/libjuicer/sj-metadata-musicbrainz5.c
@@ -26,9 +26,9 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <gio/gio.h>
 #include <glib.h>
 #include <glib-object.h>
-#include <gconf/gconf-client.h>
 #include <discid/discid.h>
 #include <musicbrainz5/mb5_c.h>
 
@@ -46,14 +46,12 @@
                field = g_strdup (buffer);                                      \
 }
 
-#define GCONF_MUSICBRAINZ_SERVER "/apps/sound-juicer/musicbrainz_server"
-#define GCONF_PROXY_USE_PROXY "/system/http_proxy/use_http_proxy"
-#define GCONF_PROXY_HOST "/system/http_proxy/host"
-#define GCONF_PROXY_PORT "/system/http_proxy/port"
-#define GCONF_PROXY_USE_AUTHENTICATION "/system/http_proxy/use_authentication"
-#define GCONF_PROXY_USERNAME "/system/http_proxy/authentication_user"
-#define GCONF_PROXY_PASSWORD "/system/http_proxy/authentication_password"
-#define SJ_MUSICBRAINZ_USER_AGENT "libjuicer-"VERSION
+#define SJ_SETTINGS_PROXY_USE_PROXY "enabled"
+#define SJ_SETTINGS_PROXY_HOST "host"
+#define SJ_SETTINGS_PROXY_PORT "port"
+#define SJ_SETTINGS_PROXY_USE_AUTHENTICATION "use-authentication"
+#define SJ_SETTINGS_PROXY_USERNAME "authentication-user"
+#define SJ_SETTINGS_PROXY_PASSWORD "authentication-password"
 
 typedef struct {
   Mb5Query mb;
@@ -653,52 +651,40 @@ metadata_interface_init (gpointer g_iface, gpointer iface_data)
 static void
 sj_metadata_musicbrainz5_init (SjMetadataMusicbrainz5 *self)
 {
-  GConfClient *gconf_client;
-  gchar *server_name;
+  GSettings *settings;
 
   SjMetadataMusicbrainz5Private *priv;
 
   priv = GET_PRIVATE (self);
 
-  gconf_client = gconf_client_get_default ();
-
-  server_name = gconf_client_get_string (gconf_client, GCONF_MUSICBRAINZ_SERVER, NULL);
-
-  if (server_name && (*server_name == '\0')) {
-    g_free (server_name);
-    server_name = NULL;
-  }
-
-  priv->mb = mb5_query_new (SJ_MUSICBRAINZ_USER_AGENT, server_name, 0);
-  g_free (server_name);
-
+  settings = g_settings_new ("org.gnome.system.proxy.http");
 
   /* Set the HTTP proxy */
-  if (gconf_client_get_bool (gconf_client, GCONF_PROXY_USE_PROXY, NULL)) {
+  if (g_settings_get_boolean (settings, SJ_SETTINGS_PROXY_USE_PROXY)) {
     char *proxy_host;
     int port;
 
-    proxy_host = gconf_client_get_string (gconf_client, GCONF_PROXY_HOST, NULL);
+    proxy_host = g_settings_get_string (settings, SJ_SETTINGS_PROXY_HOST);
     mb5_query_set_proxyhost (priv->mb, proxy_host);
     g_free (proxy_host);
 
-    port = gconf_client_get_int (gconf_client, GCONF_PROXY_PORT, NULL);
+    port = g_settings_get_int (settings, SJ_SETTINGS_PROXY_PORT);
     mb5_query_set_proxyport (priv->mb, port);
 
-    if (gconf_client_get_bool (gconf_client, GCONF_PROXY_USE_AUTHENTICATION, NULL)) {
+    if (g_settings_get_boolean (settings, SJ_SETTINGS_PROXY_USE_AUTHENTICATION)) {
       char *username, *password;
 
-      username = gconf_client_get_string (gconf_client, GCONF_PROXY_USERNAME, NULL);
+      username = g_settings_get_string (settings, SJ_SETTINGS_PROXY_USERNAME);
       mb5_query_set_proxyusername (priv->mb, username);
       g_free (username);
 
-      password = gconf_client_get_string (gconf_client, GCONF_PROXY_PASSWORD, NULL);
+      password = g_settings_get_string (settings, SJ_SETTINGS_PROXY_PASSWORD);
       mb5_query_set_proxypassword (priv->mb, password);
       g_free (password);
     }
   }
 
-  g_object_unref (gconf_client);
+  g_object_unref (settings);
 }
 
 static void
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6f59d83..03926a3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,7 +2,6 @@
 # Please keep this file sorted alphabetically.
 [encoding: UTF-8]
 data/sound-juicer.desktop.in.in
-data/sound-juicer.schemas.in
 [type: gettext/glade]data/sound-juicer.ui
 [type: gettext/glade]data/sound-juicer-menu.ui
 libjuicer/sj-error.c
@@ -13,7 +12,6 @@ libjuicer/sj-metadata-gvfs.c
 libjuicer/sj-structures.c
 libjuicer/sj-util.c
 src/egg-play-preview.c
-src/gconf-bridge.c
 src/sj-about.c
 src/sj-extracting.c
 src/sj-genres.c
diff --git a/sound-juicer.spec.in b/sound-juicer.spec.in
index 4c3e4ff..d2f7420 100644
--- a/sound-juicer.spec.in
+++ b/sound-juicer.spec.in
@@ -10,13 +10,11 @@ Requires:   libmusicbrainz >= 2.0.1
 Requires:      libgnomeui >= 2.0.0
 Requires:      glib2 >= 2.0.0
 Requires:      gstreamer >= 0.8.0
-Requires:      GConf2 >= 2.0.0
 Requires:      gstreamer-plugins-base >= 0.7.2
 BuildRequires: libmusicbrainz-devel >= 2.0.1
 BuildRequires: libgnomeui-devel >= 2.0.0
 BuildRequires: glib2-devel >= 2.0.0
 BuildRequires: gstreamer-devel >= 0.8.0
-BuildRequires: GConf2-devel >= 2.0.0
 BuildRequires:  scrollkeeper >= @SCROLLKEEPER_BUILD_REQUIRED@
 
 %description
@@ -31,9 +29,7 @@ GStreamer-based CD ripping tool. Saves audio CDs to Ogg Vorbis or FLAC.
 
 make
 
-export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1;
 %makeinstall
-unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
 
 # Clean out bad files
 rm -rf $RPM_BUILD_ROOT%{_localstatedir}/scrollkeeper
@@ -45,19 +41,10 @@ rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/icon-theme.cache
 %clean
 [ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT
 
-%preun
-export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` 
-gconftool-2 --makefile-uninstall-rule %{_sysconfdir}/gconf/schemas/sound-juicer.schemas > /dev/null
-
-%post
-export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` 
-gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/sound-juicer.schemas > /dev/null
-
 %files -f sound-juicer.lang
 %defattr(-, root, root)
 %doc AUTHORS COPYING ChangeLog INSTALL README NEWS
 %{_bindir}/sound-juicer
-%{_sysconfdir}/gconf/schemas/sound-juicer.schemas
 %{_datadir}/sound-juicer
 %{_datadir}/applications/sound-juicer.desktop
 %{_datadir}/icons/hicolor/16x16
diff --git a/src/Makefile.am b/src/Makefile.am
index dbb1734..37b2d9c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,8 +16,6 @@ sound_juicer_SOURCES = \
        sj-inhibit.c \
        sj-genres.h \
        sj-genres.c \
-       gconf-bridge.h \
-       gconf-bridge.c \
        egg-play-preview.c \
        egg-play-preview.h
 
diff --git a/src/sj-main.c b/src/sj-main.c
index 48a40b4..baf42cb 100644
--- a/src/sj-main.c
+++ b/src/sj-main.c
@@ -35,13 +35,11 @@
 #include <gdk/gdkkeysyms.h>
 #include <gio/gio.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <brasero-medium-selection.h>
 #include <brasero-volume.h>
 #include <gst/gst.h>
 #include <gst/pbutils/encoding-profile.h>
 
-#include "gconf-bridge.h"
 #include "rb-gst-media-types.h"
 #include "sj-about.h"
 #include "sj-metadata.h"
@@ -71,7 +69,8 @@ GtkBuilder *builder;
 SjMetadataGetter *metadata;
 SjExtractor *extractor;
 
-GConfClient *gconf_client;
+GSettings *sj_settings;
+GSettings *http_settings;
 
 GtkWidget *main_window;
 static GtkWidget *message_area_eventbox;
@@ -1070,128 +1069,96 @@ AlbumDetails* multiple_album_dialog(GList *albums)
 }
 
 /**
- * The GConf key for the base path changed
+ * The GSettings key for the base path changed
  */
-static void baseuri_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void baseuri_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_BASEURI) == 0);
+  gchar *value;
+  g_assert (strcmp (key, SJ_SETTINGS_BASEURI) == 0);
   if (base_uri) {
     g_object_unref (base_uri);
   }
-  if (entry->value == NULL) {
+  value = g_settings_get_string (settings, key);
+  if ((value == NULL) || (*value == '\0')) {
     base_uri = sj_get_default_music_directory ();
   } else {
-    base_uri = g_file_new_for_uri (gconf_value_get_string (entry->value));
+    base_uri = g_file_new_for_uri (value);
   }
+  g_free (value);
   /* TODO: sanity check the URI somewhat */
 }
 
 /**
- * The GConf key for the directory pattern changed
+ * The GSettings key for the directory pattern changed
  */
-static void path_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void path_pattern_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_PATH_PATTERN) == 0);
-
-  if (path_pattern)
-    g_free (path_pattern);
-
-  if (entry->value == NULL) {
-    /* TODO: this value and the value in sj-prefs need to be in one place */
-    path_pattern = g_strdup ("%aa/%at");
-  } else {
-    path_pattern = g_strdup (gconf_value_get_string (entry->value));
-  }
+  g_assert (strcmp (key, SJ_SETTINGS_PATH_PATTERN) == 0);
+  g_free (path_pattern);
+  path_pattern = g_settings_get_string (settings, key);
   /* TODO: sanity check the pattern */
 }
 
 /**
- * The GConf key for the filename pattern changed
+ * The GSettings key for the filename pattern changed
  */
-static void file_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void file_pattern_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_FILE_PATTERN) == 0);
-
-  if (file_pattern)
-    g_free (file_pattern);
-
-  if (entry->value == NULL) {
-    /* TODO: this value and the value in sj-prefs need to be in one place */
-    file_pattern = g_strdup ("%tN-%tt");
-  } else {
-    file_pattern = g_strdup (gconf_value_get_string (entry->value));
-  }
+  g_assert (strcmp (key, SJ_SETTINGS_FILE_PATTERN) == 0);
+  g_free (file_pattern);
+  file_pattern = g_settings_get_string (settings, key);
   /* TODO: sanity check the pattern */
 }
 
 /**
- * The GConf key for the paranoia mode has changed
+ * The GSettings key for the paranoia mode has changed
  */
-static void paranoia_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void paranoia_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_PARANOIA) == 0);
-  if (entry->value == NULL) {
-    sj_extractor_set_paranoia (extractor, DEFAULT_PARANOIA);
-  } else {
-    int value = gconf_value_get_int (entry->value);
-    if (value == 0 || value == 2 || value == 4 || value == 8 || value == 16 || value == 255) {
-      sj_extractor_set_paranoia (extractor, value);
-    }
+  int value;
+  g_assert (strcmp (key, SJ_SETTINGS_PARANOIA) == 0);
+  value = g_settings_get_enum (settings, key);
+  if (value == 0 || value == 2 || value == 4 || value == 8 || value == 16 || value == 255) {
+    sj_extractor_set_paranoia (extractor, value);
   }
 }
 
 /**
- * The GConf key for the strip characters option changed
+ * The GSettings key for the strip characters option changed
  */
-static void strip_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void strip_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_STRIP) == 0);
-  if (entry->value == NULL) {
-    strip_chars = FALSE;
-  } else {
-    strip_chars = gconf_value_get_bool (entry->value);
-  }
+  g_assert (strcmp (key, SJ_SETTINGS_STRIP) == 0);
+  strip_chars = g_settings_get_boolean (settings, key);
 }
 
 /**
- * The GConf key for the eject when finished option changed
+ * The GSettings key for the eject when finished option changed
  */
-static void eject_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void eject_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_EJECT) == 0);
-  if (entry->value == NULL) {
-    eject_finished = FALSE;
-  } else {
-    eject_finished = gconf_value_get_bool (entry->value);
-  }
+  g_assert (strcmp (key, SJ_SETTINGS_EJECT) == 0);
+  eject_finished = g_settings_get_boolean (settings, key);
 }
 
 /**
- * The GConf key for the open when finished option changed
+ * The GSettings key for the open when finished option changed
  */
-static void open_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void open_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_OPEN) == 0);
-  if (entry->value == NULL) {
-    open_finished = FALSE;
-  } else {
-    open_finished = gconf_value_get_bool (entry->value);
-  }
+  g_assert (strcmp (key, SJ_SETTINGS_OPEN) == 0);
+  open_finished = g_settings_get_boolean (settings, key);
 }
 
 /**
- * The GConf key for audio volume changes
+ * The GSettings key for audio volume changes
  */
-static void audio_volume_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void audio_volume_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_AUDIO_VOLUME) == 0);
+  g_assert (strcmp (key, SJ_SETTINGS_AUDIO_VOLUME) == 0);
 
   GtkWidget *volb = GET_WIDGET ("volume_button");
-  if (entry->value == NULL) {
-    gtk_scale_button_set_value (GTK_SCALE_BUTTON (volb), 1.0);
-  } else {
-    gtk_scale_button_set_value (GTK_SCALE_BUTTON (volb), gconf_value_get_float (entry->value));
-  }
+  gtk_scale_button_set_value (GTK_SCALE_BUTTON (volb), g_settings_get_double (settings, key));
 }
 
 static void
@@ -1506,15 +1473,17 @@ prefs_get_default_device (void)
 }
 
 /**
- * The GConf key for the device changed
+ * The GSettings key for the device changed
  */
-static void device_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void device_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
   const char *device;
+  char *value;
   gboolean ignore_no_media = GPOINTER_TO_INT (user_data);
-  g_assert (strcmp (entry->key, GCONF_DEVICE) == 0);
+  g_assert (strcmp (key, SJ_SETTINGS_DEVICE) == 0);
 
-  if (entry->value == NULL || !cd_drive_exists (gconf_value_get_string (entry->value))) {
+  value = g_settings_get_string (settings, key);
+  if (!cd_drive_exists (value)) {
     device = prefs_get_default_device();
     if (device == NULL) {
 #ifndef IGNORE_MISSING_CD
@@ -1532,20 +1501,21 @@ static void device_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *e
 #endif
     }
   } else {
-    device = gconf_value_get_string (entry->value);
+    device = value;
   }
   set_device (device, ignore_no_media);
+  g_free (value);
 }
 
-static void profile_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void profile_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
   GstEncodingProfile *profile;
-  const char *media_type;
+  char *media_type;
 
-  g_assert (strcmp (entry->key, GCONF_AUDIO_PROFILE_MEDIA_TYPE) == 0);
-  if (!entry->value) return;
-  media_type = gconf_value_get_string (entry->value);
+  g_assert (strcmp (key, SJ_SETTINGS_AUDIO_PROFILE) == 0);
+  media_type = g_settings_get_string (settings, key);
   profile = rb_gst_get_encoding_profile (media_type);
+  g_free (media_type);
   if (profile != NULL)
     g_object_set (extractor, "profile", profile, NULL);
 
@@ -1578,50 +1548,47 @@ static void profile_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *
  * Configure the http proxy
  */
 static void
-http_proxy_setup (GConfClient *client)
+http_proxy_setup (GSettings *settings)
 {
-  if (!gconf_client_get_bool (client, GCONF_HTTP_PROXY_ENABLE, NULL)) {
+  if (!g_settings_get_boolean (settings, SJ_SETTINGS_HTTP_PROXY_ENABLE)) {
     sj_metadata_getter_set_proxy (metadata, NULL);
   } else {
     char *host;
     int port;
 
-    host = gconf_client_get_string (client, GCONF_HTTP_PROXY, NULL);
+    host = g_settings_get_string (settings, SJ_SETTINGS_HTTP_PROXY);
     sj_metadata_getter_set_proxy (metadata, host);
     g_free (host);
-    port = gconf_client_get_int (client, GCONF_HTTP_PROXY_PORT, NULL);
+    port = g_settings_get_int (settings, SJ_SETTINGS_HTTP_PROXY_PORT);
     sj_metadata_getter_set_proxy_port (metadata, port);
   }
 }
 
 /**
- * The GConf key for the HTTP proxy being enabled changed.
+ * The GSettings key for the HTTP proxy being enabled changed.
  */
-static void http_proxy_enable_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void http_proxy_enable_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_HTTP_PROXY_ENABLE) == 0);
-  if (entry->value == NULL) return;
-  http_proxy_setup (client);
+  g_assert (strcmp (key, SJ_SETTINGS_HTTP_PROXY_ENABLE) == 0);
+  http_proxy_setup (settings);
 }
 
 /**
- * The GConf key for the HTTP proxy changed.
+ * The GSettings key for the HTTP proxy changed.
  */
-static void http_proxy_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void http_proxy_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_HTTP_PROXY) == 0);
-  if (entry->value == NULL) return;
-  http_proxy_setup (client);
+  g_assert (strcmp (key, SJ_SETTINGS_HTTP_PROXY) == 0);
+  http_proxy_setup (settings);
 }
 
 /**
- * The GConf key for the HTTP proxy port changed.
+ * The GSettings key for the HTTP proxy port changed.
  */
-static void http_proxy_port_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void http_proxy_port_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_assert (strcmp (entry->key, GCONF_HTTP_PROXY_PORT) == 0);
-  if (entry->value == NULL) return;
-  http_proxy_setup (client);
+  g_assert (strcmp (key, SJ_SETTINGS_HTTP_PROXY_PORT) == 0);
+  http_proxy_setup (settings);
 }
 
 /**
@@ -1953,28 +1920,6 @@ static void on_contents_activate(GSimpleAction *action, GVariant *parameter, gpo
   }
 }
 
-static void
-upgrade_gconf (void)
-{
-  char *s;
-  s = gconf_client_get_string (gconf_client, GCONF_BASEURI, NULL);
-  if (s != NULL) {
-    g_free (s);
-  } else {
-    GFile *gfile;
-    char *uri;
-    s = gconf_client_get_string (gconf_client, GCONF_BASEPATH, NULL);
-    if (s == NULL)
-      return;
-    gfile = g_file_new_for_path (s);
-    uri = g_file_get_uri (gfile);
-    g_free (s);
-    g_object_unref (gfile);
-    gconf_client_set_string (gconf_client, GCONF_BASEURI, uri, NULL);
-    g_free (uri);
-  }
-}
-
 /**
  * Performs various checks to ensure CD duplication is available.
  * If this is found TRUE is returned, otherwise FALSE is returned.
@@ -2050,29 +1995,37 @@ startup_cb (GApplication *app, gpointer user_data)
   metadata = sj_metadata_getter_new ();
   g_signal_connect (metadata, "metadata", G_CALLBACK (metadata_cb), NULL);
 
-  gconf_client = gconf_client_get_default ();
-  if (gconf_client == NULL) {
-    g_warning (_("Could not create GConf client.\n"));
-    exit (1);
-  }
-
-  upgrade_gconf ();
-
-  gconf_client_add_dir (gconf_client, GCONF_ROOT, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_DEVICE, device_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_EJECT, eject_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_OPEN, open_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_BASEURI, baseuri_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_STRIP, strip_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_AUDIO_PROFILE_MEDIA_TYPE, profile_changed_cb, NULL, NULL, 
NULL);
-  gconf_client_notify_add (gconf_client, GCONF_PARANOIA, paranoia_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_PATH_PATTERN, path_pattern_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_FILE_PATTERN, file_pattern_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_AUDIO_VOLUME, audio_volume_changed_cb, NULL, NULL, NULL);
-  gconf_client_add_dir (gconf_client, GCONF_PROXY_ROOT, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_HTTP_PROXY_ENABLE, http_proxy_enable_changed_cb, NULL, NULL, 
NULL);
-  gconf_client_notify_add (gconf_client, GCONF_HTTP_PROXY, http_proxy_changed_cb, NULL, NULL, NULL);
-  gconf_client_notify_add (gconf_client, GCONF_HTTP_PROXY_PORT, http_proxy_port_changed_cb, NULL, NULL, 
NULL);
+  sj_settings = g_settings_new ("org.gnome.SoundJuicer");
+
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_DEVICE,
+                    (GCallback)device_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_EJECT,
+                    (GCallback)eject_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_OPEN,
+                    (GCallback)open_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_BASEURI,
+                    (GCallback)baseuri_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_STRIP,
+                    (GCallback)strip_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_AUDIO_PROFILE,
+                    (GCallback)profile_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_PARANOIA,
+                    (GCallback)paranoia_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_PATH_PATTERN,
+                    (GCallback)path_pattern_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_FILE_PATTERN,
+                    (GCallback)file_pattern_changed_cb, NULL);
+  g_signal_connect (sj_settings, "changed::"SJ_SETTINGS_AUDIO_VOLUME,
+                    (GCallback)audio_volume_changed_cb, NULL);
+
+  http_settings = g_settings_new ("org.gnome.system.proxy.http");
+
+  g_signal_connect (http_settings, "changed::"SJ_SETTINGS_HTTP_PROXY_ENABLE,
+                    (GCallback)http_proxy_enable_changed_cb, NULL);
+  g_signal_connect (http_settings, "changed::"SJ_SETTINGS_HTTP_PROXY,
+                    (GCallback)http_proxy_changed_cb, NULL);
+  g_signal_connect (http_settings, "changed::"SJ_SETTINGS_HTTP_PROXY_PORT,
+                    (GCallback)http_proxy_port_changed_cb, NULL);
 
   g_action_map_add_action_entries (G_ACTION_MAP (app),
                                    app_entries, G_N_ELEMENTS (app_entries),
@@ -2299,80 +2252,40 @@ startup_cb (GApplication *app, gpointer user_data)
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (track_listview));
   gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
 
-  {
-    GConfEntry *entry;
-    http_proxy_setup (gconf_client);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_BASEURI, NULL, TRUE, NULL);
-    baseuri_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_PATH_PATTERN, NULL, TRUE, NULL);
-    path_pattern_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_FILE_PATTERN, NULL, TRUE, NULL);
-    file_pattern_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_AUDIO_PROFILE_MEDIA_TYPE, NULL, TRUE, NULL);
-    profile_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_PARANOIA, NULL, TRUE, NULL);
-    paranoia_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_STRIP, NULL, TRUE, NULL);
-    strip_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_EJECT, NULL, TRUE, NULL);
-    eject_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_OPEN, NULL, TRUE, NULL);
-    open_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    entry = gconf_client_get_entry (gconf_client, GCONF_AUDIO_VOLUME, NULL, TRUE, NULL);
-    audio_volume_changed_cb (gconf_client, -1, entry, NULL);
-    gconf_entry_unref (entry);
-
-    if (device == NULL && uris == NULL) {
-      entry = gconf_client_get_entry (gconf_client, GCONF_DEVICE, NULL, TRUE, NULL);
-      device_changed_cb (gconf_client, -1, entry, GINT_TO_POINTER (TRUE));
-      gconf_entry_unref (entry);
-    } else {
-      if (device) {
-#ifdef __sun
-        if (strstr(device, "/dev/dsk/") != NULL ) {
-          device = g_strdup_printf("/dev/rdsk/%s", device + strlen("/dev/dsk/"));
-        }
-#endif
-        set_device (device, TRUE);
+  http_proxy_setup (http_settings);
+  baseuri_changed_cb (sj_settings, SJ_SETTINGS_BASEURI, NULL);
+  path_pattern_changed_cb (sj_settings, SJ_SETTINGS_PATH_PATTERN, NULL);
+  file_pattern_changed_cb (sj_settings, SJ_SETTINGS_FILE_PATTERN, NULL);
+  profile_changed_cb (sj_settings, SJ_SETTINGS_AUDIO_PROFILE, NULL);
+  paranoia_changed_cb (sj_settings, SJ_SETTINGS_PARANOIA, NULL);
+  strip_changed_cb (sj_settings, SJ_SETTINGS_STRIP, NULL);
+  eject_changed_cb (sj_settings, SJ_SETTINGS_EJECT, NULL);
+  open_changed_cb (sj_settings, SJ_SETTINGS_OPEN, NULL);
+  audio_volume_changed_cb (sj_settings, SJ_SETTINGS_AUDIO_VOLUME, NULL);
+  if (device == NULL && uris == NULL) {
+    /* FIXME: this should set the device gsettings key to a meaningful
+     * value if it's empty (which is the case until the user changes it in
+     * the prefs)
+     */
+    device_changed_cb (sj_settings, SJ_SETTINGS_DEVICE, NULL);
+  } else {
+    if (device)
+      set_device (device, TRUE);
+    else {
+      char *d;
+
+      /* Mash up the CDDA URIs into a device path */
+      if (g_str_has_prefix (uris[0], "cdda://")) {
+        gint len;
+        d = g_strdup_printf ("/dev/%s%c", uris[0] + strlen ("cdda://"), '\0');
+        /* Take last '/' out of path, or set_device thinks it is part of the device name */
+      len = strlen (d);
+      if (d[len - 1] == '/')
+          d [len - 1] = '\0';
+      set_device (d, TRUE);
+      g_free (d);
       } else {
-        char *d;
-
-        /* Mash up the CDDA URIs into a device path */
-        if (g_str_has_prefix (uris[0], "cdda://")) {
-          gint len;
-#ifdef __sun
-          d = g_strdup_printf ("/dev/rdsk/%s", uris[0] + strlen ("cdda://"));
-#else
-          d = g_strdup_printf ("/dev/%s%c", uris[0] + strlen ("cdda://"), '\0');
-#endif
-          /* Take last '/' out of path, or set_device thinks it is part of the device name */
-          len = strlen (d);
-          if (d[len - 1] == '/')
-              d [len - 1] = '\0';
-          set_device (d, TRUE);
-          g_free (d);
-        } else {
-          entry = gconf_client_get_entry (gconf_client, GCONF_DEVICE, NULL, TRUE, NULL);
-          device_changed_cb (gconf_client, -1, entry, GINT_TO_POINTER (TRUE));
-          gconf_entry_unref (entry);
-        }
+        device_changed_cb (sj_settings, SJ_SETTINGS_DEVICE, NULL);
       }
     }
   }
@@ -2386,7 +2299,7 @@ startup_cb (GApplication *app, gpointer user_data)
   set_action_enabled ("duplicate", FALSE);
   duplication_enabled = is_cd_duplication_available();
 
-  gconf_bridge_bind_window_size(gconf_bridge_get(), GCONF_WINDOW, GTK_WINDOW (main_window));
+  /*gconf_bridge_bind_window_size(gconf_bridge_get(), GCONF_WINDOW, GTK_WINDOW (main_window));*/
 
   gtk_application_add_window (GTK_APPLICATION (app), GTK_WINDOW (main_window));
   gtk_widget_show (main_window);
@@ -2463,7 +2376,8 @@ int main (int argc, char **argv)
   g_object_unref (base_uri);
   g_object_unref (metadata);
   g_object_unref (extractor);
-  g_object_unref (gconf_client);
+  g_object_unref (sj_settings);
+  g_object_unref (http_settings);
   brasero_media_library_stop ();
 
   return status;
diff --git a/src/sj-play.c b/src/sj-play.c
index 1deff8c..b4c83fc 100644
--- a/src/sj-play.c
+++ b/src/sj-play.c
@@ -532,7 +532,7 @@ on_volume_changed (GtkWidget * volb, gdouble value, gpointer data)
   vol = value;
   if (pipeline)
     g_object_set (G_OBJECT (pipeline), "volume", vol, NULL);
-  gconf_client_set_float (gconf_client, GCONF_AUDIO_VOLUME, vol, NULL);
+  g_settings_set_double (sj_settings, SJ_SETTINGS_AUDIO_VOLUME, vol);
 }
 
 static gboolean
diff --git a/src/sj-prefs.c b/src/sj-prefs.c
index 7ce30af..bdc2333 100644
--- a/src/sj-prefs.c
+++ b/src/sj-prefs.c
@@ -29,12 +29,10 @@
 #include <string.h>
 #include <gst/pbutils/encoding-profile.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 #include <brasero-drive-selection.h>
 
 #include "rb-gst-media-types.h"
 #include "sj-util.h"
-#include "gconf-bridge.h"
 #include "sj-extracting.h"
 #include "sj-prefs.h"
 
@@ -95,8 +93,7 @@ void prefs_profile_changed (GtkWidget *widget, gpointer user_data)
     char *media_type;
     gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
                         0, &media_type, -1);
-    gconf_client_set_string (gconf_client, GCONF_AUDIO_PROFILE_MEDIA_TYPE,
-                             media_type, NULL);
+    g_settings_set_string (sj_settings, SJ_SETTINGS_AUDIO_PROFILE, media_type);
     g_free (media_type);
   }
 }
@@ -134,11 +131,11 @@ G_MODULE_EXPORT void prefs_base_folder_changed (GtkWidget *chooser, gpointer use
 {
   char *new_uri, *current_uri;
 
-  current_uri = gconf_client_get_string (gconf_client, GCONF_BASEURI, NULL);
+  current_uri = g_settings_get_string (sj_settings, SJ_SETTINGS_BASEURI);
   new_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (chooser));
 
   if (current_uri == NULL || strcmp(current_uri, new_uri) != 0) {
-      gconf_client_set_string (gconf_client, GCONF_BASEURI, new_uri, NULL);
+      g_settings_set_string (sj_settings, SJ_SETTINGS_BASEURI, new_uri);
   }
 
   g_free (new_uri);
@@ -155,7 +152,7 @@ void prefs_path_option_changed (GtkComboBox *combo, gpointer user_data)
 
   pattern = path_patterns[active].pattern;
   if (pattern) {
-    gconf_client_set_string (gconf_client, GCONF_PATH_PATTERN, pattern, NULL);
+    g_settings_set_string (sj_settings, SJ_SETTINGS_PATH_PATTERN, pattern);
   }
 }
 
@@ -169,7 +166,7 @@ G_MODULE_EXPORT void prefs_file_option_changed (GtkComboBox *combo, gpointer use
 
   pattern = file_patterns[active].pattern;
   if (pattern) {
-    gconf_client_set_string (gconf_client, GCONF_FILE_PATTERN, pattern, NULL);
+    g_settings_set_string (sj_settings, SJ_SETTINGS_FILE_PATTERN, pattern);
   }
 }
 
@@ -200,17 +197,16 @@ sj_audio_profile_chooser_set_active (GtkWidget *chooser, const char *profile)
   }
 }
 
-static void audio_profile_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void audio_profile_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  const char *value;
-  g_return_if_fail (strcmp (entry->key, GCONF_AUDIO_PROFILE_MEDIA_TYPE) == 0);
-  if (!entry->value) return;
-  value = gconf_value_get_string (entry->value);
-
+  char *value;
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_AUDIO_PROFILE) == 0);
+  value = g_settings_get_string (settings, key);
   sj_audio_profile_chooser_set_active (audio_profile, value);
+  g_free (value);
 }
 
-static void baseuri_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void baseuri_changed_cb  (GSettings *settings, gchar *key, gpointer user_data)
 {
   /*
    * The conflict between separation of the prefs and the main window,
@@ -220,11 +216,9 @@ static void baseuri_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *
    * into sj-utils?
    */
   const char* base_uri, *current_uri;
-  g_return_if_fail (strcmp (entry->key, GCONF_BASEURI) == 0);
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_BASEURI) == 0);
 
-  base_uri = NULL;
-  if (entry->value != NULL)
-    base_uri = gconf_value_get_string (entry->value);
+  base_uri = g_settings_get_string (settings, key);
 
   if (base_uri == NULL || base_uri[0] == '\0') {
     GFile *dir;
@@ -236,7 +230,6 @@ static void baseuri_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *
     g_free (dir_uri);
     g_object_unref (dir);
   } else {
-    g_return_if_fail (entry->value->type == GCONF_VALUE_STRING);
     current_uri = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (basepath_fcb));
     if (current_uri == NULL || strcmp (current_uri, base_uri) != 0)
       gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (basepath_fcb), base_uri);
@@ -285,11 +278,11 @@ static void pattern_label_update (void)
   gst_encoding_profile_unref (profile);
 
   /* TODO: sucky. Replace with get-gconf-key-with-default mojo */
-  file_pattern = gconf_client_get_string (gconf_client, GCONF_FILE_PATTERN, NULL);
+  file_pattern = g_settings_get_string (sj_settings, SJ_SETTINGS_FILE_PATTERN);
   if (file_pattern == NULL) {
     file_pattern = g_strdup(file_patterns[0].pattern);
   }
-  path_pattern = gconf_client_get_string (gconf_client, GCONF_PATH_PATTERN, NULL);
+  path_pattern = g_settings_get_string (sj_settings, SJ_SETTINGS_PATH_PATTERN);
   if (path_pattern == NULL) {
     path_pattern = g_strdup(path_patterns[0].pattern);
   }
@@ -317,18 +310,13 @@ static void pattern_label_update (void)
   g_free (format);
 }
 
-static void path_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void path_pattern_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
   char *value;
   int i = 0;
-  g_return_if_fail (strcmp (entry->key, GCONF_PATH_PATTERN) == 0);
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_PATH_PATTERN) == 0);
 
-  if (entry->value == NULL) {
-    value = g_strdup (path_patterns[0].pattern);
-  } else if (entry->value->type == GCONF_VALUE_STRING) {
-    value = g_strdup (gconf_value_get_string (entry->value));
-  } else
-    return;
+  value = g_settings_get_string (settings, key);
   while (path_patterns[i].pattern && strcmp(path_patterns[i].pattern, value) != 0) {
     i++;
   }
@@ -337,19 +325,15 @@ static void path_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEn
   pattern_label_update ();
 }
 
-static void file_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer 
user_data)
+static void file_pattern_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
   char *value;
   int i = 0;
 
-  g_return_if_fail (strcmp (entry->key, GCONF_FILE_PATTERN) == 0);
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_FILE_PATTERN) == 0);
+
+  value = g_settings_get_string (settings, key);
 
-  if (entry->value == NULL) {
-    value = g_strdup (file_patterns[0].pattern);
-  } else if (entry->value->type == GCONF_VALUE_STRING) {
-    value = g_strdup (gconf_value_get_string (entry->value));
-  } else
-    return;
   while (file_patterns[i].pattern && strcmp(file_patterns[i].pattern, value) != 0) {
     i++;
   }
@@ -359,50 +343,51 @@ static void file_pattern_changed_cb (GConfClient *client, guint cnxn_id, GConfEn
 }
 
 /**
- * Default device changed (either GConf key or the widget)
+ * Default device changed (either GSettings key or the widget)
  */
-static void device_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void device_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
-  g_return_if_fail (strcmp (entry->key, GCONF_DEVICE) == 0);
-
-  if (entry->value == NULL)
-    return;
+  BraseroDrive *drive;
+  BraseroMediumMonitor *monitor;
+  char *value;
 
-  if (entry->value->type == GCONF_VALUE_STRING) {
-    BraseroDrive *drive;
-    BraseroMediumMonitor *monitor;
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_DEVICE) == 0);
 
+  value = g_settings_get_string (settings, key);
+  if ((value != NULL) && (*value != '\0')) {
     monitor = brasero_medium_monitor_get_default ();
-    drive = brasero_medium_monitor_get_drive (monitor, gconf_value_get_string (entry->value));
+    drive = brasero_medium_monitor_get_drive (monitor, value);
     brasero_drive_selection_set_active (BRASERO_DRIVE_SELECTION (cd_option), drive);
     g_object_unref (drive);
     g_object_unref (monitor);
+  } else {
+    /* FIXME: see the FIXME in sj-main.c around one of the
+     * device_changed_cb calls for a way to fix this
+     */
+    g_warn_if_reached();
   }
+  g_free (value);
 }
 
 static void prefs_drive_changed (BraseroDriveSelection *selection, BraseroDrive *drive, gpointer user_data)
 {
   if (drive)
-    gconf_client_set_string (gconf_client, GCONF_DEVICE, brasero_drive_get_device (drive), NULL);
+    g_settings_set_string (sj_settings, SJ_SETTINGS_DEVICE, brasero_drive_get_device (drive));
   else
-    gconf_client_set_string (gconf_client, GCONF_DEVICE, NULL, NULL);
+    g_settings_set_string (sj_settings, SJ_SETTINGS_DEVICE, NULL);
 }
 
 /**
- * The GConf key for the strip characters option changed
+ * The GSettings key for the strip characters option changed
  */
-static void strip_changed_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data)
+static void strip_changed_cb (GSettings *settings, gchar *key, gpointer user_data)
 {
   /* NOTE that strip_changed_cb in sj-main.c will also be called, and will also update
      the global value strip_chars - but which function will get called first?
      Make sure strip_chars is up to date BEFORE calling pattern_label_update */
-  g_return_if_fail (strcmp (entry->key, GCONF_STRIP) == 0);
+  g_return_if_fail (strcmp (key, SJ_SETTINGS_STRIP) == 0);
 
-  if (entry->value == NULL) {
-    strip_chars = FALSE;
-  } else {
-    strip_chars = gconf_value_get_bool (entry->value);
-  }
+  strip_chars = g_settings_get_boolean (settings, key);
   pattern_label_update ();
 }
 
@@ -482,7 +467,6 @@ void show_preferences_dialog ()
     guint i;
     GtkSizeGroup *group;
     GtkWidget    *box;
-    GConfBridge *bridge = gconf_bridge_get ();
 
     prefs_dialog = GET_WIDGET ("prefs_dialog");
     box          = GET_WIDGET ("hack_hbox");
@@ -533,24 +517,30 @@ void show_preferences_dialog ()
 
     g_signal_connect (cd_option, "drive-changed", G_CALLBACK (prefs_drive_changed), NULL);
 
-    /* Connect to GConf to update the UI */
-    gconf_bridge_bind_property (bridge, GCONF_EJECT, G_OBJECT (check_eject), "active");
-    gconf_bridge_bind_property (bridge, GCONF_OPEN, G_OBJECT (check_open), "active");
-    gconf_bridge_bind_property (bridge, GCONF_STRIP, G_OBJECT (check_strip), "active");
-    gconf_client_notify_add (gconf_client, GCONF_DEVICE, device_changed_cb, NULL, NULL, NULL);
-    gconf_client_notify_add (gconf_client, GCONF_BASEURI, baseuri_changed_cb, NULL, NULL, NULL);
-    gconf_client_notify_add (gconf_client, GCONF_AUDIO_PROFILE_MEDIA_TYPE, audio_profile_changed_cb, NULL, 
NULL, NULL);
-    gconf_client_notify_add (gconf_client, GCONF_PATH_PATTERN, path_pattern_changed_cb, NULL, NULL, NULL);
-    gconf_client_notify_add (gconf_client, GCONF_FILE_PATTERN, file_pattern_changed_cb, NULL, NULL, NULL);
-    gconf_client_notify_add (gconf_client, GCONF_STRIP, strip_changed_cb, NULL, NULL, NULL);
+    /* Connect to GSettings to update the UI */
+    g_settings_bind (sj_settings, SJ_SETTINGS_EJECT, G_OBJECT (check_eject), "active", 
G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (sj_settings, SJ_SETTINGS_OPEN, G_OBJECT (check_open), "active", 
G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (sj_settings, SJ_SETTINGS_STRIP, G_OBJECT (check_strip), "active", 
G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_DEVICE,
+                      (GCallback)device_changed_cb, NULL);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_BASEURI,
+                      (GCallback)baseuri_changed_cb, NULL);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_AUDIO_PROFILE,
+                      (GCallback)audio_profile_changed_cb, NULL);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_PATH_PATTERN,
+                      (GCallback)path_pattern_changed_cb, NULL);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_FILE_PATTERN,
+                      (GCallback)file_pattern_changed_cb, NULL);
+    g_signal_connect (G_OBJECT (sj_settings), "changed::"SJ_SETTINGS_STRIP,
+                      (GCallback)strip_changed_cb, NULL);
 
     g_signal_connect (extractor, "notify::profile", pattern_label_update, NULL);
 
-    baseuri_changed_cb (gconf_client, -1, gconf_client_get_entry (gconf_client, GCONF_BASEURI, NULL, TRUE, 
NULL), NULL);
-    audio_profile_changed_cb (gconf_client, -1, gconf_client_get_entry (gconf_client, 
GCONF_AUDIO_PROFILE_MEDIA_TYPE, NULL, TRUE, NULL), NULL);
-    file_pattern_changed_cb (gconf_client, -1, gconf_client_get_entry (gconf_client, GCONF_FILE_PATTERN, 
NULL, TRUE, NULL), NULL);
-    path_pattern_changed_cb (gconf_client, -1, gconf_client_get_entry (gconf_client, GCONF_PATH_PATTERN, 
NULL, TRUE, NULL), NULL);
-    device_changed_cb (gconf_client, -1, gconf_client_get_entry (gconf_client, GCONF_DEVICE, NULL, TRUE, 
NULL), NULL);
+    baseuri_changed_cb (sj_settings, SJ_SETTINGS_BASEURI, NULL);
+    audio_profile_changed_cb (sj_settings, SJ_SETTINGS_AUDIO_PROFILE, NULL);
+    file_pattern_changed_cb (sj_settings, SJ_SETTINGS_FILE_PATTERN, NULL);
+    path_pattern_changed_cb (sj_settings, SJ_SETTINGS_PATH_PATTERN, NULL);
+    device_changed_cb (sj_settings, SJ_SETTINGS_DEVICE, NULL);
 
     g_signal_connect (GTK_DIALOG (prefs_dialog), "response", G_CALLBACK (on_response), NULL);
 
diff --git a/src/sound-juicer.h b/src/sound-juicer.h
index a91dad9..224d37e 100644
--- a/src/sound-juicer.h
+++ b/src/sound-juicer.h
@@ -25,15 +25,14 @@
 
 #include <glib/gi18n.h>
 #include <brasero-medium-selection.h>
-#include <gconf/gconf-client.h>
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 #include "sj-extractor.h"
 
 /**
- * A GConf client
+ * A GSettings object
  */
-extern GConfClient *gconf_client;
+extern GSettings *sj_settings;
 
 /**
  * The main window
@@ -141,27 +140,24 @@ extern GtkCellRenderer *toggle_renderer, *title_renderer, *artist_renderer, *com
 void sj_debug (SjDebugDomain domain, const gchar* format, ...);
 
 /**
- * GConf key names
- */
-#define GCONF_ROOT "/apps/sound-juicer"
-#define GCONF_DEVICE GCONF_ROOT "/device"
-#define GCONF_EJECT GCONF_ROOT "/eject"
-#define GCONF_OPEN GCONF_ROOT "/open_completed"
-#define GCONF_BASEPATH GCONF_ROOT "/base_path"
-#define GCONF_BASEURI GCONF_ROOT "/base_uri"
-#define GCONF_FILE_PATTERN GCONF_ROOT "/file_pattern"
-#define GCONF_PATH_PATTERN GCONF_ROOT "/path_pattern"
-#define GCONF_AUDIO_PROFILE GCONF_ROOT "/audio_profile"
-#define GCONF_AUDIO_PROFILE_MEDIA_TYPE GCONF_ROOT "/audio_profile_media_type"
-#define GCONF_PARANOIA GCONF_ROOT "/paranoia"
-#define GCONF_STRIP GCONF_ROOT "/strip-special"
-#define GCONF_WINDOW GCONF_ROOT "/window"
-#define GCONF_AUDIO_VOLUME GCONF_ROOT "/volume"
-
-#define GCONF_PROXY_ROOT "/system/http_proxy"
-#define GCONF_HTTP_PROXY_ENABLE GCONF_PROXY_ROOT "/use_http_proxy"
-#define GCONF_HTTP_PROXY GCONF_PROXY_ROOT "/host"
-#define GCONF_HTTP_PROXY_PORT GCONF_PROXY_ROOT "/port"
+ * GSettings key names
+ */
+#define SJ_SETTINGS_DEVICE "device"
+#define SJ_SETTINGS_EJECT "eject"
+#define SJ_SETTINGS_OPEN "open-completed"
+#define SJ_SETTINGS_BASEPATH "base-path"
+#define SJ_SETTINGS_BASEURI "base-uri"
+#define SJ_SETTINGS_FILE_PATTERN "file-pattern"
+#define SJ_SETTINGS_PATH_PATTERN "path-pattern"
+#define SJ_SETTINGS_AUDIO_PROFILE "audio-profile"
+#define SJ_SETTINGS_PARANOIA "paranoia"
+#define SJ_SETTINGS_STRIP "strip-special"
+#define SJ_SETTINGS_WINDOW "window"
+#define SJ_SETTINGS_AUDIO_VOLUME "volume"
+
+#define SJ_SETTINGS_HTTP_PROXY_ENABLE "enabled"
+#define SJ_SETTINGS_HTTP_PROXY "host"
+#define SJ_SETTINGS_HTTP_PROXY_PORT "port"
 
 /* TODO: need to add a SjWindow object or something */
 void sj_main_set_title (const char* detail);
diff --git a/tests/mb-test.c b/tests/mb-test.c
index dc3031d..b4a1ec3 100644
--- a/tests/mb-test.c
+++ b/tests/mb-test.c
@@ -1,14 +1,11 @@
 #include "config.h"
 #include <brasero-medium-monitor.h>
 #include <glib.h>
-#include <gconf/gconf-client.h>
 #include <stdlib.h>
 #include "sj-structures.h"
 #include "sj-metadata.h"
 #include "sj-metadata-getter.h"
 
-#define GCONF_ROOT "/apps/sound-juicer"
-
 static const char *
 source_to_str (MetadataSource source)
 {
@@ -93,25 +90,17 @@ int main (int argc, char** argv)
 {
   SjMetadataGetter *metadata;
   GMainLoop *loop;
-  GConfClient *gconf_client;
   GError *error = NULL;
   BraseroMediumMonitor *monitor;
 
   g_type_init ();
 
-  gconf_client = gconf_client_get_default ();
-  if (gconf_client == NULL) {
-    g_warning ("Could not create GConf client.\n");
-    exit (1);
-  }
-
   /* Make sure probing of the various media have settled before going on */
   monitor = brasero_medium_monitor_get_default ();
   while (brasero_medium_monitor_is_probing (monitor))
       g_usleep (G_USEC_PER_SEC/10);
   g_object_unref (G_OBJECT (monitor));
 
-  gconf_client_add_dir (gconf_client, GCONF_ROOT, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
   
   metadata = sj_metadata_getter_new ();
 



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