[gedit] Port main program to GSettings.



commit 4215be0e8924f45170683493beaa2695e8e2e483
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Tue Oct 27 21:25:18 2009 +0100

    Port main program to GSettings.
    
    Switch from gconf to gsettings to manange the configuration.
    This patch only ports the main program.
    Some help has been provided by Vincent Untz.

 configure.ac                             |   16 +-
 data/Makefile.am                         |   26 +-
 data/gedit.schemas.in.in                 |  537 ----------
 data/org.gnome.gedit.gschema.in.in       |   80 ++
 gedit/Makefile.am                        |    8 +-
 gedit/dialogs/gedit-encodings-dialog.c   |   46 +-
 gedit/dialogs/gedit-preferences-dialog.c |  469 +++------
 gedit/dialogs/gedit-search-dialog.c      |    4 +-
 gedit/gedit-app.c                        |   49 +-
 gedit/gedit-app.h                        |    2 +
 gedit/gedit-document-loader.c            |   25 +-
 gedit/gedit-document-saver.c             |   14 +-
 gedit/gedit-document.c                   |   50 +-
 gedit/gedit-encodings-combo-box.c        |   45 +-
 gedit/gedit-encodings.c                  |   69 ++
 gedit/gedit-encodings.h                  |    3 +
 gedit/gedit-file-chooser-dialog.c        |   31 +-
 gedit/gedit-history-entry.c              |  100 +--
 gedit/gedit-io-error-message-area.c      |   13 +-
 gedit/gedit-language-manager.c           |    1 -
 gedit/gedit-plugins-engine.c             |   32 +-
 gedit/gedit-prefs-manager-app.c          | 1621 ------------------------------
 gedit/gedit-prefs-manager-app.h          |   85 --
 gedit/gedit-prefs-manager.c              | 1242 -----------------------
 gedit/gedit-prefs-manager.h              |  424 --------
 gedit/gedit-print-job.c                  |  238 +++--
 gedit/gedit-session.c                    |    1 -
 gedit/gedit-settings.c                   | 1019 +++++++++++++++++++
 gedit/gedit-settings.h                   |  141 +++
 gedit/gedit-style-scheme-manager.c       |    1 -
 gedit/gedit-tab.c                        |   32 +-
 gedit/gedit-utils.c                      |    2 +-
 gedit/gedit-utils.h                      |    2 +-
 gedit/gedit-view.c                       |  100 ++-
 gedit/gedit-window-private.h             |    6 +-
 gedit/gedit-window.c                     |  157 +++-
 gedit/gedit-window.h                     |    3 +
 gedit/gedit.c                            |   11 +-
 plugins/checkupdate/Makefile.am          |   26 +-
 plugins/filebrowser/Makefile.am          |   20 -
 po/POTFILES.in                           |    1 -
 po/POTFILES.skip                         |    1 -
 42 files changed, 2151 insertions(+), 4602 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 9c52eea..6cf77b1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -51,7 +51,7 @@ dnl make sure we keep ACLOCAL_FLAGS around for maintainer builds to work
 AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4")
 
 dnl active plugins for gedit.schemas
-ACTIVE_PLUGINS="docinfo,modelines,filebrowser,spell,time"
+ACTIVE_PLUGINS="'docinfo', 'modelines', 'filebrowser', 'spell', 'time'"
 AC_SUBST(ACTIVE_PLUGINS)
 
 dnl toolbar style for gedit schemas
@@ -63,7 +63,7 @@ AC_MSG_CHECKING([for Win32 platform])
 case "$host" in
   *-*-mingw*|*-*-cygwin*)
     platform_win32=yes
-    TOOLBAR_STYLE="GEDIT_TOOLBAR_ICONS"
+    TOOLBAR_STYLE="'GEDIT_TOOLBAR_ICONS'"
     ;;
   *)
     platform_win32=no
@@ -77,7 +77,7 @@ case "$host" in
   *-*-mingw*)
     os_win32=yes
     AC_CHECK_TOOL(WINDRES, windres)
-    ACTIVE_PLUGINS="${ACTIVE_PLUGINS},checkupdate"
+    ACTIVE_PLUGINS="${ACTIVE_PLUGINS}, 'checkupdate'"
     ;;
   *)
     os_win32=no
@@ -105,7 +105,7 @@ gdk_windowing=`$PKG_CONFIG --variable=target gdk-2.0`
 AC_MSG_CHECKING([for native Mac OS X])
 if test "$gdk_windowing" = "quartz"; then
 	os_osx=yes
-	ACTIVE_PLUGINS="${ACTIVE_PLUGINS},checkupdate"
+	ACTIVE_PLUGINS="${ACTIVE_PLUGINS}, 'checkupdate'"
 else
 	os_osx=no
 fi
@@ -273,7 +273,7 @@ PKG_CHECK_MODULES(GEDIT, [
 	libxml-2.0 >= 2.5.0
 	glib-2.0 >= 2.22.0
 	gthread-2.0 >= 2.13.0
-	gio-2.0 >= 2.23.1
+	gio-2.0 >= 2.25.4
 	gtk+-2.0 >= 2.16.0
 	gtksourceview-2.0 >= 2.9.7
 	gconf-2.0 >= 1.1.11
@@ -332,10 +332,10 @@ AC_SUBST(EGG_SMCLIENT_CFLAGS)
 AC_SUBST(EGG_SMCLIENT_LIBS)
 
 dnl ================================================================
-dnl GConf related settings
+dnl GSettings stuff
 dnl ================================================================
 
-AM_GCONF_SOURCE_2
+GLIB_GSETTINGS
 
 dnl ================================================================
 dnl Python
@@ -516,7 +516,7 @@ Makefile
 data/gedit.desktop.in
 data/gedit-bugreport.sh
 data/gedit.pc
-data/gedit.schemas.in
+data/org.gnome.gedit.gschema.in
 data/Makefile
 docs/Makefile
 docs/reference/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 669f1dd..194f4a7 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -3,10 +3,10 @@ desktop_in_files = gedit.desktop.in
 desktop_DATA 	 = $(desktop_in_files:.desktop.in=.desktop)
 @INTLTOOL_DESKTOP_RULE@
 
-schemasdir	 = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = gedit.schemas.in
-schemas_DATA 	 = $(schemas_in_files:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
+gsettingsschema_in_files = org.gnome.gedit.gschema.in
+gsettingsschema_DATA = $(gsettingsschema_in_files:.gschema.in=.gschema.xml)
+org.gnome.gedit.gschema.xml: org.gnome.gedit.gschema.in
+	gsettings-schema-convert -f $< -o $@
 
 man_MANS = gedit.1
 
@@ -19,28 +19,20 @@ gedit- GEDIT_API_VERSION@.pc: gedit.pc
 bugreportdir = $(libexecdir)/gedit-2
 bugreport_SCRIPTS = gedit-bugreport.sh
 
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-	        if test -z "$(DESTDIR)" ; then \
-	                for p in $(schemas_DATA) ; do \
-	                        GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/data/$$p ; \
-	                done \
-	        fi
-else
-install-data-local:
+if GSETTINGS_SCHEMAS_INSTALL
+install-data-hook:
+	$(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
 endif
 
 EXTRA_DIST = 				\
 	$(desktop_in_files)		\
-	$(schemas_in_files)		\
-	gedit.schemas.in.in		\
 	$(man_MANS)			\
 	gedit.pc.in			\
-	gedit-bugreport.sh.in
+	gedit-bugreport.sh.in		\
+	$(gsettingsschema_DATA)
 
 CLEANFILES =	 			\
 	$(desktop_DATA)			\
-	$(schemas_DATA)			\
 	$(pkgconfig_DATA)
 
 
diff --git a/data/org.gnome.gedit.gschema.in.in b/data/org.gnome.gedit.gschema.in.in
new file mode 100644
index 0000000..8b45f18
--- /dev/null
+++ b/data/org.gnome.gedit.gschema.in.in
@@ -0,0 +1,80 @@
+schema org.gnome.gedit:
+  path /apps/gedit/
+  
+  child preferences:
+    child editor:
+      key use-default-font = @b true
+      key editor-font = @s 'Monospace 12'
+      key scheme = @s 'classic'
+      key create-backup-copy = @b true
+      key auto-save = @b false
+      key auto-save-interval = @u 10
+      key undo-actions-limit = @u 25
+      key max-undo-actions = @u 2000
+      key wrap-mode = @s 'GTK_WRAP_WORD'
+      key tabs-size = @u 8
+      key insert-spaces = @b false
+      key auto-indent = @b false
+      key display-line-numbers = @b false
+      key highlight-current-line = @b false
+      key bracket-matching = @b false
+      key display-right-margin = @b false
+      key right-margin-position = @u 80
+      key smart-home-end = @s 'after'
+      key writable-vfs-schemes = @as ['dav', 'davs', 'ftp', 'sftp', 'smb', 'ssh']
+      key restore-cursor-position = @b true
+      key syntax-highlighting = @b true
+      key search-highlighting = @b true
+
+    child ui:
+      key toolbar-visible = @b true
+      key toolbar-buttons-style = @s '@TOOLBAR_STYLE@'
+      key statusbar-visible = @b true
+      key side-pane-visible = @b false
+      key bottom-pane-visible = @b false
+      key max-recents = @u 5
+
+    child print:
+      key print-syntax-highlighting = @b true
+      key print-header = @b true
+      key print-wrap-mode = @s 'GTK_WRAP_WORD'
+      key print-line-numbers = @u 0
+      key print-font-body-pango = @s 'Monospace 9'
+      key print-font-header-pango = @s 'Sans 11'
+      key print-font-numbers-pango = @s 'Sans 8'
+
+    child encodings:
+      key auto-detected = @as ['UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16']
+      key shown-in-menu = @as ['ISO-8859-15']
+
+  child state:
+    child window:
+      key state = @i 0
+      key size = @(ii) (650, 500)
+      key side-panel-size = @i 200
+      key side-panel-active-page = @i 0
+      key bottom-panel-size = @i 140
+      key bottom-panel-active-page = @i 0
+
+    child file-filter:
+      key filter-id = @i 0
+    
+    child history-entry:
+      key search-for-entry = @as ['']
+      key replace-with-entry = @as ['']
+
+  child plugins:
+    key active-plugins = @as [ ACTIVE_PLUGINS@]
+
+schema org.gnome.Desktop.Lockdown:
+  path /desktop/gnome/lockdown/
+  
+  key disable-command-line = @b false
+  key disable-printing = @b false
+  key disable-print-setup = @b false
+  key disable-save-to-disk = @b false
+
+schema org.gnome.Desktop.Interface:
+  path /desktop/gnome/interface/
+  
+  key monospace-font-name = @s 'Monospace 10'
diff --git a/gedit/Makefile.am b/gedit/Makefile.am
index ea9b59d..82090db 100644
--- a/gedit/Makefile.am
+++ b/gedit/Makefile.am
@@ -107,10 +107,10 @@ NOINST_H_FILES =			\
 	gedit-plugin-loader.h		\
 	gedit-plugin-manager.h		\
 	gedit-plugins-engine.h		\
-	gedit-prefs-manager-private.h	\
 	gedit-print-job.h		\
 	gedit-print-preview.h		\
 	gedit-session.h			\
+	gedit-settings.h		\
 	gedit-smart-charset-converter.h	\
 	gedit-style-scheme-manager.h	\
 	gedit-tab-label.h		\
@@ -133,8 +133,6 @@ INST_H_FILES =				\
 	gedit-notebook.h		\
 	gedit-panel.h			\
 	gedit-plugin.h			\
-	gedit-prefs-manager-app.h	\
-	gedit-prefs-manager.h		\
 	gedit-progress-message-area.h	\
 	gedit-statusbar.h		\
 	gedit-status-combo-box.h	\
@@ -189,13 +187,11 @@ libgedit_la_SOURCES = 			\
 	gedit-plugin-loader.c		\
 	gedit-plugin-manager.c		\
 	gedit-plugins-engine.c		\
-	gedit-prefs-manager-app.c	\
-	gedit-prefs-manager.c		\
-	gedit-prefs-manager-private.h	\
 	gedit-print-job.c		\
 	gedit-print-preview.c		\
 	gedit-progress-message-area.c	\
 	gedit-session.c			\
+	gedit-settings.c		\
 	gedit-smart-charset-converter.c	\
 	gedit-statusbar.c		\
 	gedit-status-combo-box.c	\
diff --git a/gedit/dialogs/gedit-encodings-dialog.c b/gedit/dialogs/gedit-encodings-dialog.c
index 31abcc5..1f0a41a 100644
--- a/gedit/dialogs/gedit-encodings-dialog.c
+++ b/gedit/dialogs/gedit-encodings-dialog.c
@@ -40,10 +40,10 @@
 
 #include "gedit-encodings-dialog.h"
 #include "gedit-encodings.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-utils.h"
 #include "gedit-debug.h"
 #include "gedit-dirs.h"
+#include "gedit-settings.h"
 
 #define GEDIT_ENCODINGS_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
 						   GEDIT_TYPE_ENCODINGS_DIALOG,           \
@@ -51,6 +51,8 @@
 
 struct _GeditEncodingsDialogPrivate
 {
+	GSettings	*enc_settings;
+
 	GtkListStore	*available_liststore;
 	GtkListStore	*displayed_liststore;
 	GtkWidget	*available_treeview;
@@ -74,11 +76,26 @@ gedit_encodings_dialog_finalize (GObject *object)
 }
 
 static void
+gedit_encodings_dialog_dispose (GObject *object)
+{
+	GeditEncodingsDialogPrivate *priv = GEDIT_ENCODINGS_DIALOG (object)->priv;
+
+	if (priv->enc_settings != NULL)
+	{
+		g_object_unref (priv->enc_settings);
+		priv->enc_settings = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_encodings_dialog_parent_class)->dispose (object);
+}
+
+static void
 gedit_encodings_dialog_class_init (GeditEncodingsDialogClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = gedit_encodings_dialog_finalize;
+	object_class->dispose = gedit_encodings_dialog_dispose;
 
 	g_type_class_add_private (object_class, sizeof (GeditEncodingsDialogPrivate));
 }
@@ -237,14 +254,18 @@ static void
 init_shown_in_menu_tree_model (GeditEncodingsDialog *dialog)
 {
 	GtkTreeIter iter;
+	gchar **enc_strv;
+	gsize len;
 	GSList *list, *tmp;
 
 	/* add data to the list store */
-	list = gedit_prefs_manager_get_shown_in_menu_encodings ();
+	enc_strv = g_settings_get_strv (dialog->priv->enc_settings,
+					GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU,
+					&len);
 
-	tmp = list;
+	list = _gedit_encoding_strv_to_list ((const gchar * const *)enc_strv);
 
-	while (tmp != NULL)
+	for (tmp = list; tmp != NULL; tmp = g_slist_next (tmp))
 	{
 		const GeditEncoding *enc;
 
@@ -261,8 +282,6 @@ init_shown_in_menu_tree_model (GeditEncodingsDialog *dialog)
 				    gedit_encoding_get_charset (enc),
 				    COLUMN_NAME,
 				    gedit_encoding_get_name (enc), -1);
-
-		tmp = g_slist_next (tmp);
 	}
 
 	g_slist_free (list);
@@ -286,8 +305,17 @@ response_handler (GtkDialog            *dialog,
 
 	if (response_id == GTK_RESPONSE_OK)
 	{
-		g_return_if_fail (gedit_prefs_manager_shown_in_menu_encodings_can_set ());
-		gedit_prefs_manager_set_shown_in_menu_encodings (dlg->priv->show_in_menu_list);
+		gchar **encs;
+		gint len;
+
+		encs = _gedit_encoding_list_to_strv (dlg->priv->show_in_menu_list);
+		len = g_slist_length (dlg->priv->show_in_menu_list);
+	
+		g_settings_set_strv (dlg->priv->enc_settings,
+				     GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU,
+				     (const gchar * const *)encs, len);
+
+		g_strfreev (encs);
 	}
 }
 
@@ -312,6 +340,8 @@ gedit_encodings_dialog_init (GeditEncodingsDialog *dlg)
 
 	dlg->priv = GEDIT_ENCODINGS_DIALOG_GET_PRIVATE (dlg);
 	
+	dlg->priv->enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+	
 	gtk_dialog_add_buttons (GTK_DIALOG (dlg),
 				GTK_STOCK_CANCEL, 
 				GTK_RESPONSE_CANCEL,
diff --git a/gedit/dialogs/gedit-preferences-dialog.c b/gedit/dialogs/gedit-preferences-dialog.c
index b74adf6..be65264 100644
--- a/gedit/dialogs/gedit-preferences-dialog.c
+++ b/gedit/dialogs/gedit-preferences-dialog.c
@@ -37,9 +37,6 @@
 #include <string.h>
 
 #include <glib/gi18n.h>
-#include <gconf/gconf-client.h>
-
-#include <gedit/gedit-prefs-manager.h>
 
 #include "gedit-preferences-dialog.h"
 #include "gedit-utils.h"
@@ -48,6 +45,8 @@
 #include "gedit-style-scheme-manager.h"
 #include "gedit-plugin-manager.h"
 #include "gedit-dirs.h"
+#include "gedit-settings.h"
+#include "gedit-utils.h"
 
 /*
  * gedit-preferences dialog is a singleton since we don't
@@ -76,6 +75,8 @@ enum
 
 struct _GeditPreferencesDialogPrivate
 {
+	GSettings	*editor;
+
 	GtkWidget	*notebook;
 
 	/* Font */
@@ -134,10 +135,26 @@ struct _GeditPreferencesDialogPrivate
 G_DEFINE_TYPE(GeditPreferencesDialog, gedit_preferences_dialog, GTK_TYPE_DIALOG)
 
 
+static void
+gedit_preferences_dialog_dispose (GObject *object)
+{
+	GeditPreferencesDialog *dlg = GEDIT_PREFERENCES_DIALOG (object);
+
+	if (dlg->priv->editor != NULL)
+	{
+		g_object_unref (dlg->priv->editor);
+		dlg->priv->editor = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_preferences_dialog_parent_class)->dispose (object);
+}
+
 static void 
 gedit_preferences_dialog_class_init (GeditPreferencesDialogClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+	
+	object_class->dispose = gedit_preferences_dialog_dispose;
 
 	g_type_class_add_private (object_class, sizeof (GeditPreferencesDialogPrivate));
 }
@@ -166,181 +183,74 @@ dialog_response_handler (GtkDialog *dlg,
 }
 
 static void
-tabs_width_spinbutton_value_changed (GtkSpinButton          *spin_button,
-				     GeditPreferencesDialog *dlg)
-{
-	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->tabs_width_spinbutton));
-
-	gedit_prefs_manager_set_tabs_size (gtk_spin_button_get_value_as_int (spin_button));
-}
-	
-static void
-insert_spaces_checkbutton_toggled (GtkToggleButton        *button,
-				   GeditPreferencesDialog *dlg)
-{
-	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->insert_spaces_checkbutton));
-
-	gedit_prefs_manager_set_insert_spaces (gtk_toggle_button_get_active (button));
-}
-
-static void
-auto_indent_checkbutton_toggled (GtkToggleButton        *button,
-				 GeditPreferencesDialog *dlg)
-{
-	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->auto_indent_checkbutton));
-
-	gedit_prefs_manager_set_auto_indent (gtk_toggle_button_get_active (button));
-}
-
-static void
-auto_save_checkbutton_toggled (GtkToggleButton        *button,
-			       GeditPreferencesDialog *dlg)
+on_auto_save_changed (GSettings              *settings,
+		      const gchar            *key,
+		      GeditPreferencesDialog *dlg)
 {
-	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->auto_save_checkbutton));
-
-	if (gtk_toggle_button_get_active (button))
-	{
-		gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton, 
-					  gedit_prefs_manager_auto_save_interval_can_set());
-
-		gedit_prefs_manager_set_auto_save (TRUE);
-	}
-	else	
-	{
-		gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton, FALSE);
-		gedit_prefs_manager_set_auto_save (FALSE);
-	}
-}
+	gboolean value;
 
-static void
-backup_copy_checkbutton_toggled (GtkToggleButton        *button,
-				 GeditPreferencesDialog *dlg)
-{
 	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->backup_copy_checkbutton));
 	
-	gedit_prefs_manager_set_create_backup_copy (gtk_toggle_button_get_active (button));
-}
+	value = g_settings_get_boolean (settings, key);
 
-static void
-auto_save_spinbutton_value_changed (GtkSpinButton          *spin_button,
-				    GeditPreferencesDialog *dlg)
-{
-	g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->auto_save_spinbutton));
-
-	gedit_prefs_manager_set_auto_save_interval (
-			MAX (1, gtk_spin_button_get_value_as_int (spin_button)));
+	gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton, value);
 }
 
 static void
 setup_editor_page (GeditPreferencesDialog *dlg)
 {
 	gboolean auto_save;
-	gint auto_save_interval;
 
 	gedit_debug (DEBUG_PREFS);
 
-	/* Set initial state */
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->tabs_width_spinbutton),
-				   (guint) gedit_prefs_manager_get_tabs_size ());
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->insert_spaces_checkbutton), 
-				      gedit_prefs_manager_get_insert_spaces ());
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->auto_indent_checkbutton), 
-				      gedit_prefs_manager_get_auto_indent ());
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->backup_copy_checkbutton),
-				      gedit_prefs_manager_get_create_backup_copy ());
-
-	auto_save = gedit_prefs_manager_get_auto_save ();
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->auto_save_checkbutton),
-				      auto_save);
-
-	auto_save_interval = gedit_prefs_manager_get_auto_save_interval ();
-	if (auto_save_interval <= 0)
-		auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
-
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->auto_save_spinbutton),
-				   auto_save_interval);
+	/* Get values */
+	auto_save = g_settings_get_boolean (dlg->priv->editor,
+					    GEDIT_SETTINGS_AUTO_SAVE);
 
 	/* Set widget sensitivity */
-	gtk_widget_set_sensitive (dlg->priv->tabs_width_hbox, 
-				  gedit_prefs_manager_tabs_size_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->insert_spaces_checkbutton,
-				  gedit_prefs_manager_insert_spaces_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->auto_indent_checkbutton,
-				  gedit_prefs_manager_auto_indent_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->backup_copy_checkbutton,
-				  gedit_prefs_manager_create_backup_copy_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->autosave_hbox, 
-				  gedit_prefs_manager_auto_save_can_set ()); 
-	gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton, 
-			          auto_save &&
-				  gedit_prefs_manager_auto_save_interval_can_set ());
+	gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton,
+				  auto_save);
 
 	/* Connect signal */
-	g_signal_connect (dlg->priv->tabs_width_spinbutton,
-			  "value_changed",
-			  G_CALLBACK (tabs_width_spinbutton_value_changed),
-			  dlg);
-	g_signal_connect (dlg->priv->insert_spaces_checkbutton,
-			 "toggled",
-			  G_CALLBACK (insert_spaces_checkbutton_toggled),
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_TABS_SIZE,
+			 dlg->priv->tabs_width_spinbutton,
+			 "value",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_INSERT_SPACES,
+			 dlg->priv->insert_spaces_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_AUTO_INDENT,
+			 dlg->priv->auto_indent_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_CREATE_BACKUP_COPY,
+			 dlg->priv->backup_copy_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_BRACKET_MATCHING,
+			 dlg->priv->bracket_matching_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_AUTO_SAVE_INTERVAL,
+			 dlg->priv->auto_save_spinbutton,
+			 "value",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_signal_connect (dlg->priv->editor,
+			  "changed::auto-save",
+			  G_CALLBACK (on_auto_save_changed),
 			  dlg);
-	g_signal_connect (dlg->priv->auto_indent_checkbutton,
-			  "toggled",
-			  G_CALLBACK (auto_indent_checkbutton_toggled),
-			  dlg);
-	g_signal_connect (dlg->priv->auto_save_checkbutton,
-			  "toggled",
-			  G_CALLBACK (auto_save_checkbutton_toggled),
-			  dlg);
-	g_signal_connect (dlg->priv->backup_copy_checkbutton,
-			  "toggled",
-			  G_CALLBACK (backup_copy_checkbutton_toggled),
-			  dlg);
-	g_signal_connect (dlg->priv->auto_save_spinbutton,
-			  "value_changed",
-			  G_CALLBACK (auto_save_spinbutton_value_changed),
-			  dlg);
-}
-
-static void
-display_line_numbers_checkbutton_toggled (GtkToggleButton        *button,
-					  GeditPreferencesDialog *dlg)
-{
-	g_return_if_fail (button == 
-			GTK_TOGGLE_BUTTON (dlg->priv->display_line_numbers_checkbutton));
-
-	gedit_prefs_manager_set_display_line_numbers (gtk_toggle_button_get_active (button));
-}
-
-static void
-highlight_current_line_checkbutton_toggled (GtkToggleButton        *button,
-					    GeditPreferencesDialog *dlg)
-{
-	g_return_if_fail (button == 
-			GTK_TOGGLE_BUTTON (dlg->priv->highlight_current_line_checkbutton));
-
-	gedit_prefs_manager_set_highlight_current_line (gtk_toggle_button_get_active (button));
-}
-
-static void
-bracket_matching_checkbutton_toggled (GtkToggleButton        *button,
-				      GeditPreferencesDialog *dlg)
-{
-	g_return_if_fail (button == 
-			GTK_TOGGLE_BUTTON (dlg->priv->bracket_matching_checkbutton));
-
-	gedit_prefs_manager_set_bracket_matching (
-				gtk_toggle_button_get_active (button));
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_AUTO_SAVE,
+			 dlg->priv->auto_save_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
 }
 
 static gboolean split_button_state = TRUE;
@@ -349,10 +259,12 @@ static void
 wrap_mode_checkbutton_toggled (GtkToggleButton        *button, 
 			       GeditPreferencesDialog *dlg)
 {
+	GtkWrapMode mode;
+
 	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dlg->priv->wrap_text_checkbutton)))
 	{
-		gedit_prefs_manager_set_wrap_mode (GTK_WRAP_NONE);
-		
+		mode = GTK_WRAP_NONE;
+
 		gtk_widget_set_sensitive (dlg->priv->split_checkbutton, 
 					  FALSE);
 		gtk_toggle_button_set_inconsistent (
@@ -370,16 +282,20 @@ wrap_mode_checkbutton_toggled (GtkToggleButton        *button,
 		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton)))
 		{
 			split_button_state = TRUE;
-			
-			gedit_prefs_manager_set_wrap_mode (GTK_WRAP_WORD);
+
+			mode = GTK_WRAP_WORD;
 		}
 		else
 		{
 			split_button_state = FALSE;
-			
-			gedit_prefs_manager_set_wrap_mode (GTK_WRAP_CHAR);
+
+			mode = GTK_WRAP_CHAR;
 		}
 	}
+
+	gedit_settings_set_wrap_mode (dlg->priv->editor,
+				      GEDIT_SETTINGS_WRAP_MODE,
+				      mode);
 }
 
 static void
@@ -392,24 +308,11 @@ right_margin_checkbutton_toggled (GtkToggleButton        *button,
 
 	active = gtk_toggle_button_get_active (button);
 	
-	gedit_prefs_manager_set_display_right_margin (active);
+	g_settings_set_boolean (dlg->priv->editor, GEDIT_SETTINGS_DISPLAY_RIGHT_MARGIN,
+				active);
 
 	gtk_widget_set_sensitive (dlg->priv->right_margin_position_hbox,
-				  active && 
-				  gedit_prefs_manager_right_margin_position_can_set ());
-}
-
-static void
-right_margin_position_spinbutton_value_changed (GtkSpinButton          *spin_button, 
-						GeditPreferencesDialog *dlg)
-{
-	gint value;
-	
-	g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->right_margin_position_spinbutton));
-
-	value = CLAMP (gtk_spin_button_get_value_as_int (spin_button), 1, 160);
-
-	gedit_prefs_manager_set_right_margin_position (value);
+				  active);
 }
 
 static void
@@ -417,22 +320,21 @@ setup_view_page (GeditPreferencesDialog *dlg)
 {
 	GtkWrapMode wrap_mode;
 	gboolean display_right_margin;
-	gboolean wrap_mode_can_set;
+	guint right_margin_position;
 
 	gedit_debug (DEBUG_PREFS);
 	
-	/* Set initial state */
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->display_line_numbers_checkbutton),
-				      gedit_prefs_manager_get_display_line_numbers ());
+	/* Get values */
+	display_right_margin = g_settings_get_boolean (dlg->priv->editor,
+						       GEDIT_SETTINGS_DISPLAY_RIGHT_MARGIN);
+	g_settings_get (dlg->priv->editor, GEDIT_SETTINGS_RIGHT_MARGIN_POSITION,
+			"u", &right_margin_position);
 	
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->highlight_current_line_checkbutton),
-				      gedit_prefs_manager_get_highlight_current_line ());
-	
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->bracket_matching_checkbutton),
-				      gedit_prefs_manager_get_bracket_matching ());
+	/* Set initial state */
+	wrap_mode = gedit_settings_get_wrap_mode (dlg->priv->editor,
+						  GEDIT_SETTINGS_WRAP_MODE);
 
-	wrap_mode = gedit_prefs_manager_get_wrap_mode ();
-	switch (wrap_mode )
+	switch (wrap_mode)
 	{
 		case GTK_WRAP_WORD:
 			gtk_toggle_button_set_active (
@@ -455,114 +357,72 @@ setup_view_page (GeditPreferencesDialog *dlg)
 				GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), TRUE);
 
 	}
-
-	display_right_margin = gedit_prefs_manager_get_display_right_margin ();
 	
 	gtk_toggle_button_set_active (
 		GTK_TOGGLE_BUTTON (dlg->priv->right_margin_checkbutton), 
 		display_right_margin);
-	
-	gtk_spin_button_set_value (
-		GTK_SPIN_BUTTON (dlg->priv->right_margin_position_spinbutton),
-		(guint)CLAMP (gedit_prefs_manager_get_right_margin_position (), 1, 160));
 		
 	/* Set widgets sensitivity */
-	gtk_widget_set_sensitive (dlg->priv->display_line_numbers_checkbutton,
-				  gedit_prefs_manager_display_line_numbers_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->highlight_current_line_checkbutton,
-				  gedit_prefs_manager_highlight_current_line_can_set ());
-	gtk_widget_set_sensitive (dlg->priv->bracket_matching_checkbutton,
-				  gedit_prefs_manager_bracket_matching_can_set ());
-	wrap_mode_can_set = gedit_prefs_manager_wrap_mode_can_set ();
-	gtk_widget_set_sensitive (dlg->priv->wrap_text_checkbutton, 
-				  wrap_mode_can_set);
 	gtk_widget_set_sensitive (dlg->priv->split_checkbutton, 
-				  wrap_mode_can_set && 
 				  (wrap_mode != GTK_WRAP_NONE));
-	gtk_widget_set_sensitive (dlg->priv->right_margin_checkbutton,
-				  gedit_prefs_manager_display_right_margin_can_set ());
 	gtk_widget_set_sensitive (dlg->priv->right_margin_position_hbox,
-				  display_right_margin && 
-				  gedit_prefs_manager_right_margin_position_can_set ());
-				  
+				  display_right_margin);
+	
 	/* Connect signals */
-	g_signal_connect (dlg->priv->display_line_numbers_checkbutton,
-			  "toggled",
-			  G_CALLBACK (display_line_numbers_checkbutton_toggled), 
-			  dlg);
-	g_signal_connect (dlg->priv->highlight_current_line_checkbutton,
-			  "toggled", 
-			  G_CALLBACK (highlight_current_line_checkbutton_toggled), 
-			  dlg);
-	g_signal_connect (dlg->priv->bracket_matching_checkbutton,
-			  "toggled", 
-			  G_CALLBACK (bracket_matching_checkbutton_toggled), 
-			  dlg);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_DISPLAY_LINE_NUMBERS,
+			 dlg->priv->display_line_numbers_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_HIGHLIGHT_CURRENT_LINE,
+			 dlg->priv->highlight_current_line_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_RIGHT_MARGIN_POSITION,
+			 dlg->priv->right_margin_position_spinbutton,
+			 "value",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_AUTO_SAVE_INTERVAL,
+			 dlg->priv->auto_save_spinbutton,
+			 "value",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
 	g_signal_connect (dlg->priv->wrap_text_checkbutton,
 			  "toggled", 
 			  G_CALLBACK (wrap_mode_checkbutton_toggled), 
 			  dlg);
 	g_signal_connect (dlg->priv->split_checkbutton,
-			  "toggled", 
+			  "toggled",
 			  G_CALLBACK (wrap_mode_checkbutton_toggled), 
 			  dlg);
 	g_signal_connect (dlg->priv->right_margin_checkbutton,
-			  "toggled", 
+			  "toggled",
 			  G_CALLBACK (right_margin_checkbutton_toggled), 
 			  dlg);
-	g_signal_connect (dlg->priv->right_margin_position_spinbutton,
-			  "value_changed",
-			  G_CALLBACK (right_margin_position_spinbutton_value_changed), 
-			  dlg);
-}
-
-static void
-default_font_font_checkbutton_toggled (GtkToggleButton        *button,
-				       GeditPreferencesDialog *dlg)
-{
-	gedit_debug (DEBUG_PREFS);
-
-	g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->default_font_checkbutton));
-
-	if (gtk_toggle_button_get_active (button))
-	{
-		gtk_widget_set_sensitive (dlg->priv->font_hbox, FALSE);
-		gedit_prefs_manager_set_use_default_font (TRUE);
-	}
-	else
-	{
-		gtk_widget_set_sensitive (dlg->priv->font_hbox, 
-					  gedit_prefs_manager_editor_font_can_set ());
-		gedit_prefs_manager_set_use_default_font (FALSE);
-	}
 }
 
 static void
-editor_font_button_font_set (GtkFontButton          *font_button,
+on_use_default_font_changed (GSettings              *settings,
+			     const gchar            *key,
 			     GeditPreferencesDialog *dlg)
 {
-	const gchar *font_name;
-
+	gboolean value;
+	
 	gedit_debug (DEBUG_PREFS);
 
-	g_return_if_fail (font_button == GTK_FONT_BUTTON (dlg->priv->font_button));
+	value = g_settings_get_boolean (settings, key);
 
-	/* FIXME: Can this fail? Gtk docs are a bit terse... 21-02-2004 pbor */
-	font_name = gtk_font_button_get_font_name (font_button);
-	if (!font_name)
-	{
-		g_warning ("Could not get font name");
-		return;
-	}
-
-	gedit_prefs_manager_set_editor_font (font_name);
+	gtk_widget_set_sensitive (dlg->priv->font_hbox, value);
 }
 
 static void
 setup_font_colors_page_font_section (GeditPreferencesDialog *dlg)
 {
+	GSettings *settings;
 	gboolean use_default_font;
-	gchar *editor_font = NULL;
+	gchar *system_font = NULL;
 	gchar *label;
 
 	gedit_debug (DEBUG_PREFS);
@@ -575,48 +435,43 @@ setup_font_colors_page_font_section (GeditPreferencesDialog *dlg)
 				      ATK_RELATION_CONTROLLED_BY);
 	gedit_utils_set_atk_relation (dlg->priv->default_font_checkbutton,
 				      dlg->priv->font_button, 
-				      ATK_RELATION_CONTROLLER_FOR);	
+				      ATK_RELATION_CONTROLLER_FOR);
+
+	/* Get values */
+	settings = _gedit_app_get_settings (gedit_app_get_default ());
+	system_font = gedit_settings_get_system_font (GEDIT_SETTINGS (settings));
+	use_default_font = g_settings_get_boolean (dlg->priv->editor,
+						   GEDIT_SETTINGS_USE_DEFAULT_FONT);
 
-	editor_font = gedit_prefs_manager_get_system_font ();
 	label = g_strdup_printf(_("_Use the system fixed width font (%s)"),
-				editor_font);
+				system_font);
 	gtk_button_set_label (GTK_BUTTON (dlg->priv->default_font_checkbutton),
 			      label);
-	g_free (editor_font);
+	g_free (system_font);
 	g_free (label);
 
 	/* read current config and setup initial state */
-	use_default_font = gedit_prefs_manager_get_use_default_font ();
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->default_font_checkbutton),
 				      use_default_font);
 
-	editor_font = gedit_prefs_manager_get_editor_font ();
-	if (editor_font != NULL)
-	{
-		gtk_font_button_set_font_name (GTK_FONT_BUTTON (dlg->priv->font_button),
-					       editor_font);
-		g_free (editor_font);
-	}
-
 	/* Connect signals */
-	g_signal_connect (dlg->priv->default_font_checkbutton,
-			  "toggled",
-			  G_CALLBACK (default_font_font_checkbutton_toggled),
-			  dlg);
-	g_signal_connect (dlg->priv->font_button,
-			  "font_set",
-			  G_CALLBACK (editor_font_button_font_set),
+	g_signal_connect (dlg->priv->editor,
+			  "changed::use-default-font",
+			  G_CALLBACK (on_use_default_font_changed),
 			  dlg);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_USE_DEFAULT_FONT,
+			 dlg->priv->default_font_checkbutton,
+			 "active",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
+	g_settings_bind (dlg->priv->editor,
+			 GEDIT_SETTINGS_EDITOR_FONT,
+			 dlg->priv->font_button,
+			 "font-name",
+			 G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET);
 
 	/* Set initial widget sensitivity */
-	gtk_widget_set_sensitive (dlg->priv->default_font_checkbutton, 
-				  gedit_prefs_manager_use_default_font_can_set ());
-
-	if (use_default_font)
-		gtk_widget_set_sensitive (dlg->priv->font_hbox, FALSE);
-	else
-		gtk_widget_set_sensitive (dlg->priv->font_hbox, 
-					  gedit_prefs_manager_editor_font_can_set ());
+	gtk_widget_set_sensitive (dlg->priv->font_hbox, use_default_font);
 }
 
 static void
@@ -649,7 +504,7 @@ style_scheme_changed (GtkWidget              *treeview,
 	gtk_tree_model_get (GTK_TREE_MODEL (dlg->priv->schemes_treeview_model),
 			    &iter, ID_COLUMN, &id, -1);
 
-	gedit_prefs_manager_set_source_style_scheme (id);
+	g_settings_set_string (dlg->priv->editor, GEDIT_SETTINGS_SCHEME, id);
 
 	set_buttons_sensisitivity_according_to_scheme (dlg, id);
 
@@ -657,7 +512,8 @@ style_scheme_changed (GtkWidget              *treeview,
 }
 
 static const gchar *
-ensure_color_scheme_id (const gchar *id)
+ensure_color_scheme_id (GeditPreferencesDialog *dlg,
+			const gchar            *id)
 {
 	GtkSourceStyleScheme *scheme = NULL;
 	GtkSourceStyleSchemeManager *manager = gedit_get_style_scheme_manager ();
@@ -666,7 +522,9 @@ ensure_color_scheme_id (const gchar *id)
 	{
 		gchar *pref_id;
 
-		pref_id = gedit_prefs_manager_get_source_style_scheme ();
+		pref_id = g_settings_get_string (dlg->priv->editor,
+						 GEDIT_SETTINGS_SCHEME);
+		
 		scheme = gtk_source_style_scheme_manager_get_scheme (manager,
 								     pref_id);
 		g_free (pref_id);
@@ -704,7 +562,7 @@ populate_color_scheme_list (GeditPreferencesDialog *dlg, const gchar *def_id)
 	
 	gtk_list_store_clear (dlg->priv->schemes_treeview_model);
 	
-	def_id = ensure_color_scheme_id (def_id);
+	def_id = ensure_color_scheme_id (dlg, def_id);
 	if (def_id == NULL) 
 	{
 		g_warning ("Cannot build the list of available color schemes.\n"
@@ -785,14 +643,15 @@ add_scheme_chooser_response_cb (GtkDialog              *chooser,
 
 		return;
 	}
-
-	gedit_prefs_manager_set_source_style_scheme (scheme_id);
+	
+	g_settings_set_string (dlg->priv->editor, GEDIT_SETTINGS_SCHEME,
+			       scheme_id);
 
 	scheme_id = populate_color_scheme_list (dlg, scheme_id);
 
 	set_buttons_sensisitivity_according_to_scheme (dlg, scheme_id);
 }
-			 
+
 static void
 install_scheme_clicked (GtkButton              *button,
 			GeditPreferencesDialog *dlg)
@@ -925,7 +784,11 @@ uninstall_scheme_clicked (GtkButton              *button,
 			set_buttons_sensisitivity_according_to_scheme (dlg, real_new_id);
 			
 			if (real_new_id != NULL)
-				gedit_prefs_manager_set_source_style_scheme (real_new_id);
+			{
+				g_settings_set_string (dlg->priv->editor,
+						       GEDIT_SETTINGS_SCHEME,
+						       real_new_id);
+			}
 		}
 
 		g_free (id);
@@ -1076,6 +939,8 @@ gedit_preferences_dialog_init (GeditPreferencesDialog *dlg)
 	gedit_debug (DEBUG_PREFS);
 
 	dlg->priv = GEDIT_PREFERENCES_DIALOG_GET_PRIVATE (dlg);
+	
+	dlg->priv->editor = g_settings_new ("org.gnome.gedit.preferences.editor");
 
 	gtk_dialog_add_buttons (GTK_DIALOG (dlg),
 				GTK_STOCK_CLOSE,
diff --git a/gedit/dialogs/gedit-search-dialog.c b/gedit/dialogs/gedit-search-dialog.c
index 1001f68..52d0673 100644
--- a/gedit/dialogs/gedit-search-dialog.c
+++ b/gedit/dialogs/gedit-search-dialog.c
@@ -375,7 +375,7 @@ gedit_search_dialog_init (GeditSearchDialog *dlg)
 		return;
 	}
 
-	dlg->priv->search_entry = gedit_history_entry_new ("gedit2_search_for_entry",
+	dlg->priv->search_entry = gedit_history_entry_new ("search-for-entry",
 							   TRUE);
 	gtk_widget_set_size_request (dlg->priv->search_entry, 300, -1);
 	gedit_history_entry_set_escape_func
@@ -391,7 +391,7 @@ gedit_search_dialog_init (GeditSearchDialog *dlg)
 				   dlg->priv->search_entry,
 				   1, 2, 0, 1);
 
-	dlg->priv->replace_entry = gedit_history_entry_new ("gedit2_replace_with_entry",
+	dlg->priv->replace_entry = gedit_history_entry_new ("replace-with-entry",
 							    TRUE);
 	gedit_history_entry_set_escape_func
 			(GEDIT_HISTORY_ENTRY (dlg->priv->replace_entry),
diff --git a/gedit/gedit-app.c b/gedit/gedit-app.c
index aa5cabd..09bc65b 100644
--- a/gedit/gedit-app.c
+++ b/gedit/gedit-app.c
@@ -38,7 +38,6 @@
 #include <glib/gi18n.h>
 
 #include "gedit-app.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-commands.h"
 #include "gedit-notebook.h"
 #include "gedit-debug.h"
@@ -46,6 +45,7 @@
 #include "gedit-enum-types.h"
 #include "gedit-dirs.h"
 #include "gseal-gtk-compat.h"
+#include "gedit-settings.h"
 
 #ifdef OS_OSX
 #include "gedit-app-osx.h"
@@ -78,6 +78,9 @@ struct _GeditAppPrivate
 
 	GtkPageSetup      *page_setup;
 	GtkPrintSettings  *print_settings;
+	
+	GSettings         *settings;
+	GSettings         *window_settings;
 };
 
 G_DEFINE_ABSTRACT_TYPE(GeditApp, gedit_app, G_TYPE_INITIALLY_UNOWNED)
@@ -98,6 +101,26 @@ gedit_app_finalize (GObject *object)
 }
 
 static void
+gedit_app_dispose (GObject *object)
+{
+	GeditApp *app = GEDIT_APP (object); 
+
+	if (app->priv->window_settings != NULL)
+	{
+		g_object_unref (app->priv->window_settings);
+		app->priv->window_settings = NULL;
+	}
+
+	if (app->priv->settings != NULL)
+	{
+		g_object_unref (app->priv->settings);
+		app->priv->settings = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_app_parent_class)->dispose (object);
+}
+
+static void
 gedit_app_get_property (GObject    *object,
 			guint       prop_id,
 			GValue     *value,
@@ -229,6 +252,7 @@ gedit_app_class_init (GeditAppClass *klass)
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = gedit_app_finalize;
+	object_class->dispose = gedit_app_dispose;
 	object_class->get_property = gedit_app_get_property;
 	object_class->constructor = gedit_app_constructor;
 
@@ -456,9 +480,13 @@ gedit_app_init (GeditApp *app)
 	app->priv = GEDIT_APP_GET_PRIVATE (app);
 
 	load_accels ();
+	
+	/* Load settings */
+	app->priv->settings = gedit_settings_new ();
+	app->priv->window_settings = g_settings_new ("org.gnome.gedit.state.window");
 
 	/* initial lockdown state */
-	app->priv->lockdown = gedit_prefs_manager_get_lockdown ();
+	app->priv->lockdown = gedit_settings_get_lockdown (GEDIT_SETTINGS (app->priv->settings));
 }
 
 /**
@@ -644,17 +672,20 @@ gedit_app_create_window_real (GeditApp    *app,
 		GdkWindowState state;
 		gint w, h;
 
-		state = gedit_prefs_manager_get_window_state ();
+		state = g_settings_get_int (app->priv->window_settings,
+					    GEDIT_SETTINGS_WINDOW_STATE);
 
 		if ((state & GDK_WINDOW_STATE_MAXIMIZED) != 0)
 		{
-			gedit_prefs_manager_get_default_window_size (&w, &h);
+			_gedit_window_get_default_size (&w, &h);
 			gtk_window_set_default_size (GTK_WINDOW (window), w, h);
 			gtk_window_maximize (GTK_WINDOW (window));
 		}
 		else
 		{
-			gedit_prefs_manager_get_window_size (&w, &h);
+			g_settings_get (app->priv->window_settings,
+					GEDIT_SETTINGS_WINDOW_SIZE,
+					"(ii)", &w, &h);
 			gtk_window_set_default_size (GTK_WINDOW (window), w, h);
 			gtk_window_unmaximize (GTK_WINDOW (window));
 		}
@@ -1043,4 +1074,12 @@ _gedit_app_set_default_print_settings (GeditApp         *app,
 	app->priv->print_settings = g_object_ref (settings);
 }
 
+GSettings *
+_gedit_app_get_settings (GeditApp *app)
+{
+	g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
+
+	return app->priv->settings;
+}
+
 /* ex:ts=8:noet: */
diff --git a/gedit/gedit-app.h b/gedit/gedit-app.h
index 07368b3..b3db742 100644
--- a/gedit/gedit-app.h
+++ b/gedit/gedit-app.h
@@ -161,6 +161,8 @@ GtkPrintSettings	*_gedit_app_get_default_print_settings	(GeditApp         *app);
 void			 _gedit_app_set_default_print_settings	(GeditApp         *app,
 								 GtkPrintSettings *settings);
 
+GSettings		*_gedit_app_get_settings		(GeditApp    *app);
+
 G_END_DECLS
 
 #endif  /* __GEDIT_APP_H__  */
diff --git a/gedit/gedit-document-loader.c b/gedit/gedit-document-loader.c
index 5e17507..d6118af 100644
--- a/gedit/gedit-document-loader.c
+++ b/gedit/gedit-document-loader.c
@@ -41,12 +41,12 @@
 #include "gedit-document-loader.h"
 #include "gedit-document-output-stream.h"
 #include "gedit-smart-charset-converter.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-debug.h"
 #include "gedit-metadata-manager.h"
 #include "gedit-utils.h"
 #include "gedit-marshal.h"
 #include "gedit-enum-types.h"
+#include "gedit-settings.h"
 
 #ifndef ENABLE_GVFS_METADATA
 #include "gedit-metadata-manager.h"
@@ -97,7 +97,10 @@ enum
 static void open_async_read (AsyncData *async);
 
 struct _GeditDocumentLoaderPrivate
-{	GeditDocument		 *document;
+{
+	GSettings		 *enc_settings;
+
+	GeditDocument		 *document;
 	gboolean		  used;
 
 	/* Info on the current file */
@@ -230,6 +233,12 @@ gedit_document_loader_dispose (GObject *object)
 		g_object_unref (priv->location);
 		priv->location = NULL;
 	}
+	
+	if (priv->enc_settings != NULL)
+	{
+		g_object_unref (priv->enc_settings);
+		priv->enc_settings = NULL;
+	}
 
 	G_OBJECT_CLASS (gedit_document_loader_parent_class)->dispose (object);
 }
@@ -306,6 +315,7 @@ gedit_document_loader_init (GeditDocumentLoader *loader)
 	loader->priv->auto_detected_newline_type = GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT;
 	loader->priv->converter = NULL;
 	loader->priv->error = NULL;
+	loader->priv->enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
 }
 
 GeditDocumentLoader *
@@ -585,9 +595,16 @@ static GSList *
 get_candidate_encodings (GeditDocumentLoader *loader)
 {
 	const GeditEncoding *metadata;
-	GSList *encodings = NULL;
+	GSList *encodings;
+	gchar **enc_strv;
+	gsize len;
+
+	enc_strv = g_settings_get_strv (loader->priv->enc_settings,
+					GEDIT_SETTINGS_ENCODING_AUTO_DETECTED,
+					&len);
 
-	encodings = gedit_prefs_manager_get_auto_detected_encodings ();
+	encodings = _gedit_encoding_strv_to_list ((const gchar * const *)enc_strv);
+	g_strfreev (enc_strv);
 
 	metadata = get_metadata_encoding (loader);
 	if (metadata != NULL)
diff --git a/gedit/gedit-document-saver.c b/gedit/gedit-document-saver.c
index 7dce672..8dc29d3 100644
--- a/gedit/gedit-document-saver.c
+++ b/gedit/gedit-document-saver.c
@@ -39,11 +39,11 @@
 
 #include "gedit-document-saver.h"
 #include "gedit-document-input-stream.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-debug.h"
 #include "gedit-marshal.h"
 #include "gedit-utils.h"
 #include "gedit-enum-types.h"
+#include "gedit-settings.h"
 
 #define WRITE_CHUNK_SIZE 8192
 
@@ -89,6 +89,8 @@ static void check_modified_async (AsyncData          *async);
 
 struct _GeditDocumentSaverPrivate
 {
+	GSettings		 *editor_settings;
+
 	GFileInfo		 *info;
 	GeditDocument		 *document;
 	gboolean		  used;
@@ -222,6 +224,12 @@ gedit_document_saver_dispose (GObject *object)
 		priv->location = NULL;
 	}
 
+	if (priv->editor_settings != NULL)
+	{
+		g_object_unref (priv->editor_settings);
+		priv->editor_settings = NULL;
+	}
+
 	G_OBJECT_CLASS (gedit_document_saver_parent_class)->dispose (object);
 }
 
@@ -340,6 +348,7 @@ gedit_document_saver_init (GeditDocumentSaver *saver)
 	saver->priv->cancellable = g_cancellable_new ();
 	saver->priv->error = NULL;
 	saver->priv->used = FALSE;
+	saver->priv->editor_settings = g_settings_new ("org.gnome.gedit.preferences.editor");
 }
 
 GeditDocumentSaver *
@@ -942,7 +951,8 @@ gedit_document_saver_save (GeditDocumentSaver *saver,
 	if ((saver->priv->flags & GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP) != 0)
 		saver->priv->keep_backup = FALSE;
 	else
-		saver->priv->keep_backup = gedit_prefs_manager_get_create_backup_copy ();
+		saver->priv->keep_backup = g_settings_get_boolean (saver->priv->editor_settings,
+								   GEDIT_SETTINGS_CREATE_BACKUP_COPY);
 
 	saver->priv->old_mtime = *old_mtime;
 
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index 98b979b..4572a26 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -40,7 +40,7 @@
 #include <glib/gi18n.h>
 #include <gtksourceview/gtksourceiter.h>
 
-#include "gedit-prefs-manager-app.h"
+#include "gedit-settings.h"
 #include "gedit-document.h"
 #include "gedit-debug.h"
 #include "gedit-utils.h"
@@ -103,7 +103,10 @@ static void	delete_range_cb 		(GeditDocument *doc,
 			     
 struct _GeditDocumentPrivate
 {
+	GSettings   *editor_settings;
+
 	GFile       *location;
+
 	gint 	     untitled_number;
 	gchar       *short_name;
 
@@ -288,6 +291,12 @@ gedit_document_dispose (GObject *object)
 		g_object_unref (doc->priv->loader);
 		doc->priv->loader = NULL;
 	}
+	
+	if (doc->priv->editor_settings)
+	{
+		g_object_unref (doc->priv->editor_settings);
+		doc->priv->editor_settings = NULL;
+	}
 
 	if (doc->priv->metadata_info != NULL)
 	{
@@ -689,8 +698,15 @@ set_language (GeditDocument     *doc,
 	gtk_source_buffer_set_language (GTK_SOURCE_BUFFER (doc), lang);
 
 	if (lang != NULL)
+	{
+		gboolean syntax_hl;
+		
+		syntax_hl = g_settings_get_boolean (doc->priv->editor_settings,
+						    GEDIT_SETTINGS_SYNTAX_HIGHLIGHTING);
+		
 		gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (doc),
-				 gedit_prefs_manager_get_enable_syntax_highlighting ());
+							syntax_hl);
+	}
 	else
 		gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (doc), 
 				 FALSE);
@@ -733,14 +749,14 @@ set_encoding (GeditDocument       *doc,
 }
 
 static GtkSourceStyleScheme *
-get_default_style_scheme (void)
+get_default_style_scheme (GSettings *editor_settings)
 {
 	gchar *scheme_id;
 	GtkSourceStyleScheme *def_style;
 	GtkSourceStyleSchemeManager *manager;
 
 	manager = gedit_get_style_scheme_manager ();
-	scheme_id = gedit_prefs_manager_get_source_style_scheme ();
+	scheme_id = g_settings_get_string (editor_settings, GEDIT_SETTINGS_SCHEME);
 	def_style = gtk_source_style_scheme_manager_get_scheme (manager,
 								scheme_id);
 
@@ -887,10 +903,15 @@ static void
 gedit_document_init (GeditDocument *doc)
 {
 	GtkSourceStyleScheme *style_scheme;
+	gint undo_actions;
+	gboolean bracket_matching;
+	gboolean search_hl;
 
 	gedit_debug (DEBUG_DOCUMENT);
 
 	doc->priv = GEDIT_DOCUMENT_GET_PRIVATE (doc);
+	
+	doc->priv->editor_settings = g_settings_new ("org.gnome.gedit.preferences.editor");
 
 	doc->priv->location = NULL;
 	doc->priv->untitled_number = get_untitled_number ();
@@ -917,16 +938,23 @@ gedit_document_init (GeditDocument *doc)
 
 	doc->priv->newline_type = GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT;
 
+	g_settings_get (doc->priv->editor_settings, GEDIT_SETTINGS_MAX_UNDO_ACTIONS,
+			"u", &undo_actions);
+	bracket_matching = g_settings_get_boolean (doc->priv->editor_settings,
+						   GEDIT_SETTINGS_BRACKET_MATCHING);
+	search_hl = g_settings_get_boolean (doc->priv->editor_settings,
+					    GEDIT_SETTINGS_SEARCH_HIGHLIGHTING);
+
 	gtk_source_buffer_set_max_undo_levels (GTK_SOURCE_BUFFER (doc), 
-					       gedit_prefs_manager_get_undo_actions_limit ());
+					       undo_actions);
 
 	gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (doc), 
-							   gedit_prefs_manager_get_bracket_matching ());
+							   bracket_matching);
 
 	gedit_document_set_enable_search_highlighting (doc,
-						       gedit_prefs_manager_get_enable_search_highlighting ());
+						       search_hl);
 
-	style_scheme = get_default_style_scheme ();
+	style_scheme = get_default_style_scheme (doc->priv->editor_settings);
 	if (style_scheme != NULL)
 		gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (doc),
 						    style_scheme);
@@ -1256,6 +1284,7 @@ document_loader_loaded (GeditDocumentLoader *loader,
 	{
 		GtkTextIter iter;
 		GFileInfo *info;
+		gboolean restore_cursor;
 		const gchar *content_type = NULL;
 		gboolean read_only = FALSE;
 		GTimeVal mtime = {0, 0};
@@ -1291,6 +1320,9 @@ document_loader_loaded (GeditDocumentLoader *loader,
 		set_newline_type (doc,
 		                  gedit_document_loader_get_newline_type (loader));
 
+		restore_cursor = g_settings_get_boolean (doc->priv->editor_settings,
+							 GEDIT_SETTINGS_RESTORE_CURSOR_POSITION);
+
 		/* move the cursor at the requested line if any */
 		if (doc->priv->requested_line_pos > 0)
 		{
@@ -1305,7 +1337,7 @@ document_loader_loaded (GeditDocumentLoader *loader,
 								 column);
 		}
 		/* else, if enabled, to the position stored in the metadata */
-		else if (gedit_prefs_manager_get_restore_cursor_position ())
+		else if (restore_cursor)
 		{
 			gchar *pos;
 			gint offset;
diff --git a/gedit/gedit-encodings-combo-box.c b/gedit/gedit-encodings-combo-box.c
index a3c49d9..995bbe8 100644
--- a/gedit/gedit-encodings-combo-box.c
+++ b/gedit/gedit-encodings-combo-box.c
@@ -37,8 +37,9 @@
 #include <gtk/gtk.h>
 
 #include <gedit/gedit-encodings-combo-box.h>
-#include <gedit/gedit-prefs-manager.h>
 #include <gedit/dialogs/gedit-encodings-dialog.h>
+#include "gedit-settings.h"
+#include "gedit-utils.h"
 
 #include "gseal-gtk-compat.h"
 
@@ -50,6 +51,8 @@
 
 struct _GeditEncodingsComboBoxPrivate
 {
+	GSettings *enc_settings;
+
 	GtkListStore *store;
 	glong changed_id;
 
@@ -255,6 +258,8 @@ update_menu (GeditEncodingsComboBox *menu)
 	gchar *str;
 	const GeditEncoding *utf8_encoding;
 	const GeditEncoding *current_encoding;
+	gchar **enc_strv;
+	gsize len;
 
 	store = menu->priv->store;
 
@@ -315,7 +320,12 @@ update_menu (GeditEncodingsComboBox *menu)
 		g_free (str);
 	}
 
-	encodings = gedit_prefs_manager_get_shown_in_menu_encodings ();
+	enc_strv = g_settings_get_strv (menu->priv->enc_settings,
+					GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU,
+					&len);
+
+	encodings = _gedit_encoding_strv_to_list ((const gchar * const *)enc_strv);
+	g_strfreev (enc_strv);
 
 	for (l = encodings; l != NULL; l = g_slist_next (l))
 	{
@@ -340,23 +350,20 @@ update_menu (GeditEncodingsComboBox *menu)
 
 	g_slist_free (encodings);
 
-	if (gedit_prefs_manager_shown_in_menu_encodings_can_set ())
-	{
-		gtk_list_store_append (store, &iter);
-		/* separator */
-		gtk_list_store_set (store, &iter,
-				    NAME_COLUMN, "",
-				    ENCODING_COLUMN, NULL,
-				    ADD_COLUMN, FALSE,
-				    -1);
+	gtk_list_store_append (store, &iter);
+	/* separator */
+	gtk_list_store_set (store, &iter,
+			    NAME_COLUMN, "",
+			    ENCODING_COLUMN, NULL,
+			    ADD_COLUMN, FALSE,
+			    -1);
 
-		gtk_list_store_append (store, &iter);
-		gtk_list_store_set (store, &iter,
-				    NAME_COLUMN, _("Add or Remove..."),
-				    ENCODING_COLUMN, NULL,
-				    ADD_COLUMN, TRUE,
-				    -1);
-	}
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter,
+			    NAME_COLUMN, _("Add or Remove..."),
+			    ENCODING_COLUMN, NULL,
+			    ADD_COLUMN, TRUE,
+			    -1);
 
 	/* set the model back */
 	gtk_combo_box_set_model (GTK_COMBO_BOX (menu),
@@ -373,6 +380,8 @@ gedit_encodings_combo_box_init (GeditEncodingsComboBox *menu)
 
 	menu->priv = GEDIT_ENCODINGS_COMBO_BOX_GET_PRIVATE (menu);
 
+	menu->priv->enc_settings = g_settings_new ("org.gnome.gedit.preferences.encodings");
+
 	menu->priv->store = gtk_list_store_new (N_COLUMNS,
 						G_TYPE_STRING,
 						G_TYPE_POINTER,
diff --git a/gedit/gedit-encodings.c b/gedit/gedit-encodings.c
index 9902c5b..2e055c5 100644
--- a/gedit/gedit-encodings.c
+++ b/gedit/gedit-encodings.c
@@ -471,4 +471,73 @@ gedit_encoding_get_type (void)
 	return our_type;
 } 
 
+static gboolean
+data_exists (GSList         *list,
+	     const gpointer  data)
+{
+	while (list != NULL)
+	{
+		if (list->data == data)
+			return TRUE;
+
+		list = g_slist_next (list);
+	}
+
+	return FALSE;
+}
+
+GSList *
+_gedit_encoding_strv_to_list (const gchar * const *enc_str)
+{
+	GSList *res = NULL;
+	gchar **p;
+	const GeditEncoding *enc;
+	
+	for (p = (gchar **)enc_str; p != NULL && *p != NULL; p++)
+	{
+		const gchar *charset = *p;
+
+		if (strcmp (charset, "CURRENT") == 0)
+			g_get_charset (&charset);
+
+		g_return_val_if_fail (charset != NULL, NULL);
+		enc = gedit_encoding_get_from_charset (charset);
+
+		if (enc != NULL)
+		{
+			if (!data_exists (res, (gpointer)enc))
+				res = g_slist_prepend (res, (gpointer)enc);
+
+		}
+	}
+
+	return g_slist_reverse (res);
+}
+
+gchar **
+_gedit_encoding_list_to_strv (const GSList *enc_list)
+{
+	GSList *l;
+	GPtrArray *array;
+
+	array = g_ptr_array_sized_new (g_slist_length ((GSList *)enc_list) + 1);
+
+	for (l = (GSList *)enc_list; l != NULL; l = g_slist_next (l))
+	{
+		const GeditEncoding *enc;
+		const gchar *charset;
+		
+		enc = (const GeditEncoding *)l->data;
+
+		charset = gedit_encoding_get_charset (enc);
+		g_return_val_if_fail (charset != NULL, NULL);
+
+		g_ptr_array_add (array, g_strdup (charset));
+	}
+
+	g_ptr_array_add (array, NULL);
+
+	return (gchar **)g_ptr_array_free (array, FALSE);
+}
+
 /* ex:ts=8:noet: */
diff --git a/gedit/gedit-encodings.h b/gedit/gedit-encodings.h
index 91a04bd..14c3d16 100644
--- a/gedit/gedit-encodings.h
+++ b/gedit/gedit-encodings.h
@@ -57,6 +57,9 @@ const GeditEncoding 	*gedit_encoding_get_current	 (void);
 GeditEncoding		*gedit_encoding_copy		 (const GeditEncoding *enc);
 void               	 gedit_encoding_free		 (GeditEncoding       *enc);
 
+GSList			*_gedit_encoding_strv_to_list    (const gchar * const *enc_str);
+gchar		       **_gedit_encoding_list_to_strv	 (const GSList *enc);
+
 G_END_DECLS
 
 #endif  /* __GEDIT_ENCODINGS_H__ */
diff --git a/gedit/gedit-file-chooser-dialog.c b/gedit/gedit-file-chooser-dialog.c
index 895cb19..84de7fb 100644
--- a/gedit/gedit-file-chooser-dialog.c
+++ b/gedit/gedit-file-chooser-dialog.c
@@ -43,9 +43,9 @@
 #include "gedit-file-chooser-dialog.h"
 #include "gedit-encodings-combo-box.h"
 #include "gedit-language-manager.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-debug.h"
 #include "gedit-enum-types.h"
+#include "gedit-settings.h"
 
 #define GEDIT_FILE_CHOOSER_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_FILE_CHOOSER_DIALOG, GeditFileChooserDialogPrivate))
 
@@ -54,6 +54,8 @@
 
 struct _GeditFileChooserDialogPrivate
 {
+	GSettings *filter_settings;
+
 	GtkWidget *option_menu;
 	GtkWidget *extra_widget;
 
@@ -65,10 +67,26 @@ struct _GeditFileChooserDialogPrivate
 G_DEFINE_TYPE(GeditFileChooserDialog, gedit_file_chooser_dialog, GTK_TYPE_FILE_CHOOSER_DIALOG)
 
 static void
+gedit_file_chooser_dialog_dispose (GObject *object)
+{
+	GeditFileChooserDialog *dialog = GEDIT_FILE_CHOOSER_DIALOG (object);
+
+	if (dialog->priv->filter_settings != NULL)
+	{
+		g_object_unref (dialog->priv->filter_settings);
+		dialog->priv->filter_settings = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_file_chooser_dialog_parent_class)->dispose (object);
+}
+
+static void
 gedit_file_chooser_dialog_class_init (GeditFileChooserDialogClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+	object_class->dispose = gedit_file_chooser_dialog_dispose;
+
 	g_type_class_add_private (object_class, sizeof(GeditFileChooserDialogPrivate));
 }
 
@@ -250,9 +268,6 @@ filter_changed (GeditFileChooserDialog *dialog,
 {
 	GtkFileFilter *filter;
 
-	if (!gedit_prefs_manager_active_file_filter_can_set ())
-		return;
-
 	filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog));
 	if (filter != NULL)
 	{
@@ -267,7 +282,8 @@ filter_changed (GeditFileChooserDialog *dialog,
 
 		gedit_debug_message (DEBUG_COMMANDS, "Active filter: %s (%d)", name, id);
 
-		gedit_prefs_manager_set_active_file_filter (id);
+		g_settings_set_int (dialog->priv->filter_settings,
+				    GEDIT_SETTINGS_ACTIVE_FILE_FILTER, id);
 	}
 }
 
@@ -353,6 +369,8 @@ static void
 gedit_file_chooser_dialog_init (GeditFileChooserDialog *dialog)
 {
 	dialog->priv = GEDIT_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
+	
+	dialog->priv->filter_settings = g_settings_new ("org.gnome.gedit.state.file-filter");
 }
 
 static GtkWidget *
@@ -391,7 +409,8 @@ gedit_file_chooser_dialog_new_valist (const gchar          *title,
 				GEDIT_ENCODINGS_COMBO_BOX (GEDIT_FILE_CHOOSER_DIALOG (result)->priv->option_menu),
 				encoding);
 
-	active_filter = gedit_prefs_manager_get_active_file_filter ();
+	active_filter = g_settings_get_int (GEDIT_FILE_CHOOSER_DIALOG (result)->priv->filter_settings,
+					    GEDIT_SETTINGS_ACTIVE_FILE_FILTER);
 	gedit_debug_message (DEBUG_COMMANDS, "Active filter: %d", active_filter);
 
 	/* Filters */
diff --git a/gedit/gedit-history-entry.c b/gedit/gedit-history-entry.c
index 342a67e..8e47a8a 100644
--- a/gedit/gedit-history-entry.c
+++ b/gedit/gedit-history-entry.c
@@ -35,7 +35,6 @@
 #include <string.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
-#include <gconf/gconf-client.h>
 
 #include "gedit-history-entry.h"
 
@@ -60,7 +59,7 @@ struct _GeditHistoryEntryPrivate
 	
 	GtkEntryCompletion *completion;
 	
-	GConfClient        *gconf_client;
+	GSettings          *settings;
 };
 
 G_DEFINE_TYPE(GeditHistoryEntry, gedit_history_entry, GTK_TYPE_COMBO_BOX_ENTRY)
@@ -132,10 +131,10 @@ gedit_history_entry_finalize (GObject *object)
 	
 	g_free (priv->history_id);
 
-	if (priv->gconf_client != NULL)
+	if (priv->settings != NULL)
 	{
-		g_object_unref (G_OBJECT (priv->gconf_client));
-		priv->gconf_client = NULL;
+		g_object_unref (G_OBJECT (priv->settings));
+		priv->settings = NULL;
 	}
 
 	G_OBJECT_CLASS (gedit_history_entry_parent_class)->finalize (object);
@@ -188,42 +187,24 @@ get_history_store (GeditHistoryEntry *entry)
 	return (GtkListStore *) store;
 }
 
-static char *
-get_history_key (GeditHistoryEntry *entry)
-{
-	gchar *tmp;
-	gchar *key;
-
-	/*
-	 * We store the data under /apps/gnome-settings/
-	 * like the old GnomeEntry did. Maybe we should
-	 * consider moving it to the /gedit GConf prefix...
-	 * Or maybe we should just switch away from GConf.
-	 */
-
-	tmp = gconf_escape_key (entry->priv->history_id, -1);
-	key = g_strconcat ("/apps/gnome-settings/",
-			   "gedit",
-			   "/history-",
-			   tmp,
-			   NULL);
-	g_free (tmp);
-
-	return key;
-}
-
-static GSList *
-get_history_list (GeditHistoryEntry *entry)
+static GVariant *
+get_history_variant (GeditHistoryEntry *entry)
 {
 	GtkListStore *store;
 	GtkTreeIter iter;
+	GVariant *variant;
 	gboolean valid;
-	GSList *list = NULL;
+	gchar **items;
+	gint n_children;
+	gint i = 0;
 
 	store = get_history_store (entry);
 
 	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store),
 					       &iter);
+	n_children = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store),
+						     &iter);
+	items = g_new (gchar *, n_children + 1);
 
 	while (valid)
 	{
@@ -234,35 +215,34 @@ get_history_list (GeditHistoryEntry *entry)
 				    0, &str,
 				    -1);
 
-		list = g_slist_prepend (list, str);
+		items[i] = str;
 
 		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store),
 						  &iter);
+		i++;
 	}
+	
+	items[i] = NULL;
+	
+	variant = g_variant_new_strv ((const gchar * const *)items, n_children);
+	g_strfreev (items);
 
-	return g_slist_reverse (list);
+	return variant;;
 }
 
 static void
 gedit_history_entry_save_history (GeditHistoryEntry *entry)
 {
-	GSList *gconf_items;
-	gchar *key;
+	GVariant *items;
 
 	g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
 
-	gconf_items = get_history_list (entry);
-	key = get_history_key (entry);
+	items = get_history_variant (entry);
 
-	gconf_client_set_list (entry->priv->gconf_client,
-			      key,
-			      GCONF_VALUE_STRING,
-			      gconf_items,
-			      NULL);
+	g_settings_set_value (entry->priv->settings,
+			      entry->priv->history_id, items);
 
-	g_slist_foreach (gconf_items, (GFunc) g_free, NULL);
-	g_slist_free (gconf_items);
-	g_free (key);
+	g_variant_unref (items);
 }
 
 static gboolean
@@ -382,39 +362,35 @@ gedit_history_entry_append_text (GeditHistoryEntry *entry,
 static void
 gedit_history_entry_load_history (GeditHistoryEntry *entry)
 {
-	GSList *gconf_items, *l;
+	GVariant *variant;
+	const gchar **items;
 	GtkListStore *store;
 	GtkTreeIter iter;
-	gchar *key;
-	guint i;
+	gsize i;
 
 	g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
 
 	store = get_history_store (entry);
-	key = get_history_key (entry);
 
-	gconf_items = gconf_client_get_list (entry->priv->gconf_client,
-					     key,
-					     GCONF_VALUE_STRING,
-					     NULL);
+	variant = g_settings_get_value (entry->priv->settings,
+					entry->priv->history_id);
+	items = g_variant_get_strv (variant, &i);
 
 	gtk_list_store_clear (store);
 
-	for (l = gconf_items, i = 0;
-	     l != NULL && i < entry->priv->history_length;
-	     l = l->next, i++)
+	for (i = 0;
+	     items[i] != NULL && i < entry->priv->history_length;
+	     i++)
 	{
 		gtk_list_store_append (store, &iter);
 		gtk_list_store_set (store, 
 				    &iter,
 				    0,
-				    l->data,
+				    items[i],
 				    -1);
 	}
 
-	g_slist_foreach (gconf_items, (GFunc) g_free, NULL);
-	g_slist_free (gconf_items);
-	g_free (key);
+	g_variant_unref (variant);
 }
 
 void
@@ -443,7 +419,7 @@ gedit_history_entry_init (GeditHistoryEntry *entry)
 
 	priv->completion = NULL;
 	
-	priv->gconf_client = gconf_client_get_default ();
+	priv->settings = g_settings_new ("org.gnome.gedit.state.history-entry");
 }
 
 void
diff --git a/gedit/gedit-io-error-message-area.c b/gedit/gedit-io-error-message-area.c
index dcc8196..fd8d462 100644
--- a/gedit/gedit-io-error-message-area.c
+++ b/gedit/gedit-io-error-message-area.c
@@ -42,10 +42,10 @@
 #include <glib/gi18n.h>
 #include <gio/gio.h>
 
+#include "gedit-settings.h"
 #include "gedit-utils.h"
 #include "gedit-document.h"
 #include "gedit-io-error-message-area.h"
-#include "gedit-prefs-manager.h"
 #include <gedit/gedit-encodings-combo-box.h>
 
 #include "gseal-gtk-compat.h"
@@ -1006,6 +1006,8 @@ gedit_no_backup_saving_error_message_area_new (GFile        *location,
 	gchar *full_formatted_uri;
 	gchar *uri_for_display;
 	gchar *temp_uri_for_display;
+	gboolean create_backup_copy;
+	GSettings *editor_settings;
 
 	g_return_val_if_fail (G_IS_FILE (location), NULL);
 	g_return_val_if_fail (error != NULL, NULL);
@@ -1059,9 +1061,14 @@ gedit_no_backup_saving_error_message_area_new (GFile        *location,
 	vbox = gtk_vbox_new (FALSE, 6);
 	gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
 
-	// FIXME: review this messages
+	editor_settings = g_settings_new ("org.gnome.gedit.preferences.editor");
+
+	create_backup_copy = g_settings_get_boolean (editor_settings,
+						     GEDIT_SETTINGS_CREATE_BACKUP_COPY);
+	g_object_unref (editor_settings);
 
-	if (gedit_prefs_manager_get_create_backup_copy ())
+	// FIXME: review this messages
+	if (create_backup_copy)
 		primary_text = g_strdup_printf (_("Could not create a backup file while saving %s"),
 						uri_for_display);
 	else
diff --git a/gedit/gedit-language-manager.c b/gedit/gedit-language-manager.c
index c618ea1..0292f21 100644
--- a/gedit/gedit-language-manager.c
+++ b/gedit/gedit-language-manager.c
@@ -32,7 +32,6 @@
 #include <string.h>
 
 #include "gedit-language-manager.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-utils.h"
 #include "gedit-debug.h"
 
diff --git a/gedit/gedit-plugins-engine.c b/gedit/gedit-plugins-engine.c
index 2f9172d..e2560c7 100644
--- a/gedit/gedit-plugins-engine.c
+++ b/gedit/gedit-plugins-engine.c
@@ -41,10 +41,11 @@
 #include "gedit-plugin.h"
 #include "gedit-debug.h"
 #include "gedit-app.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-plugin-loader.h"
 #include "gedit-object-module.h"
 #include "gedit-dirs.h"
+#include "gedit-settings.h"
+#include "gedit-utils.h"
 
 #define GEDIT_PLUGINS_ENGINE_BASE_KEY "/apps/gedit-2/plugins"
 #define GEDIT_PLUGINS_ENGINE_KEY GEDIT_PLUGINS_ENGINE_BASE_KEY "/active-plugins"
@@ -72,6 +73,8 @@ G_DEFINE_TYPE(GeditPluginsEngine, gedit_plugins_engine, G_TYPE_OBJECT)
 
 struct _GeditPluginsEnginePrivate
 {
+	GSettings *plugin_settings;
+
 	GList *plugin_list;
 	GHashTable *loaders;
 
@@ -282,6 +285,8 @@ gedit_plugins_engine_init (GeditPluginsEngine *engine)
 						    GEDIT_TYPE_PLUGINS_ENGINE,
 						    GeditPluginsEnginePrivate);
 
+	engine->priv->plugin_settings = g_settings_new ("org.gnome.gedit.plugins");
+
 	load_all_plugins (engine);
 
 	/* make sure that the first reactivation will read active plugins
@@ -344,12 +349,27 @@ gedit_plugins_engine_finalize (GObject *object)
 }
 
 static void
+gedit_plugins_engine_dispose (GObject *object)
+{
+	GeditPluginsEngine *engine = GEDIT_PLUGINS_ENGINE (object);
+	
+	if (engine->priv->plugin_settings != NULL)
+	{
+		g_object_unref (engine->priv->plugin_settings);
+		engine->priv->plugin_settings = NULL;
+	}
+	
+	G_OBJECT_CLASS (gedit_plugins_engine_parent_class)->dispose (object);
+}
+
+static void
 gedit_plugins_engine_class_init (GeditPluginsEngineClass *klass)
 {
 	GType the_type = G_TYPE_FROM_CLASS (klass);
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
 	object_class->finalize = gedit_plugins_engine_finalize;
+	object_class->dispose = gedit_plugins_engine_dispose;
 	klass->activate_plugin = gedit_plugins_engine_activate_plugin_real;
 	klass->deactivate_plugin = gedit_plugins_engine_deactivate_plugin_real;
 
@@ -543,7 +563,9 @@ save_active_plugin_list (GeditPluginsEngine *engine)
 		}
 	}
 
-	gedit_prefs_manager_set_active_plugins (active_plugins);
+	gedit_settings_set_list (engine->priv->plugin_settings,
+				 GEDIT_SETTINGS_ACTIVE_PLUGINS,
+				 active_plugins);
 
 	g_slist_free (active_plugins);
 }
@@ -702,7 +724,8 @@ gedit_plugins_engine_activate_plugins (GeditPluginsEngine *engine,
 	/* the first time, we get the 'active' plugins from gconf */
 	if (engine->priv->activate_from_prefs)
 	{
-		active_plugins = gedit_prefs_manager_get_active_plugins ();
+		active_plugins = gedit_settings_get_list (engine->priv->plugin_settings,
+							  GEDIT_SETTINGS_ACTIVE_PLUGINS);
 	}
 
 	for (pl = engine->priv->plugin_list; pl; pl = pl->next)
@@ -829,7 +852,8 @@ gedit_plugins_engine_active_plugins_changed (GeditPluginsEngine *engine)
 
 	gedit_debug (DEBUG_PLUGINS);
 
-	active_plugins = gedit_prefs_manager_get_active_plugins ();
+	active_plugins = gedit_settings_get_list (engine->priv->plugin_settings,
+						  GEDIT_SETTINGS_ACTIVE_PLUGINS);
 
 	for (pl = engine->priv->plugin_list; pl; pl = pl->next)
 	{
diff --git a/gedit/gedit-print-job.c b/gedit/gedit-print-job.c
index 23980d6..5c7178d 100644
--- a/gedit/gedit-print-job.c
+++ b/gedit/gedit-print-job.c
@@ -38,11 +38,11 @@
 
 #include "gedit-print-job.h"
 #include "gedit-debug.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-print-preview.h"
 #include "gedit-marshal.h"
 #include "gedit-utils.h"
 #include "gedit-dirs.h"
+#include "gedit-settings.h"
 
 
 #define GEDIT_PRINT_JOB_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
@@ -51,6 +51,8 @@
 
 struct _GeditPrintJobPrivate
 {
+	GSettings                *print_settings;
+
 	GeditView                *view;
 	GeditDocument            *doc;
 
@@ -167,6 +169,20 @@ gedit_print_job_finalize (GObject *object)
 	G_OBJECT_CLASS (gedit_print_job_parent_class)->finalize (object);
 }
 
+static void
+gedit_print_job_dispose (GObject *object)
+{
+	GeditPrintJob *job = GEDIT_PRINT_JOB (object);
+	
+	if (job->priv->print_settings != NULL)
+	{
+		g_object_unref (job->priv->print_settings);
+		job->priv->print_settings = NULL;
+	}
+	
+	G_OBJECT_CLASS (gedit_print_job_parent_class)->dispose (object);
+}
+
 static void 
 gedit_print_job_class_init (GeditPrintJobClass *klass)
 {
@@ -177,6 +193,7 @@ gedit_print_job_class_init (GeditPrintJobClass *klass)
 	object_class->get_property = gedit_print_job_get_property;
 	object_class->set_property = gedit_print_job_set_property;
 	object_class->finalize = gedit_print_job_finalize;
+	object_class->finalize = gedit_print_job_dispose;
 
 	g_object_class_install_property (object_class,
 					 PROP_VIEW,
@@ -229,15 +246,8 @@ static void
 line_numbers_checkbutton_toggled (GtkToggleButton *button,
 				  GeditPrintJob   *job)
 {
-	if (gtk_toggle_button_get_active (button))
-	{
-		gtk_widget_set_sensitive (job->priv->line_numbers_hbox, 
-					  gedit_prefs_manager_print_line_numbers_can_set ());
-	}
-	else
-	{
-		gtk_widget_set_sensitive (job->priv->line_numbers_hbox, FALSE);
-	}
+	gtk_widget_set_sensitive (job->priv->line_numbers_hbox,
+				  gtk_toggle_button_get_active (button));
 }
 
 static void
@@ -267,38 +277,30 @@ restore_button_clicked (GtkButton     *button,
 			GeditPrintJob *job)
 
 {
-	if (gedit_prefs_manager_print_font_body_can_set ())
-	{
-		const gchar *font;
-
-		font = gedit_prefs_manager_get_default_print_font_body ();
-
-		gtk_font_button_set_font_name (
-				GTK_FONT_BUTTON (job->priv->body_fontbutton),
-				font);
-	}
+	gchar *body, *header, *numbers;
 	
-	if (gedit_prefs_manager_print_font_header_can_set ())
-	{
-		const gchar *font;
-
-		font = gedit_prefs_manager_get_default_print_font_header ();
-
-		gtk_font_button_set_font_name (
-				GTK_FONT_BUTTON (job->priv->headers_fontbutton),
-				font);
-	}
-
-	if (gedit_prefs_manager_print_font_numbers_can_set ())
-	{
-		const gchar *font;
-
-		font = gedit_prefs_manager_get_default_print_font_numbers ();
-
-		gtk_font_button_set_font_name (
-				GTK_FONT_BUTTON (job->priv->numbers_fontbutton),
-				font);
-	}
+	body = g_settings_get_string (job->priv->print_settings,
+				      GEDIT_SETTINGS_PRINT_FONT_BODY_PANGO);
+	header = g_settings_get_string (job->priv->print_settings,
+					GEDIT_SETTINGS_PRINT_FONT_HEADER_PANGO);
+	numbers = g_settings_get_string (job->priv->print_settings,
+					 GEDIT_SETTINGS_PRINT_FONT_NUMBERS_PANGO);
+
+	gtk_font_button_set_font_name (
+			GTK_FONT_BUTTON (job->priv->body_fontbutton),
+			body);
+
+	gtk_font_button_set_font_name (
+			GTK_FONT_BUTTON (job->priv->headers_fontbutton),
+			header);
+
+	gtk_font_button_set_font_name (
+			GTK_FONT_BUTTON (job->priv->numbers_fontbutton),
+			numbers);
+	
+	g_free (body);
+	g_free (header);
+	g_free (numbers);
 }
 
 static GObject *
@@ -308,11 +310,12 @@ create_custom_widget_cb (GtkPrintOperation *operation,
 	gboolean ret;
 	GtkWidget *widget;
 	GtkWidget *error_widget;
-	gchar *font;
 	gint line_numbers;
-	gboolean can_set;
 	GtkWrapMode wrap_mode;
 	gchar *file;
+	gboolean syntax_hl;
+	gboolean print_header;
+	gchar *font_body, *font_header, *font_numbers;
 	gchar *root_objects[] = {
 		"adjustment1",
 		"contents",
@@ -347,31 +350,37 @@ create_custom_widget_cb (GtkPrintOperation *operation,
 		return G_OBJECT (error_widget);
 	}
 
+	/* Get all settings values */
+	syntax_hl = g_settings_get_boolean (job->priv->print_settings,
+					    GEDIT_SETTINGS_PRINT_SYNTAX_HIGHLIGHTING);
+	print_header = g_settings_get_boolean (job->priv->print_settings,
+					       GEDIT_SETTINGS_PRINT_HEADER);
+	g_settings_get (job->priv->print_settings, GEDIT_SETTINGS_PRINT_LINE_NUMBERS,
+			"u", &line_numbers);
+	font_body = g_settings_get_string (job->priv->print_settings,
+					   GEDIT_SETTINGS_PRINT_FONT_BODY_PANGO);
+	font_header = g_settings_get_string (job->priv->print_settings,
+					     GEDIT_SETTINGS_PRINT_FONT_HEADER_PANGO);
+	font_numbers = g_settings_get_string (job->priv->print_settings,
+					      GEDIT_SETTINGS_PRINT_FONT_NUMBERS_PANGO);
+
 	/* Print syntax */
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->syntax_checkbutton),
-				      gedit_prefs_manager_get_print_syntax_hl ());
-	gtk_widget_set_sensitive (job->priv->syntax_checkbutton,
-				  gedit_prefs_manager_print_syntax_hl_can_set ());
+				      syntax_hl);
 
 	/* Print page headers */
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->page_header_checkbutton),
-				      gedit_prefs_manager_get_print_header ());
-	gtk_widget_set_sensitive (job->priv->page_header_checkbutton,
-				  gedit_prefs_manager_print_header_can_set ());
+				      print_header);
 
 	/* Line numbers */
-	line_numbers =  gedit_prefs_manager_get_print_line_numbers ();
-	can_set = gedit_prefs_manager_print_line_numbers_can_set ();
-
 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->line_numbers_checkbutton),
 				      line_numbers > 0);
-	gtk_widget_set_sensitive (job->priv->line_numbers_checkbutton, can_set);
 
 	if (line_numbers > 0)
 	{
 		gtk_spin_button_set_value (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton),
 					   (guint) line_numbers);
-		gtk_widget_set_sensitive (job->priv->line_numbers_hbox, can_set);	
+		gtk_widget_set_sensitive (job->priv->line_numbers_hbox, TRUE);
 	}
 	else
 	{
@@ -381,8 +390,9 @@ create_custom_widget_cb (GtkPrintOperation *operation,
 	}
 
 	/* Text wrapping */
-	wrap_mode = gedit_prefs_manager_get_print_wrap_mode ();
-
+	wrap_mode = gedit_settings_get_wrap_mode (job->priv->print_settings,
+						  GEDIT_SETTINGS_WRAP_MODE);
+	
 	switch (wrap_mode)
 	{
 		case GTK_WRAP_WORD:
@@ -404,39 +414,21 @@ create_custom_widget_cb (GtkPrintOperation *operation,
 				GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton), TRUE);
 	}
 
-	can_set = gedit_prefs_manager_print_wrap_mode_can_set ();
-
-	gtk_widget_set_sensitive (job->priv->text_wrapping_checkbutton, can_set);
 	gtk_widget_set_sensitive (job->priv->do_not_split_checkbutton, 
-				  can_set && (wrap_mode != GTK_WRAP_NONE));
+				  wrap_mode != GTK_WRAP_NONE);
 
 	/* Set initial values */
-	font = gedit_prefs_manager_get_print_font_body ();
 	gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->body_fontbutton),
-				       font);
-	g_free (font);
+				       font_body);
+	g_free (font_body);
 
-	font = gedit_prefs_manager_get_print_font_header ();
 	gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->headers_fontbutton),
-				       font);
-	g_free (font);
+				       font_header);
+	g_free (font_header);
 
-	font = gedit_prefs_manager_get_print_font_numbers ();
 	gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->numbers_fontbutton),
-				       font);
-	g_free (font);
-
-	can_set = gedit_prefs_manager_print_font_body_can_set ();
-	gtk_widget_set_sensitive (job->priv->body_fontbutton, can_set);
-	gtk_widget_set_sensitive (job->priv->body_font_label, can_set);
-
-	can_set = gedit_prefs_manager_print_font_header_can_set ();
-	gtk_widget_set_sensitive (job->priv->headers_fontbutton, can_set);
-	gtk_widget_set_sensitive (job->priv->headers_font_label, can_set);
-
-	can_set = gedit_prefs_manager_print_font_numbers_can_set ();
-	gtk_widget_set_sensitive (job->priv->numbers_fontbutton, can_set);
-	gtk_widget_set_sensitive (job->priv->numbers_font_label, can_set);
+				       font_numbers);
+	g_free (font_numbers);
 
 	g_signal_connect (job->priv->line_numbers_checkbutton,
 			  "toggled",
@@ -463,39 +455,59 @@ custom_widget_apply_cb (GtkPrintOperation *operation,
 			GtkWidget         *widget,
 			GeditPrintJob     *job)
 {
-	gedit_prefs_manager_set_print_syntax_hl (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->syntax_checkbutton)));
-
-	gedit_prefs_manager_set_print_header (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->page_header_checkbutton)));
+	gboolean syntax, page_header;
+	const gchar *body, *header, *numbers;
+
+	syntax = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->syntax_checkbutton));
+	page_header = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->page_header_checkbutton));
+	body = gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->body_fontbutton));
+	header = gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->headers_fontbutton));
+	numbers = gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->numbers_fontbutton));
+
+	g_settings_set_boolean (job->priv->print_settings,
+				GEDIT_SETTINGS_PRINT_SYNTAX_HIGHLIGHTING, syntax);
+	g_settings_set_boolean (job->priv->print_settings, GEDIT_SETTINGS_PRINT_HEADER,
+				page_header);
+	g_settings_set_string (job->priv->print_settings, GEDIT_SETTINGS_PRINT_FONT_BODY_PANGO,
+			       body);
+	g_settings_set_string (job->priv->print_settings, GEDIT_SETTINGS_PRINT_FONT_HEADER_PANGO,
+			       header);
+	g_settings_set_string (job->priv->print_settings, GEDIT_SETTINGS_PRINT_FONT_NUMBERS_PANGO,
+			       numbers);
 
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->line_numbers_checkbutton)))
 	{
-		gedit_prefs_manager_set_print_line_numbers (
-			MAX (1, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton))));
+		g_settings_set (job->priv->print_settings,
+				GEDIT_SETTINGS_PRINT_LINE_NUMBERS,
+			"u", MAX (1, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton))));
 	}
 	else
 	{
-		gedit_prefs_manager_set_print_line_numbers (0);
+		g_settings_set (job->priv->print_settings,
+				GEDIT_SETTINGS_PRINT_LINE_NUMBERS, "u", 0);
 	}
 
 	if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton)))
 	{
-		gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_NONE);
+		gedit_settings_set_wrap_mode (job->priv->print_settings,
+					      GEDIT_SETTINGS_PRINT_WRAP_MODE,
+					      GTK_WRAP_NONE);
 	}
 	else
 	{
 		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton)))
 		{
-			gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_WORD);
+			gedit_settings_set_wrap_mode (job->priv->print_settings,
+						      GEDIT_SETTINGS_PRINT_WRAP_MODE,
+						      GTK_WRAP_WORD);
 		}
 		else
 		{
-			gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_CHAR);
-		}	
+			gedit_settings_set_wrap_mode (job->priv->print_settings,
+						      GEDIT_SETTINGS_PRINT_WRAP_MODE,
+						      GTK_WRAP_CHAR);
+		}
 	}
-
-	gedit_prefs_manager_set_print_font_body (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->body_fontbutton)));
-	gedit_prefs_manager_set_print_font_header (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->headers_fontbutton)));
-	gedit_prefs_manager_set_print_font_numbers (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->numbers_fontbutton)));
 }
 
 static void
@@ -504,21 +516,37 @@ create_compositor (GeditPrintJob *job)
 	gchar *print_font_body;
 	gchar *print_font_header;
 	gchar *print_font_numbers;
+	gboolean syntax_hl;
+	GtkWrapMode wrap_mode;
+	guint print_line_numbers;
+	gboolean print_header;
 	
 	/* Create and initialize print compositor */
-	print_font_body = gedit_prefs_manager_get_print_font_body ();
-	print_font_header = gedit_prefs_manager_get_print_font_header ();
-	print_font_numbers = gedit_prefs_manager_get_print_font_numbers ();
+	print_font_body = g_settings_get_string (job->priv->print_settings,
+						 GEDIT_SETTINGS_PRINT_FONT_BODY_PANGO);
+	print_font_header = g_settings_get_string (job->priv->print_settings,
+						   GEDIT_SETTINGS_PRINT_FONT_HEADER_PANGO);
+	print_font_numbers = g_settings_get_string (job->priv->print_settings,
+						    GEDIT_SETTINGS_PRINT_FONT_NUMBERS_PANGO);
+	syntax_hl = g_settings_get_boolean (job->priv->print_settings,
+					    GEDIT_SETTINGS_PRINT_SYNTAX_HIGHLIGHTING);
+	g_settings_get (job->priv->print_settings, GEDIT_SETTINGS_PRINT_LINE_NUMBERS,
+			"u", &print_line_numbers);
+	print_header = g_settings_get_boolean (job->priv->print_settings,
+					       GEDIT_SETTINGS_PRINT_HEADER);
+	
+	wrap_mode = gedit_settings_get_wrap_mode (job->priv->print_settings,
+						  GEDIT_SETTINGS_WRAP_MODE);
 	
 	job->priv->compositor = GTK_SOURCE_PRINT_COMPOSITOR (
 					g_object_new (GTK_TYPE_SOURCE_PRINT_COMPOSITOR,
 						     "buffer", GTK_SOURCE_BUFFER (job->priv->doc),
 						     "tab-width", gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (job->priv->view)),
 						     "highlight-syntax", gtk_source_buffer_get_highlight_syntax (GTK_SOURCE_BUFFER (job->priv->doc)) &&
-					   				 gedit_prefs_manager_get_print_syntax_hl (),
-						     "wrap-mode", gedit_prefs_manager_get_print_wrap_mode (),
-						     "print-line-numbers", gedit_prefs_manager_get_print_line_numbers (),
-						     "print-header", gedit_prefs_manager_get_print_header (),
+									 syntax_hl,
+						     "wrap-mode", wrap_mode,
+						     "print-line-numbers", print_line_numbers,
+						     "print-header", print_header,
 						     "print-footer", FALSE,
 						     "body-font-name", print_font_body,
 						     "line-numbers-font-name", print_font_numbers,
@@ -529,7 +557,7 @@ create_compositor (GeditPrintJob *job)
 	g_free (print_font_header);
 	g_free (print_font_numbers);
 	
-	if (gedit_prefs_manager_get_print_header ())
+	if (print_header)
 	{
 		gchar *doc_name;
 		gchar *name_to_display;
@@ -552,7 +580,7 @@ create_compositor (GeditPrintJob *job)
 		g_free (doc_name);
 		g_free (name_to_display);
 		g_free (left);
-	}		
+	}
 }
 
 static void
@@ -804,6 +832,8 @@ gedit_print_job_init (GeditPrintJob *job)
 {
 	job->priv = GEDIT_PRINT_JOB_GET_PRIVATE (job);
 	
+	job->priv->print_settings = g_settings_new ("org.gnome.gedit.preferences.print");
+	
 	job->priv->status = GEDIT_PRINT_JOB_STATUS_INIT;
 	
 	job->priv->status_string = g_strdup (_("Preparing..."));
diff --git a/gedit/gedit-session.c b/gedit/gedit-session.c
index 2e1653d..96b8b72 100644
--- a/gedit/gedit-session.c
+++ b/gedit/gedit-session.c
@@ -46,7 +46,6 @@
 
 #include "gedit-debug.h"
 #include "gedit-plugins-engine.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-metadata-manager.h"
 #include "gedit-window.h"
 #include "gedit-app.h"
diff --git a/gedit/gedit-settings.c b/gedit/gedit-settings.c
new file mode 100644
index 0000000..d7493ce
--- /dev/null
+++ b/gedit/gedit-settings.c
@@ -0,0 +1,1019 @@
+/*
+ * gedit-settings.c
+ * This file is part of gedit
+ *
+ * Copyright (C) 2002-2005 - Paolo Maggi
+ *               2009 - Ignacio Casal Quinteiro
+ *
+ * gedit is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * gedit 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gedit; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#include <string.h>
+
+#include "gedit-settings.h"
+#include "gedit-app.h"
+#include "gedit-debug.h"
+#include "gedit-view.h"
+#include "gedit-window.h"
+#include "gedit-plugins-engine.h"
+#include "gedit-style-scheme-manager.h"
+#include "gedit-dirs.h"
+#include "gedit-utils.h"
+#include "gedit-window-private.h"
+
+#define GEDIT_SETTINGS_LOCKDOWN_COMMAND_LINE "disable-command-line"
+#define GEDIT_SETTINGS_LOCKDOWN_PRINTING "disable-printing"
+#define GEDIT_SETTINGS_LOCKDOWN_PRINT_SETUP "disable-print-setup"
+#define GEDIT_SETTINGS_LOCKDOWN_SAVE_TO_DISK "disable-save-to-disk"
+
+#define GEDIT_SETTINGS_SYSTEM_FONT "monospace-font-name"
+
+#define GEDIT_SETTINGS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_SETTINGS, GeditSettingsPrivate))
+
+struct _GeditSettingsPrivate
+{
+	GSettings *lockdown;
+	GSettings *interface;
+	GSettings *editor;
+	GSettings *ui;
+	GSettings *plugins;
+	
+	gchar *old_scheme;
+};
+
+G_DEFINE_TYPE (GeditSettings, gedit_settings, G_TYPE_SETTINGS)
+
+static void
+gedit_settings_finalize (GObject *object)
+{
+	GeditSettings *gs = GEDIT_SETTINGS (object);
+
+	g_free (gs->priv->old_scheme);
+
+	G_OBJECT_CLASS (gedit_settings_parent_class)->finalize (object);
+}
+
+static void
+gedit_settings_dispose (GObject *object)
+{
+	GeditSettings *gs = GEDIT_SETTINGS (object);
+	
+	if (gs->priv->lockdown != NULL)
+	{
+		g_object_unref (gs->priv->lockdown);
+		gs->priv->lockdown = NULL;
+	}
+	
+	if (gs->priv->interface != NULL)
+	{
+		g_object_unref (gs->priv->interface);
+		gs->priv->interface = NULL;
+	}
+	
+	if (gs->priv->editor != NULL)
+	{
+		g_object_unref (gs->priv->editor);
+		gs->priv->editor = NULL;
+	}
+	
+	if (gs->priv->ui != NULL)
+	{
+		g_object_unref (gs->priv->ui);
+		gs->priv->ui = NULL;
+	}
+	
+	if (gs->priv->plugins != NULL)
+	{
+		g_object_unref (gs->priv->plugins);
+		gs->priv->plugins = NULL;
+	}
+
+	G_OBJECT_CLASS (gedit_settings_parent_class)->dispose (object);
+}
+
+static void
+on_lockdown_changed (GSettings   *settings,
+		     const gchar *key,
+		     gpointer     useless)
+{
+	gboolean locked;
+	GeditApp *app;
+	
+	locked = g_settings_get_boolean (settings, key);
+	app = gedit_app_get_default ();
+	
+	if (strcmp (key, GEDIT_SETTINGS_LOCKDOWN_COMMAND_LINE) == 0)
+		_gedit_app_set_lockdown_bit (app, 
+					     GEDIT_LOCKDOWN_COMMAND_LINE,
+					     locked);
+	else if (strcmp (key, GEDIT_SETTINGS_LOCKDOWN_PRINTING) == 0)
+		_gedit_app_set_lockdown_bit (app, 
+					     GEDIT_LOCKDOWN_PRINTING,
+					     locked);
+	else if (strcmp (key, GEDIT_SETTINGS_LOCKDOWN_PRINT_SETUP) == 0)
+		_gedit_app_set_lockdown_bit (app, 
+					     GEDIT_LOCKDOWN_PRINT_SETUP,
+					     locked);
+	else if (strcmp (key, GEDIT_SETTINGS_LOCKDOWN_SAVE_TO_DISK) == 0)
+		_gedit_app_set_lockdown_bit (app, 
+					     GEDIT_LOCKDOWN_SAVE_TO_DISK,
+					     locked);
+}
+
+static void
+set_font (GeditSettings *gs,
+	  const gchar *font)
+{
+	GList *views, *l;
+	guint ts;
+	
+	g_settings_get (gs->priv->editor, GEDIT_SETTINGS_TABS_SIZE, "u", &ts);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		/* Note: we use def=FALSE to avoid GeditView to query gconf */
+		gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
+
+		gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data), ts);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_system_font_changed (GSettings     *settings,
+			const gchar   *key,
+			GeditSettings *gs)
+{
+	
+	gboolean use_default_font;
+	gchar *font;
+	
+	use_default_font = g_settings_get_boolean (gs->priv->editor,
+						   GEDIT_SETTINGS_USE_DEFAULT_FONT);
+	if (!use_default_font)
+		return;
+	
+	font = g_settings_get_string (settings, key);
+	
+	set_font (gs, font);
+	
+	g_free (font);
+}
+
+static void
+on_use_default_font_changed (GSettings     *settings,
+			     const gchar   *key,
+			     GeditSettings *gs)
+{
+	gboolean def;
+	gchar *font;
+
+	def = g_settings_get_boolean (settings, key);
+	
+	if (def)
+	{
+		font = g_settings_get_string (gs->priv->interface,
+					      GEDIT_SETTINGS_SYSTEM_FONT);
+	}
+	else
+	{
+		font = g_settings_get_string (gs->priv->editor,
+					      GEDIT_SETTINGS_EDITOR_FONT);
+	}
+	
+	set_font (gs, font);
+	
+	g_free (font);
+}
+
+static void
+on_editor_font_changed (GSettings     *settings,
+			const gchar   *key,
+			GeditSettings *gs)
+{
+	gboolean use_default_font;
+	gchar *font;
+	
+	use_default_font = g_settings_get_boolean (gs->priv->editor,
+						   GEDIT_SETTINGS_USE_DEFAULT_FONT);
+	if (use_default_font)
+		return;
+	
+	font = g_settings_get_string (settings, key);
+	
+	set_font (gs, font);
+	
+	g_free (font);
+}
+
+static void
+on_scheme_changed (GSettings     *settings,
+		   const gchar   *key,
+		   GeditSettings *gs)
+{
+	GtkSourceStyleScheme *style;
+	gchar *scheme;
+	GList *docs;
+	GList *l;
+
+	scheme = g_settings_get_string (settings, key);
+
+	if (gs->priv->old_scheme != NULL && (strcmp (scheme, gs->priv->old_scheme) == 0))
+		return;
+
+	g_free (gs->priv->old_scheme);
+	gs->priv->old_scheme = scheme;
+
+	style = gtk_source_style_scheme_manager_get_scheme (
+			gedit_get_style_scheme_manager (),
+			scheme);
+
+	if (style == NULL)
+	{
+		g_warning ("Default style scheme '%s' not found, falling back to 'classic'", scheme);
+		
+		style = gtk_source_style_scheme_manager_get_scheme (
+			gedit_get_style_scheme_manager (),
+			"classic");
+
+		if (style == NULL) 
+		{
+			g_warning ("Style scheme 'classic' cannot be found, check your GtkSourceView installation.");
+			return;
+		}
+	}
+
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		g_return_if_fail (GTK_IS_SOURCE_BUFFER (l->data));
+
+		gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (l->data),
+						    style);
+	}
+
+	g_list_free (docs);
+}
+
+static void
+on_auto_save_changed (GSettings     *settings,
+		      const gchar   *key,
+		      GeditSettings *gs)
+{
+	GList *docs, *l;
+	gboolean auto_save;
+	
+	auto_save = g_settings_get_boolean (settings, key);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		GeditTab *tab = gedit_tab_get_from_document (GEDIT_DOCUMENT (l->data));
+		
+		gedit_tab_set_auto_save_enabled (tab, auto_save);
+	}
+	
+	g_list_free (docs);
+}
+
+static void
+on_auto_save_interval_changed (GSettings     *settings,
+			       const gchar   *key,
+			       GeditSettings *gs)
+{
+	GList *docs, *l;
+	gint auto_save_interval;
+	
+	g_settings_get (settings, key, "u", &auto_save_interval);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		GeditTab *tab = gedit_tab_get_from_document (GEDIT_DOCUMENT (l->data));
+		
+		gedit_tab_set_auto_save_interval (tab, auto_save_interval);
+	}
+	
+	g_list_free (docs);
+}
+
+static void
+on_undo_actions_limit_changed (GSettings     *settings,
+			       const gchar   *key,
+			       GeditSettings *gs)
+{
+	GList *docs, *l;
+	gint ul;
+	
+	g_settings_get (settings, key, "u", &ul);
+	
+	ul = CLAMP (ul, -1, 250);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_buffer_set_max_undo_levels (GTK_SOURCE_BUFFER (l->data),
+						       ul);
+	}
+	
+	g_list_free (docs);
+}
+
+static void
+on_wrap_mode_changed (GSettings     *settings,
+		      const gchar   *key,
+		      GeditSettings *gs)
+{
+	GtkWrapMode wrap_mode;
+	GList *views, *l;
+
+	wrap_mode = gedit_settings_get_wrap_mode (settings, key);
+
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (l->data),
+					     wrap_mode);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_tabs_size_changed (GSettings     *settings,
+		      const gchar   *key,
+		      GeditSettings *gs)
+{
+	GList *views, *l;
+	guint ts;
+	
+	g_settings_get (settings, key, "u", &ts);
+	
+	ts = CLAMP (ts, 1, 24);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data),
+					       ts);
+	}
+	
+	g_list_free (views);
+}
+
+/* FIXME: insert_spaces and line_numbers are mostly the same it just changes
+ the func called, maybe typedef the func and refactorize? */
+static void
+on_insert_spaces_changed (GSettings     *settings,
+			  const gchar   *key,
+			  GeditSettings *gs)
+{
+	GList *views, *l;
+	gboolean spaces;
+	
+	spaces = g_settings_get_boolean (settings, key);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_insert_spaces_instead_of_tabs (
+					GTK_SOURCE_VIEW (l->data),
+					spaces);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_auto_indent_changed (GSettings     *settings,
+			const gchar   *key,
+			GeditSettings *gs)
+{
+	GList *views, *l;
+	gboolean enable;
+	
+	enable = g_settings_get_boolean (settings, key);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW (l->data),
+						 enable);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_display_line_numbers_changed (GSettings     *settings,
+				 const gchar   *key,
+				 GeditSettings *gs)
+{
+	GList *views, *l;
+	gboolean line_numbers;
+	
+	line_numbers = g_settings_get_boolean (settings, key);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW (l->data),
+						       line_numbers);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_hl_current_line_changed (GSettings     *settings,
+			    const gchar   *key,
+			    GeditSettings *gs)
+{
+	GList *views, *l;
+	gboolean hl;
+	
+	hl = g_settings_get_boolean (settings, key);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW (l->data),
+							    hl);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_bracket_matching_changed (GSettings     *settings,
+			     const gchar   *key,
+			     GeditSettings *gs)
+{
+	GList *docs, *l;
+	gboolean enable;
+	
+	enable = g_settings_get_boolean (settings, key);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (l->data),
+								   enable);
+	}
+	
+	g_list_free (docs);
+}
+
+static void
+on_display_right_margin_changed (GSettings     *settings,
+				 const gchar   *key,
+				 GeditSettings *gs)
+{
+	GList *views, *l;
+	gboolean display;
+	
+	display = g_settings_get_boolean (settings, key);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_show_right_margin (GTK_SOURCE_VIEW (l->data),
+						       display);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_right_margin_position_changed (GSettings     *settings,
+				  const gchar   *key,
+				  GeditSettings *gs)
+{
+	GList *views, *l;
+	gint pos;
+	
+	g_settings_get (settings, key, "u", &pos);
+	
+	pos = CLAMP (pos, 1, 160);
+	
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_right_margin_position (GTK_SOURCE_VIEW (l->data),
+							   pos);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_smart_home_end_changed (GSettings     *settings,
+			   const gchar   *key,
+			   GeditSettings *gs)
+{
+	GtkSourceSmartHomeEndType smart_he;
+	GList *views, *l;
+
+	smart_he = gedit_settings_get_smart_home_end (gs);
+
+	views = gedit_app_get_views (gedit_app_get_default ());
+	
+	for (l = views; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_view_set_smart_home_end (GTK_SOURCE_VIEW (l->data),
+						    smart_he);
+	}
+	
+	g_list_free (views);
+}
+
+static void
+on_syntax_highlighting_changed (GSettings     *settings,
+				const gchar   *key,
+				GeditSettings *gs)
+{
+	const GList *windows;
+	GList *docs, *l;
+	gboolean enable;
+	
+	enable = g_settings_get_boolean (settings, key);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (l->data),
+							enable);
+	}
+	
+	g_list_free (docs);
+
+	/* update the sensitivity of the Higlight Mode menu item */
+	windows = gedit_app_get_windows (gedit_app_get_default ());
+	while (windows != NULL)
+	{
+		GtkUIManager *ui;
+		GtkAction *a;
+
+		ui = gedit_window_get_ui_manager (GEDIT_WINDOW (windows->data));
+
+		a = gtk_ui_manager_get_action (ui,
+					       "/MenuBar/ViewMenu/ViewHighlightModeMenu");
+
+		gtk_action_set_sensitive (a, enable);
+
+		windows = g_list_next (windows);
+	}
+}
+
+static void
+on_search_highlighting_changed (GSettings     *settings,
+				const gchar   *key,
+				GeditSettings *gs)
+{
+	GList *docs, *l;
+	gboolean enable;
+	
+	enable = g_settings_get_boolean (settings, key);
+	
+	docs = gedit_app_get_documents (gedit_app_get_default ());
+	
+	for (l = docs; l != NULL; l = g_list_next (l))
+	{
+		gedit_document_set_enable_search_highlighting  (GEDIT_DOCUMENT (l->data),
+								enable);
+	}
+	
+	g_list_free (docs);
+}
+
+static void
+on_max_recents_changed (GSettings     *settings,
+			const gchar   *key,
+			GeditSettings *gs)
+{
+	const GList *windows;
+	gint max;
+	
+	g_settings_get (settings, key, "u", &max);
+	
+	windows = gedit_app_get_windows (gedit_app_get_default ());
+	while (windows != NULL)
+	{
+		GeditWindow *w = GEDIT_WINDOW (windows->data);
+
+		gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (w->priv->toolbar_recent_menu),
+					      max);
+
+		windows = g_list_next (windows);
+	}
+	
+	/* FIXME: we have no way at the moment to trigger the
+	 * update of the inline recents in the File menu */
+}
+
+static void
+on_active_plugins_changed (GSettings     *settings,
+			   const gchar   *key,
+			   GeditSettings *gs)
+{
+	GeditPluginsEngine *engine;
+
+	engine = gedit_plugins_engine_get_default ();
+
+	gedit_plugins_engine_active_plugins_changed (engine);
+}
+
+static void
+gedit_settings_init (GeditSettings *gs)
+{
+	gs->priv = GEDIT_SETTINGS_GET_PRIVATE (gs);
+	
+	gs->priv->old_scheme = NULL;
+}
+
+static void
+initialize (GeditSettings *gs)
+{
+	GSettings *prefs;
+	
+	prefs = g_settings_get_child (G_SETTINGS (gs), "preferences");
+	gs->priv->editor = g_settings_get_child (prefs, "editor");
+	gs->priv->ui = g_settings_get_child (prefs, "ui");
+	g_object_unref (prefs);
+	gs->priv->plugins = g_settings_get_child (G_SETTINGS (gs), "plugins");
+	
+	/* Load settings */
+	gs->priv->lockdown = g_settings_new ("org.gnome.Desktop.Lockdown");
+	
+	g_signal_connect (gs->priv->lockdown,
+			  "changed",
+			  G_CALLBACK (on_lockdown_changed),
+			  NULL);
+
+	gs->priv->interface = g_settings_new ("org.gnome.Desktop.Interface");
+	
+	g_signal_connect (gs->priv->interface,
+			  "changed",
+			  G_CALLBACK (on_system_font_changed),
+			  gs);
+
+	/* editor changes */
+	g_signal_connect (gs->priv->editor,
+			  "changed::use-default-font",
+			  G_CALLBACK (on_use_default_font_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::editor-font",
+			  G_CALLBACK (on_editor_font_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::scheme",
+			  G_CALLBACK (on_scheme_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::auto-save",
+			  G_CALLBACK (on_auto_save_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::auto-save-interval",
+			  G_CALLBACK (on_auto_save_interval_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::undo-actions-limit",
+			  G_CALLBACK (on_undo_actions_limit_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::wrap-mode",
+			  G_CALLBACK (on_wrap_mode_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::tabs-size",
+			  G_CALLBACK (on_tabs_size_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::insert-spaces",
+			  G_CALLBACK (on_insert_spaces_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::auto-indent",
+			  G_CALLBACK (on_auto_indent_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::display-line-numbers",
+			  G_CALLBACK (on_display_line_numbers_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::highlight-current-line",
+			  G_CALLBACK (on_hl_current_line_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::bracket-matching",
+			  G_CALLBACK (on_bracket_matching_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::display-right-margin",
+			  G_CALLBACK (on_display_right_margin_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::right-margin-position",
+			  G_CALLBACK (on_right_margin_position_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::smart-home-end",
+			  G_CALLBACK (on_smart_home_end_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::syntax-highlighting",
+			  G_CALLBACK (on_syntax_highlighting_changed),
+			  gs);
+	g_signal_connect (gs->priv->editor,
+			  "changed::search-highlighting",
+			  G_CALLBACK (on_search_highlighting_changed),
+			  gs);
+
+	/* ui changes */
+	g_signal_connect (gs->priv->ui,
+			  "changed::max-recents",
+			  G_CALLBACK (on_max_recents_changed),
+			  gs);
+
+	/* plugins changes */
+	g_signal_connect (gs->priv->plugins,
+			  "changed::active-plugins",
+			  G_CALLBACK (on_active_plugins_changed),
+			  gs);
+}
+
+static void
+gedit_settings_class_init (GeditSettingsClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = gedit_settings_finalize;
+	object_class->dispose = gedit_settings_dispose;
+
+	g_type_class_add_private (object_class, sizeof (GeditSettingsPrivate));
+}
+
+GSettings *
+gedit_settings_new ()
+{
+	GeditSettings *settings;
+
+	settings = g_object_new (GEDIT_TYPE_SETTINGS,
+				 "schema", "org.gnome.gedit",
+				 NULL);
+
+	initialize (settings);
+
+	return G_SETTINGS (settings);
+}
+
+GeditLockdownMask
+gedit_settings_get_lockdown (GeditSettings *gs)
+{
+	guint lockdown = 0;
+	gboolean command_line, printing, print_setup, save_to_disk;
+	
+	command_line = g_settings_get_boolean (gs->priv->lockdown,
+					       GEDIT_SETTINGS_LOCKDOWN_COMMAND_LINE);
+	printing = g_settings_get_boolean (gs->priv->lockdown,
+					   GEDIT_SETTINGS_LOCKDOWN_PRINTING);
+	print_setup = g_settings_get_boolean (gs->priv->lockdown,
+					      GEDIT_SETTINGS_LOCKDOWN_PRINT_SETUP);
+	save_to_disk = g_settings_get_boolean (gs->priv->lockdown,
+					       GEDIT_SETTINGS_LOCKDOWN_SAVE_TO_DISK);
+
+	if (command_line)
+		lockdown |= GEDIT_LOCKDOWN_COMMAND_LINE;
+
+	if (printing)
+		lockdown |= GEDIT_LOCKDOWN_PRINTING;
+
+	if (print_setup)
+		lockdown |= GEDIT_LOCKDOWN_PRINT_SETUP;
+
+	if (save_to_disk)
+		lockdown |= GEDIT_LOCKDOWN_SAVE_TO_DISK;
+
+	return lockdown;
+}
+
+gchar *
+gedit_settings_get_system_font (GeditSettings *gs)
+{
+	gchar *system_font;
+
+	g_return_val_if_fail (GEDIT_IS_SETTINGS (gs), NULL);
+	
+	system_font = g_settings_get_string (gs->priv->interface,
+					     "monospace-font-name");
+	
+	return system_font;
+}
+
+GSList *
+gedit_settings_get_list (GSettings   *settings,
+			 const gchar *key)
+{
+	GSList *list = NULL;
+	gchar **values;
+	gsize len, i;
+
+	g_return_val_if_fail (G_IS_SETTINGS (settings), NULL);
+	g_return_val_if_fail (key != NULL, NULL);
+
+	values = g_settings_get_strv (settings, key, &len);
+	i = 0;
+
+	while (i < len)
+	{
+		list = g_slist_prepend (list, values[i]);
+		i++;
+	}
+
+	g_free (values);
+
+	return g_slist_reverse (list);
+}
+
+void
+gedit_settings_set_list (GSettings    *settings,
+			 const gchar  *key,
+			 const GSList *list)
+{
+	gchar **values;
+	const GSList *l;
+	gint i, len;
+
+	g_return_if_fail (G_IS_SETTINGS (settings));
+	g_return_if_fail (key != NULL);
+	g_return_if_fail (list != NULL);
+
+	len = g_slist_length ((GSList *)list);
+	values = g_new (gchar *, len);
+
+	for (l = list, i = 0; l != NULL; l = g_slist_next (l), i++)
+	{
+		values[i] = l->data;
+	}
+
+	g_settings_set_strv (settings, key, (const gchar * const *)values, len);
+	g_free (values);
+}
+
+GeditToolbarSetting
+gedit_settings_get_toolbar_style (GeditSettings *gs)
+{
+	GeditToolbarSetting res;
+	gchar *str;
+
+	g_return_val_if_fail (GEDIT_IS_SETTINGS (gs), 0);
+
+	str = g_settings_get_string (gs->priv->ui,
+				     "toolbar-buttons-style");
+
+	g_return_val_if_fail (str != NULL, 0);
+
+	if (strcmp (str, "GEDIT_TOOLBAR_ICONS") == 0)
+		res = GEDIT_TOOLBAR_ICONS;
+	else
+	{
+		if (strcmp (str, "GEDIT_TOOLBAR_ICONS_AND_TEXT") == 0)
+			res = GEDIT_TOOLBAR_ICONS_AND_TEXT;
+		else 
+		{
+			if (strcmp (str, "GEDIT_TOOLBAR_ICONS_BOTH_HORIZ") == 0)
+				res = GEDIT_TOOLBAR_ICONS_BOTH_HORIZ;
+			else
+				res = GEDIT_TOOLBAR_SYSTEM;
+		}
+	}
+
+	g_free (str);
+
+	return res;
+}
+
+GtkSourceSmartHomeEndType
+gedit_settings_get_smart_home_end (GeditSettings *gs)
+{
+	GtkSourceSmartHomeEndType res;
+	gchar *str;
+	
+	g_return_val_if_fail (GEDIT_IS_SETTINGS (gs), GTK_SOURCE_SMART_HOME_END_AFTER);
+	
+	str = g_settings_get_string (gs->priv->editor, "smart-home-end");
+
+	g_return_val_if_fail (str != NULL, GTK_SOURCE_SMART_HOME_END_AFTER);
+
+	if (strcmp (str, "DISABLED") == 0)
+		res = GTK_SOURCE_SMART_HOME_END_DISABLED;
+	else if (strcmp (str, "BEFORE") == 0)
+		res = GTK_SOURCE_SMART_HOME_END_BEFORE;
+	else if (strcmp (str, "ALWAYS") == 0)
+		res = GTK_SOURCE_SMART_HOME_END_ALWAYS;
+	else
+		res = GTK_SOURCE_SMART_HOME_END_AFTER;
+
+	g_free (str);
+
+	return res;
+}
+
+static gchar *
+get_wrap_str (guint mode)
+{
+	gchar *str;
+
+	switch (mode)
+	{
+		case GTK_WRAP_NONE:
+			str = g_strdup ("GTK_WRAP_NONE");
+			break;
+
+		case GTK_WRAP_CHAR:
+			str = g_strdup ("GTK_WRAP_CHAR");
+			break;
+
+		default: /* GTK_WRAP_WORD */
+			str = g_strdup ("GTK_WRAP_WORD");
+	}
+	
+	return str;
+}
+
+GtkWrapMode
+gedit_settings_get_wrap_mode (GSettings   *settings,
+			      const gchar *key)
+{
+	GtkWrapMode res;
+	gchar *str;
+
+	g_return_val_if_fail (G_IS_SETTINGS (settings), GTK_WRAP_WORD);
+	g_return_val_if_fail (key != NULL, GTK_WRAP_WORD);
+
+	str = g_settings_get_string (settings, key);
+
+	g_return_val_if_fail (str != NULL, GTK_WRAP_WORD);
+
+	if (strcmp (str, "GTK_WRAP_NONE") == 0)
+		res = GTK_WRAP_NONE;
+	else
+	{
+		if (strcmp (str, "GTK_WRAP_CHAR") == 0)
+			res = GTK_WRAP_CHAR;
+		else
+			res = GTK_WRAP_WORD;
+	}
+
+	g_free (str);
+
+	return res;
+}
+
+void
+gedit_settings_set_wrap_mode (GSettings   *settings,
+			      const gchar *key,
+			      GtkWrapMode  mode)
+{
+	gchar *str;
+
+	g_return_if_fail (G_IS_SETTINGS (settings));
+	g_return_if_fail (key != NULL);
+
+	str = get_wrap_str (mode);
+
+	g_settings_set_string (settings, key, str);
+}
+
+/* ex:ts=8:noet: */
diff --git a/gedit/gedit-settings.h b/gedit/gedit-settings.h
new file mode 100644
index 0000000..e8fe912
--- /dev/null
+++ b/gedit/gedit-settings.h
@@ -0,0 +1,141 @@
+/*
+ * gedit-settings.h
+ * This file is part of gedit
+ *
+ * Copyright (C) 2009 - Ignacio Casal Quinteiro
+ *               2002 - Paolo Maggi
+ *
+ * gedit is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * gedit 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gedit; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+
+#ifndef __GEDIT_SETTINGS_H__
+#define __GEDIT_SETTINGS_H__
+
+#include <glib-object.h>
+#include <glib.h>
+#include "gedit-app.h"
+
+G_BEGIN_DECLS
+
+#define GEDIT_TYPE_SETTINGS		(gedit_settings_get_type ())
+#define GEDIT_SETTINGS(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_SETTINGS, GeditSettings))
+#define GEDIT_SETTINGS_CONST(obj)	(G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_SETTINGS, GeditSettings const))
+#define GEDIT_SETTINGS_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_SETTINGS, GeditSettingsClass))
+#define GEDIT_IS_SETTINGS(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_SETTINGS))
+#define GEDIT_IS_SETTINGS_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_SETTINGS))
+#define GEDIT_SETTINGS_GET_CLASS(obj)	(G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_SETTINGS, GeditSettingsClass))
+
+typedef struct _GeditSettings		GeditSettings;
+typedef struct _GeditSettingsClass	GeditSettingsClass;
+typedef struct _GeditSettingsPrivate	GeditSettingsPrivate;
+
+struct _GeditSettings
+{
+	GSettings parent;
+
+	GeditSettingsPrivate *priv;
+};
+
+struct _GeditSettingsClass
+{
+	GSettingsClass parent_class;
+};
+
+typedef enum {
+	GEDIT_TOOLBAR_SYSTEM = 0,
+	GEDIT_TOOLBAR_ICONS,
+	GEDIT_TOOLBAR_ICONS_AND_TEXT,
+	GEDIT_TOOLBAR_ICONS_BOTH_HORIZ
+} GeditToolbarSetting;
+
+GType			 gedit_settings_get_type			(void) G_GNUC_CONST;
+
+GSettings		*gedit_settings_new				(void);
+
+GeditLockdownMask	 gedit_settings_get_lockdown			(GeditSettings *gs);
+
+gchar			*gedit_settings_get_system_font			(GeditSettings *gs);
+
+GtkSourceSmartHomeEndType gedit_settings_get_smart_home_end		(GeditSettings *gs);
+
+GeditToolbarSetting	 gedit_settings_get_toolbar_style		(GeditSettings *gs);
+
+/* Utility functions */
+GSList			*gedit_settings_get_list			(GSettings   *settings,
+									 const gchar *key);
+
+void			 gedit_settings_set_list			(GSettings    *settings,
+									 const gchar  *key,
+									 const GSList *list);
+
+GtkWrapMode		 gedit_settings_get_wrap_mode			(GSettings    *settings,
+									 const gchar  *key);
+
+void			 gedit_settings_set_wrap_mode			(GSettings    *settings,
+									 const gchar  *key,
+									 GtkWrapMode   mode);
+
+/* key constants */
+#define GEDIT_SETTINGS_USE_DEFAULT_FONT			"use-default-font"
+#define GEDIT_SETTINGS_EDITOR_FONT			"editor-font"
+#define GEDIT_SETTINGS_SCHEME				"scheme"
+#define GEDIT_SETTINGS_CREATE_BACKUP_COPY		"create-backup-copy"
+#define GEDIT_SETTINGS_AUTO_SAVE			"auto-save"
+#define GEDIT_SETTINGS_AUTO_SAVE_INTERVAL		"auto-save-interval"
+#define GEDIT_SETTINGS_UNDO_ACTIONS_LIMIT		"undo-actions-limit"
+#define GEDIT_SETTINGS_MAX_UNDO_ACTIONS			"max-undo-actions"
+#define GEDIT_SETTINGS_WRAP_MODE			"wrap-mode"
+#define GEDIT_SETTINGS_TABS_SIZE			"tabs-size"
+#define GEDIT_SETTINGS_INSERT_SPACES			"insert-spaces"
+#define GEDIT_SETTINGS_AUTO_INDENT			"auto-indent"
+#define GEDIT_SETTINGS_DISPLAY_LINE_NUMBERS		"display-line-numbers"
+#define GEDIT_SETTINGS_HIGHLIGHT_CURRENT_LINE		"highlight-current-line"
+#define GEDIT_SETTINGS_BRACKET_MATCHING			"bracket-matching"
+#define GEDIT_SETTINGS_DISPLAY_RIGHT_MARGIN		"display-right-margin"
+#define GEDIT_SETTINGS_RIGHT_MARGIN_POSITION		"right-margin-position"
+#define GEDIT_SETTINGS_WRITABLE_VFS_SCHEMES		"writable-vfs-schemes"
+#define GEDIT_SETTINGS_RESTORE_CURSOR_POSITION		"restore-cursor-position"
+#define GEDIT_SETTINGS_SYNTAX_HIGHLIGHTING		"syntax-highlighting"
+#define GEDIT_SETTINGS_SEARCH_HIGHLIGHTING		"search-highlighting"
+#define GEDIT_SETTINGS_TOOLBAR_VISIBLE			"toolbar-visible"
+#define GEDIT_SETTINGS_STATUSBAR_VISIBLE		"statusbar-visible"
+#define GEDIT_SETTINGS_SIDE_PANE_VISIBLE		"side-pane-visible"
+#define GEDIT_SETTINGS_BOTTOM_PANE_VISIBLE		"bottom-pane-visible"
+#define GEDIT_SETTINGS_MAX_RECENTS			"max-recents"
+#define GEDIT_SETTINGS_PRINT_SYNTAX_HIGHLIGHTING	"print-syntax-highlighting"
+#define GEDIT_SETTINGS_PRINT_HEADER			"print-header"
+#define GEDIT_SETTINGS_PRINT_WRAP_MODE			"print-wrap-mode"
+#define GEDIT_SETTINGS_PRINT_LINE_NUMBERS		"print-line-numbers"
+#define GEDIT_SETTINGS_PRINT_FONT_BODY_PANGO		"print-font-body-pango"
+#define GEDIT_SETTINGS_PRINT_FONT_HEADER_PANGO		"print-font-header-pango"
+#define GEDIT_SETTINGS_PRINT_FONT_NUMBERS_PANGO		"print-font-numbers-pango"
+#define GEDIT_SETTINGS_ENCODING_AUTO_DETECTED		"auto-detected"
+#define GEDIT_SETTINGS_ENCODING_SHOWN_IN_MENU		"shown-in-menu"
+#define GEDIT_SETTINGS_ACTIVE_PLUGINS			"active-plugins"
+
+/* window state keys */
+#define GEDIT_SETTINGS_WINDOW_STATE			"state"
+#define GEDIT_SETTINGS_WINDOW_SIZE			"size"
+#define GEDIT_SETTINGS_SIDE_PANEL_SIZE			"side-panel-size"
+#define GEDIT_SETTINGS_SIDE_PANEL_ACTIVE_PAGE		"side-panel-active-page"
+#define GEDIT_SETTINGS_BOTTOM_PANEL_SIZE		"bottom-panel-size"
+#define GEDIT_SETTINGS_BOTTOM_PANEL_ACTIVE_PAGE		"bottom-panel-active-page"
+#define GEDIT_SETTINGS_ACTIVE_FILE_FILTER		"filter-id"
+
+G_END_DECLS
+
+#endif /* __GEDIT_SETTINGS_H__ */
diff --git a/gedit/gedit-style-scheme-manager.c b/gedit/gedit-style-scheme-manager.c
index d850aa0..8c66965 100644
--- a/gedit/gedit-style-scheme-manager.c
+++ b/gedit/gedit-style-scheme-manager.c
@@ -35,7 +35,6 @@
 #include <glib/gstdio.h>
 
 #include "gedit-style-scheme-manager.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-dirs.h"
 
 static GtkSourceStyleSchemeManager *style_scheme_manager = NULL;
diff --git a/gedit/gedit-tab.c b/gedit/gedit-tab.c
index 5fa908c..07f0ca4 100644
--- a/gedit/gedit-tab.c
+++ b/gedit/gedit-tab.c
@@ -42,8 +42,8 @@
 #include "gedit-print-preview.h"
 #include "gedit-progress-message-area.h"
 #include "gedit-debug.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-enum-types.h"
+#include "gedit-settings.h"
 
 #if !GTK_CHECK_VERSION (2, 17, 1)
 #include "gedit-message-area.h"
@@ -55,6 +55,7 @@
 
 struct _GeditTabPrivate
 {
+	GSettings	       *editor;
 	GeditTabState	        state;
 	
 	GtkWidget	       *view;
@@ -236,6 +237,12 @@ gedit_tab_dispose (GObject *object)
 		tab->priv->tmp_save_location = NULL;
 	}
 
+	if (tab->priv->editor != NULL)
+	{
+		g_object_unref (tab->priv->editor);
+		tab->priv->editor = NULL;
+	}
+
 	G_OBJECT_CLASS (gedit_tab_parent_class)->dispose (object);
 }
 
@@ -260,6 +267,7 @@ gedit_tab_class_init (GeditTabClass *klass)
 
 	object_class->dispose = gedit_tab_dispose;
 	object_class->finalize = gedit_tab_finalize;
+	object_class->dispose = gedit_tab_dispose;
 	object_class->get_property = gedit_tab_get_property;
 	object_class->set_property = gedit_tab_set_property;
 	
@@ -377,6 +385,10 @@ set_view_properties_according_to_state (GeditTab      *tab,
 					GeditTabState  state)
 {
 	gboolean val;
+	gboolean hl_current_line;
+	
+	hl_current_line = g_settings_get_boolean (tab->priv->editor,
+						  GEDIT_SETTINGS_HIGHLIGHT_CURRENT_LINE);
 
 	val = ((state == GEDIT_TAB_STATE_NORMAL) &&
 	       (tab->priv->print_preview == NULL) &&
@@ -389,7 +401,7 @@ set_view_properties_according_to_state (GeditTab      *tab,
 
 	val = ((state != GEDIT_TAB_STATE_LOADING) &&
 	       (state != GEDIT_TAB_STATE_CLOSING) &&
-	       (gedit_prefs_manager_get_highlight_current_line ()));
+	       (hl_current_line));
 	gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW (tab->priv->view), val);
 }
 
@@ -1512,9 +1524,13 @@ gedit_tab_init (GeditTab *tab)
 	GtkWidget *sw;
 	GeditDocument *doc;
 	GeditLockdownMask lockdown;
+	gboolean auto_save;
+	gint auto_save_interval;
 
 	tab->priv = GEDIT_TAB_GET_PRIVATE (tab);
 
+	tab->priv->editor = g_settings_new ("org.gnome.gedit.preferences.editor");
+
 	tab->priv->state = GEDIT_TAB_STATE_NORMAL;
 
 	tab->priv->not_editable = FALSE;
@@ -1532,14 +1548,20 @@ gedit_tab_init (GeditTab *tab)
 					GTK_POLICY_AUTOMATIC);
 
 	/* Manage auto save data */
+	auto_save = g_settings_get_boolean (tab->priv->editor,
+					    GEDIT_SETTINGS_AUTO_SAVE);
+	g_settings_get (tab->priv->editor, GEDIT_SETTINGS_AUTO_SAVE_INTERVAL,
+			"u", &auto_save_interval);
+	
 	lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
-	tab->priv->auto_save = gedit_prefs_manager_get_auto_save () &&
+	tab->priv->auto_save = auto_save &&
 			       !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK);
 	tab->priv->auto_save = (tab->priv->auto_save != FALSE);
 
-	tab->priv->auto_save_interval = gedit_prefs_manager_get_auto_save_interval ();
+	tab->priv->auto_save_interval = auto_save_interval;
+	/*FIXME
 	if (tab->priv->auto_save_interval <= 0)
-		tab->priv->auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
+		tab->priv->auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;*/
 
 	/* Create the view */
 	doc = gedit_document_new ();
diff --git a/gedit/gedit-utils.c b/gedit/gedit-utils.c
index 4f76e75..c6e7ef2 100644
--- a/gedit/gedit-utils.c
+++ b/gedit/gedit-utils.c
@@ -48,7 +48,6 @@
 #include "gedit-utils.h"
 
 #include "gedit-document.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-debug.h"
 
 /* For the workspace/viewport stuff */
@@ -1525,4 +1524,5 @@ gedit_utils_decode_uri (const gchar *uri,
 	
 	return TRUE;
 }
+
 /* ex:ts=8:noet: */
diff --git a/gedit/gedit-utils.h b/gedit/gedit-utils.h
index 80d24a2..cbc50cd 100644
--- a/gedit/gedit-utils.h
+++ b/gedit/gedit-utils.h
@@ -37,6 +37,7 @@
 #include <gtk/gtk.h>
 #include <atk/atk.h>
 #include <gedit/gedit-encodings.h>
+#include <gtksourceview/gtksourceview.h>
 
 G_BEGIN_DECLS
 
@@ -158,5 +159,4 @@ G_END_DECLS
 
 #endif /* __GEDIT_UTILS_H__ */
 
-
 /* ex:ts=8:noet: */
diff --git a/gedit/gedit-view.c b/gedit/gedit-view.c
index d25a07e..54f9712 100644
--- a/gedit/gedit-view.c
+++ b/gedit/gedit-view.c
@@ -43,11 +43,11 @@
 
 #include "gedit-view.h"
 #include "gedit-debug.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-marshal.h"
 #include "gedit-utils.h"
 #include "gseal-gtk-compat.h"
+#include "gedit-settings.h"
+#include "gedit-app.h"
 
 
 #define GEDIT_VIEW_SCROLL_MARGIN 0.02
@@ -70,6 +70,8 @@ enum
 
 struct _GeditViewPrivate
 {
+	GSettings   *editor_settings;
+
 	SearchMode   search_mode;
 	
 	GtkTextIter  start_search_iter;
@@ -335,21 +337,40 @@ on_notify_buffer_cb (GeditView  *view,
 static void 
 gedit_view_init (GeditView *view)
 {
+	GSettings *gs;
 	GtkTargetList *tl;
+	gboolean use_default_font;
+	gboolean display_line_numbers;
+	gboolean auto_indent;
+	gboolean insert_spaces;
+	gboolean display_right_margin;
+	gboolean hl_current_line;
+	guint tabs_size;
+	guint right_margin_position;
+	GtkWrapMode wrap_mode;
+	GtkSourceSmartHomeEndType smart_home_end;
 	
 	gedit_debug (DEBUG_VIEW);
 	
 	view->priv = GEDIT_VIEW_GET_PRIVATE (view);
 
+	gs = _gedit_app_get_settings (gedit_app_get_default ());
+	view->priv->editor_settings = g_settings_new ("org.gnome.gedit.preferences.editor");
+
+	/* Get setting values */
+	use_default_font = g_settings_get_boolean (view->priv->editor_settings,
+						   GEDIT_SETTINGS_USE_DEFAULT_FONT);
+
 	/*
 	 *  Set tab, fonts, wrap mode, colors, etc. according
 	 *  to preferences 
 	 */
-	if (!gedit_prefs_manager_get_use_default_font ())
+	if (!use_default_font)
 	{
 		gchar *editor_font;
 
-		editor_font = gedit_prefs_manager_get_editor_font ();
+		editor_font = g_settings_get_string (view->priv->editor_settings,
+						     GEDIT_SETTINGS_EDITOR_FONT);
 
 		gedit_view_set_font (view, FALSE, editor_font);
 
@@ -359,17 +380,37 @@ gedit_view_init (GeditView *view)
 	{
 		gedit_view_set_font (view, TRUE, NULL);
 	}
+ 
+	display_line_numbers = g_settings_get_boolean (view->priv->editor_settings,
+						       GEDIT_SETTINGS_DISPLAY_LINE_NUMBERS);
+	auto_indent = g_settings_get_boolean (view->priv->editor_settings,
+					      GEDIT_SETTINGS_AUTO_INDENT);
+	g_settings_get (view->priv->editor_settings, GEDIT_SETTINGS_TABS_SIZE,
+			"u", &tabs_size);
+	insert_spaces = g_settings_get_boolean (view->priv->editor_settings,
+						GEDIT_SETTINGS_INSERT_SPACES);
+	display_right_margin = g_settings_get_boolean (view->priv->editor_settings,
+						       GEDIT_SETTINGS_DISPLAY_RIGHT_MARGIN);
+	g_settings_get (view->priv->editor_settings, GEDIT_SETTINGS_RIGHT_MARGIN_POSITION,
+			"u", &right_margin_position);
+	hl_current_line = g_settings_get_boolean (view->priv->editor_settings,
+						  GEDIT_SETTINGS_HIGHLIGHT_CURRENT_LINE);
+
+	wrap_mode = gedit_settings_get_wrap_mode (view->priv->editor_settings,
+						  GEDIT_SETTINGS_WRAP_MODE);
+	
+	smart_home_end = gedit_settings_get_smart_home_end (GEDIT_SETTINGS (gs));
 
 	g_object_set (G_OBJECT (view), 
-		      "wrap_mode", gedit_prefs_manager_get_wrap_mode (),
-		      "show_line_numbers", gedit_prefs_manager_get_display_line_numbers (),
-		      "auto_indent", gedit_prefs_manager_get_auto_indent (),
-		      "tab_width", gedit_prefs_manager_get_tabs_size (),
-		      "insert_spaces_instead_of_tabs", gedit_prefs_manager_get_insert_spaces (),
-		      "show_right_margin", gedit_prefs_manager_get_display_right_margin (), 
-		      "right_margin_position", gedit_prefs_manager_get_right_margin_position (),
-		      "highlight_current_line", gedit_prefs_manager_get_highlight_current_line (),
-		      "smart_home_end", gedit_prefs_manager_get_smart_home_end (),
+		      "wrap_mode", wrap_mode,
+		      "show_line_numbers", display_line_numbers,
+		      "auto_indent", auto_indent,
+		      "tab_width", tabs_size,
+		      "insert_spaces_instead_of_tabs", insert_spaces,
+		      "show_right_margin", display_right_margin,
+		      "right_margin_position", right_margin_position,
+		      "highlight_current_line", hl_current_line,
+		      "smart_home_end", smart_home_end,
 		      "indent_on_tab", TRUE,
 		      NULL);
 
@@ -415,6 +456,12 @@ gedit_view_destroy (GtkObject *object)
 	current_buffer_removed (view);
 	g_signal_handlers_disconnect_by_func (view, on_notify_buffer_cb, NULL);
 	
+	if (view->priv->editor_settings != NULL)
+	{
+		g_object_unref (view->priv->editor_settings);
+		view->priv->editor_settings = NULL;
+	}
+	
 	(* GTK_OBJECT_CLASS (gedit_view_parent_class)->destroy) (object);
 }
 
@@ -661,9 +708,12 @@ gedit_view_set_font (GeditView   *view,
 
 	if (def)
 	{
+		GSettings *settings;
 		gchar *font;
 
-		font = gedit_prefs_manager_get_system_font ();
+		settings = _gedit_app_get_settings (gedit_app_get_default ());
+		font = gedit_settings_get_system_font (GEDIT_SETTINGS (settings));
+		
 		font_desc = pango_font_description_from_string (font);
 		g_free (font);
 	}
@@ -678,7 +728,7 @@ gedit_view_set_font (GeditView   *view,
 
 	gtk_widget_modify_font (GTK_WIDGET (view), font_desc);
 
-	pango_font_description_free (font_desc);		
+	pango_font_description_free (font_desc);
 }
 
 static void
@@ -1953,17 +2003,6 @@ gedit_view_drag_drop (GtkWidget      *widget,
 	return result;
 }
 
-static void
-show_line_numbers_toggled (GtkMenu   *menu,
-			   GeditView *view)
-{
-	gboolean show;
-
-	show = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu));
-
-	gedit_prefs_manager_set_display_line_numbers (show);
-}
-
 static GtkWidget *
 create_line_numbers_menu (GtkWidget *view)
 {
@@ -1975,8 +2014,13 @@ create_line_numbers_menu (GtkWidget *view)
 	item = gtk_check_menu_item_new_with_mnemonic (_("_Display line numbers"));
 	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
 					gtk_source_view_get_show_line_numbers (GTK_SOURCE_VIEW (view)));
-	g_signal_connect (item, "toggled",
-			  G_CALLBACK (show_line_numbers_toggled), view);
+
+	g_settings_bind (GEDIT_VIEW (view)->priv->editor_settings,
+			 "active",
+			 item,
+			 GEDIT_SETTINGS_DISPLAY_LINE_NUMBERS,
+			 G_SETTINGS_BIND_SET);
+	
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
 	
 	gtk_widget_show_all (menu);
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
index 6669cba..bbd164d 100644
--- a/gedit/gedit-window-private.h
+++ b/gedit/gedit-window-private.h
@@ -32,8 +32,8 @@
 #define __GEDIT_WINDOW_PRIVATE_H__
 
 #include "gedit/gedit-window.h"
-#include "gedit-prefs-manager.h"
 #include "gedit-message-bus.h"
+#include "gedit-settings.h"
 
 #ifdef OS_OSX
 #include <ige-mac-integration.h>
@@ -45,6 +45,10 @@ G_BEGIN_DECLS
 
 struct _GeditWindowPrivate
 {
+	GSettings      *editor_settings;
+	GSettings      *ui_settings;
+	GSettings      *window_settings;
+
 	GtkWidget      *notebook;
 
 	GtkWidget      *side_panel;
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index 1faa446..fac316c 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -49,7 +49,6 @@
 #include "gedit-commands.h"
 #include "gedit-debug.h"
 #include "gedit-language-manager.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-panel.h"
 #include "gedit-documents-panel.h"
 #include "gedit-plugins-engine.h"
@@ -57,6 +56,7 @@
 #include "gedit-dirs.h"
 #include "gedit-status-combo-box.h"
 #include "gseal-gtk-compat.h"
+#include "gedit-settings.h"
 
 #ifdef OS_OSX
 #include "osx/gedit-osx.h"
@@ -68,6 +68,9 @@
 #define LANGUAGE_DATA "GeditWindowLanguageData"
 #define FULLSCREEN_ANIMATION_SPEED 4
 
+#define GEDIT_WINDOW_DEFAULT_WIDTH       650
+#define GEDIT_WINDOW_DEFAULT_HEIGHT      500
+
 #define GEDIT_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
 					 GEDIT_TYPE_WINDOW,                    \
 					 GeditWindowPrivate))
@@ -128,32 +131,32 @@ save_panes_state (GeditWindow *window)
 
 	gedit_debug (DEBUG_WINDOW);
 
-	if (gedit_prefs_manager_window_size_can_set ())
-		gedit_prefs_manager_set_window_size (window->priv->width,
-						     window->priv->height);
+	g_settings_set (window->priv->window_settings, GEDIT_SETTINGS_WINDOW_SIZE,
+			"(ii)",	window->priv->width, window->priv->height);
 
-	if (gedit_prefs_manager_window_state_can_set ())
-		gedit_prefs_manager_set_window_state (window->priv->window_state);
+	g_settings_set_int (window->priv->window_settings, GEDIT_SETTINGS_WINDOW_STATE,
+			    window->priv->window_state);
 
-	if ((window->priv->side_panel_size > 0) &&
-	    gedit_prefs_manager_side_panel_size_can_set ())
-		gedit_prefs_manager_set_side_panel_size	(
-					window->priv->side_panel_size);
+	if (window->priv->side_panel_size > 0)
+		g_settings_set_int (window->priv->window_settings,
+				    GEDIT_SETTINGS_SIDE_PANEL_SIZE,
+				    window->priv->side_panel_size);
 
 	pane_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (window->priv->side_panel));
-	if (pane_page != 0 &&
-	    gedit_prefs_manager_side_panel_active_page_can_set ())
-		gedit_prefs_manager_set_side_panel_active_page (pane_page);
+	if (pane_page != 0)
+		g_settings_set_int (window->priv->window_settings,
+				    GEDIT_SETTINGS_SIDE_PANEL_ACTIVE_PAGE,
+				    pane_page);
 
-	if ((window->priv->bottom_panel_size > 0) && 
-	    gedit_prefs_manager_bottom_panel_size_can_set ())
-		gedit_prefs_manager_set_bottom_panel_size (
-					window->priv->bottom_panel_size);
+	if (window->priv->bottom_panel_size > 0)
+		g_settings_set_int (window->priv->window_settings,
+				    GEDIT_SETTINGS_BOTTOM_PANEL_SIZE,
+				    window->priv->bottom_panel_size);
 
 	pane_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (window->priv->bottom_panel));
-	if (pane_page != 0 &&
-	    gedit_prefs_manager_bottom_panel_active_page_can_set ())
-		gedit_prefs_manager_set_bottom_panel_active_page (pane_page);
+	if (pane_page != 0)
+		g_settings_set_int (window->priv->window_settings,
+				    GEDIT_SETTINGS_BOTTOM_PANEL_ACTIVE_PAGE, pane_page);
 }
 
 #ifdef OS_OSX
@@ -283,7 +286,26 @@ gedit_window_dispose (GObject *object)
 		g_object_unref (window->priv->window_group);
 		window->priv->window_group = NULL;
 	}
+
+	/* We must free the settings after saving the panels */
+	if (window->priv->editor_settings != NULL)
+	{
+		g_object_unref (window->priv->editor_settings);
+		window->priv->editor_settings = NULL;
+	}
 	
+	if (window->priv->ui_settings != NULL)
+	{
+		g_object_unref (window->priv->ui_settings);
+		window->priv->ui_settings = NULL;
+	}
+
+	if (window->priv->window_settings != NULL)
+	{
+		g_object_unref (window->priv->window_settings);
+		window->priv->window_settings = NULL;
+	}
+
 	/* Now that there have broken some reference loops,
 	 * force collection again.
 	 */
@@ -570,9 +592,13 @@ set_toolbar_style (GeditWindow *window,
 	gboolean visible;
 	GeditToolbarSetting style;
 	GtkAction *action;
-	
+	gboolean toolbar_visible;
+
+	toolbar_visible = g_settings_get_boolean (window->priv->ui_settings,
+						  GEDIT_SETTINGS_TOOLBAR_VISIBLE);
+
 	if (origin == NULL)
-		visible = gedit_prefs_manager_get_toolbar_visible ();
+		visible = toolbar_visible;
 	else
 		visible = gtk_widget_get_visible (origin->priv->toolbar);
 	
@@ -590,9 +616,16 @@ set_toolbar_style (GeditWindow *window,
 
 	/* Set style */
 	if (origin == NULL)
-		style = gedit_prefs_manager_get_toolbar_buttons_style ();
+	{
+		GSettings *settings;
+
+		settings = _gedit_app_get_settings (gedit_app_get_default ());
+		style = gedit_settings_get_toolbar_style (GEDIT_SETTINGS (settings));
+	}
 	else
+	{
 		style = origin->priv->toolbar_style;
+	}
 	
 	window->priv->toolbar_style = style;
 	
@@ -728,10 +761,14 @@ set_sensitivity_according_to_tab (GeditWindow *window,
 	GeditTabState  state;
 	GtkClipboard  *clipboard;
 	GeditLockdownMask lockdown;
+	gboolean       enable_syntax_highlighting;
 
 	g_return_if_fail (GEDIT_TAB (tab));
 
 	gedit_debug (DEBUG_WINDOW);
+	
+	enable_syntax_highlighting = g_settings_get_boolean (window->priv->editor_settings,
+							     GEDIT_SETTINGS_SYNTAX_HIGHLIGHTING);
 
 	lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
 
@@ -887,7 +924,7 @@ set_sensitivity_according_to_tab (GeditWindow *window,
 					      "ViewHighlightMode");
 	gtk_action_set_sensitive (action, 
 				  (state != GEDIT_TAB_STATE_CLOSING) &&
-				  gedit_prefs_manager_get_enable_syntax_highlighting ());
+				  enable_syntax_highlighting);
 
 	update_next_prev_doc_sensitivity (window, tab);
 
@@ -1286,7 +1323,8 @@ update_recent_files_menu (GeditWindow *window)
 
 	gedit_debug (DEBUG_WINDOW);
 
-	max_recents = gedit_prefs_manager_get_max_recents ();
+	g_settings_get (window->priv->ui_settings, GEDIT_SETTINGS_MAX_RECENTS,
+			"u", &max_recents);
 
 	g_return_if_fail (p->recents_action_group != NULL);
 
@@ -1424,8 +1462,8 @@ toolbar_visibility_changed (GtkWidget   *toolbar,
 
 	visible = gtk_widget_get_visible (toolbar);
 
-	if (gedit_prefs_manager_toolbar_visible_can_set ())
-		gedit_prefs_manager_set_toolbar_visible (visible);
+	g_settings_set_boolean (window->priv->ui_settings,
+				GEDIT_SETTINGS_TOOLBAR_VISIBLE, visible);
 
 	action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
 					      "ViewToolbar");
@@ -1443,8 +1481,12 @@ setup_toolbar_open_button (GeditWindow *window,
 	GtkWidget *toolbar_recent_menu;
 	GtkToolItem *open_button;
 	GtkAction *action;
+	gint max_recents;
 
 	recent_manager = gtk_recent_manager_get_default ();
+	
+	g_settings_get (window->priv->ui_settings, GEDIT_SETTINGS_MAX_RECENTS,
+			"u", &max_recents);
 
 	/* recent files menu tool button */
 	toolbar_recent_menu = gtk_recent_chooser_menu_new_for_manager (recent_manager);
@@ -1454,7 +1496,7 @@ setup_toolbar_open_button (GeditWindow *window,
 	gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (toolbar_recent_menu),
 					  GTK_RECENT_SORT_MRU);
 	gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (toolbar_recent_menu),
-				      gedit_prefs_manager_get_max_recents ());
+				      max_recents);
 
 	filter = gtk_recent_filter_new ();
 	gtk_recent_filter_add_group (filter, "gedit");
@@ -1832,11 +1874,11 @@ set_statusbar_style (GeditWindow *window,
 		     GeditWindow *origin)
 {
 	GtkAction *action;
-	
 	gboolean visible;
 
 	if (origin == NULL)
-		visible = gedit_prefs_manager_get_statusbar_visible ();
+		visible = g_settings_get_boolean (window->priv->ui_settings,
+						  GEDIT_SETTINGS_STATUSBAR_VISIBLE);
 	else
 		visible = gtk_widget_get_visible (origin->priv->statusbar);
 
@@ -1863,8 +1905,8 @@ statusbar_visibility_changed (GtkWidget   *statusbar,
 
 	visible = gtk_widget_get_visible (statusbar);
 
-	if (gedit_prefs_manager_statusbar_visible_can_set ())
-		gedit_prefs_manager_set_statusbar_visible (visible);
+	g_settings_set_boolean (window->priv->ui_settings,
+				GEDIT_SETTINGS_STATUSBAR_VISIBLE, visible);
 
 	action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
 					      "ViewStatusbar");
@@ -2103,7 +2145,7 @@ clone_window (GeditWindow *origin)
 	{
 		gint w, h;
 
-		gedit_prefs_manager_get_default_window_size (&w, &h);
+		_gedit_window_get_default_size (&w, &h);
 		gtk_window_set_default_size (GTK_WINDOW (window), w, h);
 		gtk_window_maximize (GTK_WINDOW (window));
 	}
@@ -2646,7 +2688,8 @@ _gedit_window_set_lockdown (GeditWindow       *window,
 	gboolean autosave;
 
 	/* start/stop autosave in each existing tab */
-	autosave = gedit_prefs_manager_get_auto_save ();
+	autosave = g_settings_get_boolean (window->priv->editor_settings,
+					   GEDIT_SETTINGS_AUTO_SAVE);
 	gtk_container_foreach (GTK_CONTAINER (window->priv->notebook),
 			       update_tab_autosave,
 			       &autosave);
@@ -3643,8 +3686,9 @@ side_panel_visibility_changed (GtkWidget   *side_panel,
 
 	visible = gtk_widget_get_visible (side_panel);
 
-	if (gedit_prefs_manager_side_pane_visible_can_set ())
-		gedit_prefs_manager_set_side_pane_visible (visible);
+	g_settings_set_boolean (window->priv->ui_settings,
+				GEDIT_SETTINGS_SIDE_PANE_VISIBLE,
+				visible);
 
 	action = gtk_action_group_get_action (window->priv->panes_action_group,
 	                                      "ViewSidePane");
@@ -3698,8 +3742,9 @@ bottom_panel_visibility_changed (GeditPanel  *bottom_panel,
 
 	visible = gtk_widget_get_visible (GTK_WIDGET (bottom_panel));
 
-	if (gedit_prefs_manager_bottom_panel_visible_can_set ())
-		gedit_prefs_manager_set_bottom_panel_visible (visible);
+	g_settings_set_boolean (window->priv->ui_settings,
+				GEDIT_SETTINGS_BOTTOM_PANE_VISIBLE,
+				visible);
 
 	action = gtk_action_group_get_action (window->priv->panes_action_group,
 					      "ViewBottomPane");
@@ -3778,15 +3823,23 @@ static void
 init_panels_visibility (GeditWindow *window)
 {
 	gint active_page;
+	gboolean side_pane_visible;
+	gboolean bottom_pane_visible;
 
 	gedit_debug (DEBUG_WINDOW);
 
 	/* side pane */
-	active_page = gedit_prefs_manager_get_side_panel_active_page ();
+	active_page = g_settings_get_int (window->priv->window_settings,
+					  GEDIT_SETTINGS_SIDE_PANEL_ACTIVE_PAGE);
 	_gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->side_panel),
 					    active_page);
 
-	if (gedit_prefs_manager_get_side_pane_visible ())
+	side_pane_visible = g_settings_get_boolean (window->priv->ui_settings,
+						    GEDIT_SETTINGS_SIDE_PANE_VISIBLE);
+	bottom_pane_visible = g_settings_get_boolean (window->priv->ui_settings,
+						      GEDIT_SETTINGS_BOTTOM_PANE_VISIBLE);
+
+	if (side_pane_visible)
 	{
 		gtk_widget_show (window->priv->side_panel);
 	}
@@ -3794,11 +3847,12 @@ init_panels_visibility (GeditWindow *window)
 	/* bottom pane, it can be empty */
 	if (gedit_panel_get_n_items (GEDIT_PANEL (window->priv->bottom_panel)) > 0)
 	{
-		active_page = gedit_prefs_manager_get_bottom_panel_active_page ();
+		active_page = g_settings_get_int (window->priv->window_settings,
+						  GEDIT_SETTINGS_BOTTOM_PANEL_ACTIVE_PAGE);
 		_gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->bottom_panel),
 						    active_page);
 
-		if (gedit_prefs_manager_get_bottom_panel_visible ())
+		if (bottom_pane_visible)
 		{
 			gtk_widget_show (window->priv->bottom_panel);
 		}
@@ -3969,6 +4023,9 @@ gedit_window_init (GeditWindow *window)
 	window->priv->dispose_has_run = FALSE;
 	window->priv->fullscreen_controls = NULL;
 	window->priv->fullscreen_animation_timeout_id = 0;
+	window->priv->editor_settings = g_settings_new ("org.gnome.gedit.preferences.editor");
+	window->priv->ui_settings = g_settings_new ("org.gnome.gedit.preferences.ui");
+	window->priv->window_settings = g_settings_new ("org.gnome.gedit.state.window");
 
 	window->priv->message_bus = gedit_message_bus_new ();
 
@@ -4010,8 +4067,10 @@ gedit_window_init (GeditWindow *window)
 
 	/* panes' state must be restored after panels have been mapped,
 	 * since the bottom pane position depends on the size of the vpaned. */
-	window->priv->side_panel_size = gedit_prefs_manager_get_side_panel_size ();
-	window->priv->bottom_panel_size = gedit_prefs_manager_get_bottom_panel_size ();
+	window->priv->side_panel_size = g_settings_get_int (window->priv->window_settings,
+							    GEDIT_SETTINGS_SIDE_PANEL_SIZE);
+	window->priv->bottom_panel_size = g_settings_get_int (window->priv->window_settings,
+							      GEDIT_SETTINGS_BOTTOM_PANEL_SIZE);
 
 	g_signal_connect_after (window->priv->hpaned,
 				"map",
@@ -4791,4 +4850,14 @@ gedit_window_get_message_bus (GeditWindow *window)
 	
 	return window->priv->message_bus;
 }
+
+void
+_gedit_window_get_default_size (gint *width, gint *height)
+{
+	g_return_if_fail (width != NULL && height != NULL);
+
+	*width = GEDIT_WINDOW_DEFAULT_WIDTH;
+	*height = GEDIT_WINDOW_DEFAULT_HEIGHT;
+}
+
 /* ex:ts=8:noet: */
diff --git a/gedit/gedit-window.h b/gedit/gedit-window.h
index c1fc4d5..4e8c55a 100644
--- a/gedit/gedit-window.h
+++ b/gedit/gedit-window.h
@@ -188,6 +188,9 @@ void		 _gedit_recent_add			(GeditWindow	     *window,
 void		 _gedit_recent_remove			(GeditWindow         *window,
 							 GFile               *location);
 
+void		 _gedit_window_get_default_size		(gint                *width,
+							 gint                *height);
+
 G_END_DECLS
 
 #endif  /* __GEDIT_WINDOW_H__  */
diff --git a/gedit/gedit.c b/gedit/gedit.c
index 4956208..f517a2c 100644
--- a/gedit/gedit.c
+++ b/gedit/gedit.c
@@ -51,7 +51,6 @@
 #include "gedit-dirs.h"
 #include "gedit-encodings.h"
 #include "gedit-plugins-engine.h"
-#include "gedit-prefs-manager-app.h"
 #include "gedit-session.h"
 #include "gedit-utils.h"
 #include "gedit-window.h"
@@ -591,7 +590,10 @@ main (int argc, char *argv[])
 	/* Setup debugging */
 	gedit_debug_init ();
 	gedit_debug_message (DEBUG_APP, "Startup");
-	
+
+	/* FIXME: Remove when gconf not needed anymore */
+	g_setenv ("GSETTINGS_BACKEND", "gconf", FALSE);
+
 	setlocale (LC_ALL, "");
 
 	dir = gedit_dirs_get_gedit_locale_dir ();
@@ -709,10 +711,6 @@ main (int argc, char *argv[])
 	gtk_window_set_default_icon_name ("accessories-text-editor");
 #endif
 
-	/* Load user preferences */
-	gedit_debug_message (DEBUG_APP, "Init prefs manager");
-	gedit_prefs_manager_app_init ();
-
 	/* Init plugins engine */
 	gedit_debug_message (DEBUG_APP, "Init plugins");
 	engine = gedit_plugins_engine_get_default ();
@@ -782,7 +780,6 @@ main (int argc, char *argv[])
 	 * finalize it properly. 
 	 */
 	g_object_unref (engine);
-	gedit_prefs_manager_app_shutdown ();
 
 #ifndef ENABLE_GVFS_METADATA
 	gedit_metadata_manager_shutdown ();
diff --git a/plugins/checkupdate/Makefile.am b/plugins/checkupdate/Makefile.am
index 66885a3..72aff58 100644
--- a/plugins/checkupdate/Makefile.am
+++ b/plugins/checkupdate/Makefile.am
@@ -24,26 +24,10 @@ plugin_in_files = checkupdate.gedit-plugin.desktop.in
 
 plugin_DATA = $(plugin_in_files:.gedit-plugin.desktop.in=.gedit-plugin)
 
-schemasdir	 = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = gedit-check-update.schemas.in
-schemas_DATA 	 = $(schemas_in_files:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-	        if test -z "$(DESTDIR)" ; then \
-	                for p in $(schemas_DATA) ; do \
-	                        GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/plugins/checkupdate/$$p ; \
-	                done \
-	        fi
-else
-install-data-local:
-endif
-
-EXTRA_DIST = $(plugin_in_files) $(schemas_in_files)
-
-CLEANFILES = $(plugin_DATA) $(schemas_DATA)
-
-DISTCLEANFILES = $(plugin_DATA) $(schemas_DATA)
+EXTRA_DIST = $(plugin_in_files)
+
+CLEANFILES = $(plugin_DATA)
+
+DISTCLEANFILES = $(plugin_DATA)
 
 -include $(top_srcdir)/git.mk
diff --git a/plugins/filebrowser/Makefile.am b/plugins/filebrowser/Makefile.am
index ac986df..6de5d69 100644
--- a/plugins/filebrowser/Makefile.am
+++ b/plugins/filebrowser/Makefile.am
@@ -65,27 +65,9 @@ gedit-file-browser-marshal.c: gedit-file-browser-marshal.list $(GLIB_GENMARSHAL)
 
 plugin_DATA = $(plugin_in_files:.gedit-plugin.desktop.in=.gedit-plugin)
 
-schemasdir	 = $(GCONF_SCHEMA_FILE_DIR)
-schemas_in_files = gedit-file-browser.schemas.in
-schemas_DATA 	 = $(schemas_in_files:.schemas.in=.schemas)
- INTLTOOL_SCHEMAS_RULE@
-
-if GCONF_SCHEMAS_INSTALL
-install-data-local:
-	        if test -z "$(DESTDIR)" ; then \
-	                for p in $(schemas_DATA) ; do \
-	                        GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/plugins/filebrowser/$$p ; \
-	                done \
-	        fi
-else
-install-data-local:
-endif
-
-
 EXTRA_DIST = \
 	$(ui_DATA)					\
 	$(plugin_in_files)				\
-	$(schemas_in_files)				\
 	gedit-file-browser-enum-types.h.template	\
 	gedit-file-browser-enum-types.c.template	\
 	gedit-file-browser-enum-register.c.template	\
@@ -93,12 +75,10 @@ EXTRA_DIST = \
 
 CLEANFILES = \
 	$(plugin_DATA)		\
-	$(schemas_DATA)		\
 	$(BUILT_SOURCES)
 
 DISTCLEANFILES = \
 	$(plugin_DATA)		\
-	$(schemas_DATA)		\
 	$(BUILT_SOURCES)
 
 -include $(top_srcdir)/git.mk
diff --git a/po/POTFILES.in b/po/POTFILES.in
index fa8e69f..368a5e5 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,7 +2,6 @@
 # Please keep this file sorted alphabetically.
 [encoding: UTF-8]
 data/gedit.desktop.in.in
-data/gedit.schemas.in.in
 gedit/dialogs/gedit-close-confirmation-dialog.c
 gedit/dialogs/gedit-encodings-dialog.c
 [type: gettext/glade]gedit/dialogs/gedit-encodings-dialog.ui
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 3e6ea29..6f4bb45 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,5 +1,4 @@
 data/gedit.desktop.in
-data/gedit.schemas.in
 gedit/gedit-document-output-stream.c
 gedit/dialogs/gedit-style-scheme-dialog.c
 gedit/dialogs/gedit-style-scheme-dialog.ui



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