[evolution] Remove EMailShellSettings.



commit 2e87aa81fc94f5d9564421e036adae7b48e7380a
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Mar 10 09:53:12 2013 -0400

    Remove EMailShellSettings.
    
    EShellSettings predates GSettings and is no longer necessary.
    
    GSettings allows binding GObject properties to GSettings keys,
    with optional mapping functions.  That fulfills the purpose of
    EShellSettings.

 composer/e-composer-private.c                      |   44 ++-
 composer/e-msg-composer.c                          |   39 ++-
 em-format/e-mail-formatter.c                       |   12 +-
 mail/e-http-request.c                              |    7 +-
 mail/e-mail-browser.c                              |    1 -
 mail/e-mail-paned-view.c                           |   47 ++-
 mail/e-mail-reader-utils.c                         |   27 +-
 mail/e-mail-reader.c                               |   22 +-
 mail/em-composer-utils.c                           |   13 +-
 mail/em-utils.c                                    |    8 +-
 mail/mail-config.ui                                |   68 +---
 mail/message-list.c                                |    1 -
 modules/mail/Makefile.am                           |    2 -
 modules/mail/e-mail-attachment-handler.c           |   18 +-
 modules/mail/e-mail-shell-backend.c                |   86 ++---
 modules/mail/e-mail-shell-settings.c               |  386 -------------------
 modules/mail/e-mail-shell-settings.h               |   33 --
 modules/mail/e-mail-shell-sidebar.c                |   24 +-
 modules/mail/e-mail-shell-view-actions.c           |   24 +-
 modules/mail/em-composer-prefs.c                   |  264 ++++++--------
 modules/mail/em-mailer-prefs.c                     |  407 +++++++++++---------
 modules/mail/em-mailer-prefs.h                     |    5 -
 modules/mailto-handler/evolution-mailto-handler.c  |   39 +--
 modules/settings/e-settings-mail-formatter.c       |   77 +++--
 modules/settings/e-settings-mail-reader.c          |   23 +-
 modules/settings/e-settings-web-view-gtkhtml.c     |  146 ++++----
 modules/settings/e-settings-web-view.c             |   30 +-
 .../e-mail-formatter-text-highlight.c              |   61 +--
 shell/e-shell-window-actions.c                     |   24 +-
 29 files changed, 734 insertions(+), 1204 deletions(-)
---
diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c
index 09b9bf1..0475996 100644
--- a/composer/e-composer-private.c
+++ b/composer/e-composer-private.c
@@ -140,7 +140,6 @@ e_composer_private_constructed (EMsgComposer *composer)
        EMsgComposerPrivate *priv = composer->priv;
        EFocusTracker *focus_tracker;
        EShell *shell;
-       EShellSettings *shell_settings;
        EWebViewGtkHTML *web_view;
        ESourceRegistry *registry;
        GtkhtmlEditor *editor;
@@ -150,6 +149,7 @@ e_composer_private_constructed (EMsgComposer *composer)
        GtkWidget *widget;
        GtkWidget *send_widget;
        GtkWindow *window;
+       GSettings *settings;
        const gchar *path;
        gboolean small_screen_mode;
        gchar *filename, *gallery_path;
@@ -159,9 +159,10 @@ e_composer_private_constructed (EMsgComposer *composer)
        editor = GTKHTML_EDITOR (composer);
        ui_manager = gtkhtml_editor_get_ui_manager (editor);
 
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
        shell = e_msg_composer_get_shell (composer);
        registry = e_shell_get_registry (shell);
-       shell_settings = e_shell_get_shell_settings (shell);
        web_view = e_msg_composer_get_web_view (composer);
        small_screen_mode = e_shell_get_small_screen_mode (shell);
 
@@ -385,8 +386,9 @@ e_composer_private_constructed (EMsgComposer *composer)
 
        container = priv->gallery_scrolled_window;
 
-       gallery_path = e_shell_settings_get_string (
-               shell_settings, "composer-gallery-path");
+       /* FIXME This should be an EMsgComposer property. */
+       gallery_path = g_settings_get_string (
+               settings, "composer-gallery-path");
        widget = e_picture_gallery_new (gallery_path);
        gtk_container_add (GTK_CONTAINER (container), widget);
        priv->gallery_icon_view = g_object_ref (widget);
@@ -457,6 +459,8 @@ e_composer_private_constructed (EMsgComposer *composer)
        g_signal_connect (
                web_view, "url-requested",
                G_CALLBACK (msg_composer_url_requested_cb), composer);
+
+       g_object_unref (settings);
 }
 
 void
@@ -912,31 +916,31 @@ e_composer_selection_is_image_uris (EMsgComposer *composer,
 static gboolean
 add_signature_delimiter (EMsgComposer *composer)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
-
-       /* FIXME This preference should be an EMsgComposer property. */
+       GSettings *settings;
+       gboolean signature_delim;
 
-       shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
+       /* FIXME This should be an EMsgComposer property. */
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       signature_delim = !g_settings_get_boolean (
+               settings, "composer-no-signature-delim");
+       g_object_unref (settings);
 
-       return !e_shell_settings_get_boolean (
-               shell_settings, "composer-no-signature-delim");
+       return signature_delim;
 }
 
 static gboolean
 use_top_signature (EMsgComposer *composer)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
-
-       /* FIXME This preference should be an EMsgComposer property. */
+       GSettings *settings;
+       gboolean top_signature;
 
-       shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
+       /* FIXME This should be an EMsgComposer property. */
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       top_signature = g_settings_get_boolean (
+               settings, "composer-top-signature");
+       g_object_unref (settings);
 
-       return e_shell_settings_get_boolean (
-               shell_settings, "composer-top-signature");
+       return top_signature;
 }
 
 static void
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 8d0252c..7ce38e8 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1456,11 +1456,11 @@ composer_build_message_finish (EMsgComposer *composer,
 static gboolean
 use_top_signature (EMsgComposer *composer)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
-       EMsgComposerPrivate *priv = E_MSG_COMPOSER_GET_PRIVATE (composer);
+       EMsgComposerPrivate *priv;
+       GSettings *settings;
+       gboolean top_signature;
 
-       g_return_val_if_fail (priv != NULL, FALSE);
+       priv = E_MSG_COMPOSER_GET_PRIVATE (composer);
 
        /* The composer had been created from a stored message, thus the
         * signature placement is either there already, or pt it at the
@@ -1469,11 +1469,13 @@ use_top_signature (EMsgComposer *composer)
        if (priv->is_from_message)
                return FALSE;
 
-       shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
+       /* FIXME This should be an EMsgComposer property. */
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       top_signature = g_settings_get_boolean (
+               settings, "composer-top-signature");
+       g_object_unref (settings);
 
-       return e_shell_settings_get_boolean (
-               shell_settings, "composer-top-signature");
+       return top_signature;
 }
 
 #define NO_SIGNATURE_TEXT      \
@@ -1928,7 +1930,6 @@ static void
 msg_composer_constructed (GObject *object)
 {
        EShell *shell;
-       EShellSettings *shell_settings;
        GtkhtmlEditor *editor;
        EMsgComposer *composer;
        EAttachmentView *view;
@@ -1937,6 +1938,7 @@ msg_composer_constructed (GObject *object)
        EWebViewGtkHTML *web_view;
        GtkUIManager *ui_manager;
        GtkToggleAction *action;
+       GSettings *settings;
        const gchar *id;
        gboolean active;
 
@@ -1944,7 +1946,6 @@ msg_composer_constructed (GObject *object)
        composer = E_MSG_COMPOSER (object);
 
        shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        if (e_shell_get_express_mode (shell)) {
                GtkWindow *parent = e_shell_get_active_window (shell);
@@ -1988,10 +1989,12 @@ msg_composer_constructed (GObject *object)
 
        /* Honor User Preferences */
 
+       /* FIXME This should be an EMsgComposer property. */
+       settings = g_settings_new ("org.gnome.evolution.mail");
        action = GTK_TOGGLE_ACTION (ACTION (REQUEST_READ_RECEIPT));
-       active = e_shell_settings_get_boolean (
-               shell_settings, "composer-request-receipt");
+       active = g_settings_get_boolean (settings, "composer-request-receipt");
        gtk_toggle_action_set_active (action, active);
+       g_object_unref (settings);
 
        /* Clipboard Support */
 
@@ -3413,17 +3416,21 @@ CamelSession *
 e_msg_composer_get_session (EMsgComposer *composer)
 {
        EShell *shell;
-       EShellSettings *shell_settings;
-       CamelSession *session;
+       EShellBackend *shell_backend;
+       CamelSession *session = NULL;
 
        g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL);
 
        shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
+       shell_backend = e_shell_get_backend_by_name (shell, "mail");
 
-       session = e_shell_settings_get_pointer (shell_settings, "mail-session");
+       g_object_get (shell_backend, "session", &session, NULL);
        g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
 
+       /* FIXME Drop the new reference for backward-compatibility.
+        *       Rename this function to e_msg_composer_ref_session(). */
+       g_object_unref (session);
+
        return session;
 }
 
diff --git a/em-format/e-mail-formatter.c b/em-format/e-mail-formatter.c
index 2e89f69..ad62320 100644
--- a/em-format/e-mail-formatter.c
+++ b/em-format/e-mail-formatter.c
@@ -27,6 +27,8 @@
 #include <gdk/gdk.h>
 #include <glib/gi18n.h>
 
+#include "libemail-engine/e-mail-enumtypes.h"
+
 #define d(x)
 
 /* internal formatter extensions */
@@ -165,7 +167,7 @@ e_mail_formatter_set_property (GObject *object,
                case PROP_IMAGE_LOADING_POLICY:
                        e_mail_formatter_set_image_loading_policy (
                                E_MAIL_FORMATTER (object),
-                               g_value_get_int (value));
+                               g_value_get_enum (value));
                        return;
 
                case PROP_MARK_CITATIONS:
@@ -263,7 +265,7 @@ e_mail_formatter_get_property (GObject *object,
                        return;
 
                case PROP_IMAGE_LOADING_POLICY:
-                       g_value_set_int (
+                       g_value_set_enum (
                                value,
                                e_mail_formatter_get_image_loading_policy (
                                E_MAIL_FORMATTER (object)));
@@ -620,16 +622,14 @@ e_mail_formatter_class_init (EMailFormatterClass *class)
                        GDK_TYPE_COLOR,
                        G_PARAM_READWRITE));
 
-       /* FIXME Make this a proper enum property. */
        g_object_class_install_property (
                object_class,
                PROP_IMAGE_LOADING_POLICY,
-               g_param_spec_int (
+               g_param_spec_enum (
                        "image-loading-policy",
                        "Image Loading Policy",
                        NULL,
-                       E_MAIL_IMAGE_LOADING_POLICY_NEVER,
-                       E_MAIL_IMAGE_LOADING_POLICY_ALWAYS,
+                       E_TYPE_MAIL_IMAGE_LOADING_POLICY,
                        E_MAIL_IMAGE_LOADING_POLICY_NEVER,
                        G_PARAM_READWRITE));
 
diff --git a/mail/e-http-request.c b/mail/e-http-request.c
index 0d6ccc2..14bfdda 100644
--- a/mail/e-http-request.c
+++ b/mail/e-http-request.c
@@ -157,7 +157,7 @@ handle_http_request (GSimpleAsyncResult *res,
        EMailImageLoadingPolicy image_policy;
        gchar *uri_md5;
        EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        const gchar *user_cache_dir;
        CamelDataCache *cache;
        CamelStream *cache_stream;
@@ -274,8 +274,9 @@ handle_http_request (GSimpleAsyncResult *res,
                goto cleanup;
        }
 
-       shell_settings = e_shell_get_shell_settings (shell);
-       image_policy =  e_shell_settings_get_int (shell_settings, "mail-image-loading-policy");
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       image_policy = g_settings_get_enum (settings, "image-loading-policy");
+       g_object_unref (settings);
 
        /* Item not found in cache, but image loading policy allows us to fetch
         * it from the interwebs */
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index bdebf26..36489fb 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -30,7 +30,6 @@
 
 #include "shell/e-shell.h"
 #include "shell/e-shell-utils.h"
-#include "shell/e-shell-settings.h"
 
 #include "mail/e-mail-reader.h"
 #include "mail/e-mail-reader-utils.h"
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index bf79070..ea654aa 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -496,14 +496,14 @@ mail_paned_view_set_folder (EMailReader *reader,
        EShell *shell;
        EShellView *shell_view;
        EShellWindow *shell_window;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        EMailReaderInterface *default_interface;
        GtkWidget *message_list;
        GKeyFile *key_file;
        gchar *folder_uri;
        gchar *group_name;
        const gchar *key;
-       gboolean value, global_view_settings;
+       gboolean value, global_view_setting;
        GError *error = NULL;
 
        priv = E_MAIL_PANED_VIEW_GET_PRIVATE (reader);
@@ -513,8 +513,12 @@ mail_paned_view_set_folder (EMailReader *reader,
        shell_window = e_shell_view_get_shell_window (shell_view);
 
        shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
-       global_view_settings = e_shell_settings_get_boolean (shell_settings, "mail-global-view-setting");
+
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       /* FIXME This should be an EMailReader property. */
+       global_view_setting = g_settings_get_boolean (
+               settings, "global-view-setting");
 
        message_list = e_mail_reader_get_message_list (reader);
 
@@ -547,11 +551,11 @@ mail_paned_view_set_folder (EMailReader *reader,
        g_free (folder_uri);
 
        key = STATE_KEY_GROUP_BY_THREADS;
-       value = g_key_file_get_boolean (key_file, global_view_settings ? STATE_GROUP_GLOBAL_FOLDER : 
group_name, key, &error);
+       value = g_key_file_get_boolean (key_file, global_view_setting ? STATE_GROUP_GLOBAL_FOLDER : 
group_name, key, &error);
        if (error != NULL) {
                g_clear_error (&error);
 
-               value = !global_view_settings ||
+               value = !global_view_setting ||
                        g_key_file_get_boolean (key_file, STATE_GROUP_GLOBAL_FOLDER, key, &error);
                if (error != NULL) {
                        g_clear_error (&error);
@@ -562,11 +566,11 @@ mail_paned_view_set_folder (EMailReader *reader,
        e_mail_reader_set_group_by_threads (reader, value);
 
        key = STATE_KEY_PREVIEW_VISIBLE;
-       value = g_key_file_get_boolean (key_file, global_view_settings ? STATE_GROUP_GLOBAL_FOLDER : 
group_name, key, &error);
+       value = g_key_file_get_boolean (key_file, global_view_setting ? STATE_GROUP_GLOBAL_FOLDER : 
group_name, key, &error);
        if (error != NULL) {
                g_clear_error (&error);
 
-               value = !global_view_settings ||
+               value = !global_view_setting ||
                        g_key_file_get_boolean (key_file, STATE_GROUP_GLOBAL_FOLDER, key, &error);
                if (error != NULL) {
                        g_clear_error (&error);
@@ -576,11 +580,10 @@ mail_paned_view_set_folder (EMailReader *reader,
 
        /* XXX This is a little confusing and needs rethought.  The
         *     EShellWindow:safe-mode property blocks automatic message
-        *     selection, but the "mail-safe-list" shell setting blocks
-        *     both the preview pane and automatic message selection. */
-       if (e_shell_settings_get_boolean (shell_settings, "mail-safe-list")) {
-               e_shell_settings_set_boolean (
-                       shell_settings, "mail-safe-list", FALSE);
+        *     selection, but the "safe-list" setting blocks both the
+        *     preview pane and automatic message selection. */
+       if (g_settings_get_boolean (settings, "safe-list")) {
+               g_settings_set_boolean (settings, "safe-list", FALSE);
                e_shell_window_set_safe_mode (shell_window, TRUE);
                value = FALSE;
        }
@@ -591,6 +594,8 @@ mail_paned_view_set_folder (EMailReader *reader,
 
 exit:
        message_list_thaw (MESSAGE_LIST (message_list));
+
+       g_object_unref (settings);
 }
 
 static guint
@@ -806,15 +811,16 @@ mail_paned_view_update_view_instance (EMailView *view)
        EShellView *shell_view;
        EShellWindow *shell_window;
        EShellViewClass *shell_view_class;
-       EShellSettings *shell_settings;
        ESourceRegistry *registry;
        GalViewCollection *view_collection;
        GalViewInstance *view_instance;
        CamelFolder *folder;
        GtkOrientable *orientable;
        GtkOrientation orientation;
+       GSettings *settings;
        gboolean outgoing_folder;
        gboolean show_vertical_view;
+       gboolean global_view_setting;
        gchar *view_id;
 
        priv = E_MAIL_PANED_VIEW_GET_PRIVATE (view);
@@ -826,7 +832,6 @@ mail_paned_view_update_view_instance (EMailView *view)
        shell_window = e_shell_view_get_shell_window (shell_view);
        shell = e_shell_window_get_shell (shell_window);
        registry = e_shell_get_registry (shell);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        reader = E_MAIL_READER (view);
        folder = e_mail_reader_get_folder (reader);
@@ -848,7 +853,12 @@ mail_paned_view_update_view_instance (EMailView *view)
                em_utils_folder_is_outbox (registry, folder) ||
                em_utils_folder_is_sent (registry, folder);
 
-       if (e_shell_settings_get_boolean (shell_settings, "mail-global-view-setting"))
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       global_view_setting = g_settings_get_boolean (
+               settings, "global-view-setting");
+       g_object_unref (settings);
+
+       if (global_view_setting)
                view_instance = e_shell_view_new_view_instance (
                        shell_view, outgoing_folder ?
                        "global_view_sent_setting" : "global_view_setting");
@@ -860,9 +870,8 @@ mail_paned_view_update_view_instance (EMailView *view)
        orientable = GTK_ORIENTABLE (view);
        orientation = gtk_orientable_get_orientation (orientable);
        show_vertical_view =
-               (orientation == GTK_ORIENTATION_HORIZONTAL) &&
-               !e_shell_settings_get_boolean (
-               shell_settings, "mail-global-view-setting");
+               !global_view_setting &&
+               (orientation == GTK_ORIENTATION_HORIZONTAL);
 
        if (show_vertical_view) {
                gchar *filename;
diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c
index dcb3383..7436920 100644
--- a/mail/e-mail-reader-utils.c
+++ b/mail/e-mail-reader-utils.c
@@ -115,42 +115,36 @@ mail_reader_is_special_local_folder (const gchar *name)
 gboolean
 e_mail_reader_confirm_delete (EMailReader *reader)
 {
-       EShell *shell;
-       EMailBackend *backend;
-       EShellBackend *shell_backend;
-       EShellSettings *shell_settings;
        CamelFolder *folder;
        CamelStore *parent_store;
        GtkWidget *check_button;
        GtkWidget *container;
        GtkWidget *dialog;
        GtkWindow *window;
+       GSettings *settings;
        const gchar *label;
        gboolean prompt_delete_in_vfolder;
-       gint response;
+       gint response = GTK_RESPONSE_OK;
 
        /* Remind users what deleting from a search folder does. */
 
        g_return_val_if_fail (E_IS_MAIL_READER (reader), FALSE);
 
-       backend = e_mail_reader_get_backend (reader);
        folder = e_mail_reader_get_folder (reader);
        window = e_mail_reader_get_window (reader);
 
-       shell_backend = E_SHELL_BACKEND (backend);
-       shell = e_shell_backend_get_shell (shell_backend);
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
-       prompt_delete_in_vfolder = e_shell_settings_get_boolean (
-               shell_settings, "mail-prompt-delete-in-vfolder");
+       prompt_delete_in_vfolder = g_settings_get_boolean (
+               settings, "prompt-on-delete-in-vfolder");
 
        parent_store = camel_folder_get_parent_store (folder);
 
        if (!CAMEL_IS_VEE_STORE (parent_store))
-               return TRUE;
+               goto exit;
 
        if (!prompt_delete_in_vfolder)
-               return TRUE;
+               goto exit;
 
        dialog = e_alert_dialog_new_for_args (
                window, "mail:ask-delete-vfolder-msg",
@@ -166,14 +160,15 @@ e_mail_reader_confirm_delete (EMailReader *reader)
        response = gtk_dialog_run (GTK_DIALOG (dialog));
 
        if (response != GTK_RESPONSE_DELETE_EVENT)
-               e_shell_settings_set_boolean (
-                       shell_settings,
-                       "mail-prompt-delete-in-vfolder",
+               g_settings_set_boolean (
+                       settings,
+                       "prompt-on-delete-in-vfolder",
                        !gtk_toggle_button_get_active (
                        GTK_TOGGLE_BUTTON (check_button)));
 
        gtk_widget_destroy (dialog);
 
+exit:
        return (response == GTK_RESPONSE_OK);
 }
 
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index 64b8d78..69bb388 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -2732,32 +2732,28 @@ mail_reader_message_seen_cb (EMailReaderClosure *closure)
 static gboolean
 schedule_timeout_mark_seen (EMailReader *reader)
 {
-       EShell *shell;
-       EMailBackend *backend;
-       EShellBackend *shell_backend;
-       EShellSettings *shell_settings;
        MessageList *message_list;
+       GSettings *settings;
        gboolean schedule_timeout;
        gint timeout_interval;
        const gchar *message_uid;
-       backend = e_mail_reader_get_backend (reader);
+
        message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader));
-       shell_backend = E_SHELL_BACKEND (backend);
-       shell = e_shell_backend_get_shell (shell_backend);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        message_uid = message_list->cursor_uid;
        if (message_uid == NULL ||
            e_tree_is_dragging (E_TREE (message_list)))
                return FALSE;
 
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       /* FIXME These should be EMailReader properties. */
        schedule_timeout =
                (message_uid != NULL) &&
-               e_shell_settings_get_boolean (
-                       shell_settings, "mail-mark-seen");
-       timeout_interval =
-               e_shell_settings_get_int (
-               shell_settings, "mail-mark-seen-timeout");
+               g_settings_get_boolean (settings, "mark-seen");
+       timeout_interval = g_settings_get_int (settings, "mark-seen-timeout");
+
+       g_object_unref (settings);
 
        if (message_list->seen_id > 0) {
                g_source_remove (message_list->seen_id);
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index d52d04c..515f278 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1522,20 +1522,21 @@ static void
 emu_update_composers_security (EMsgComposer *composer,
                                guint32 validity_found)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
        GtkAction *action;
+       GSettings *settings;
        gboolean sign_by_default;
 
        g_return_if_fail (composer != NULL);
 
-       shell = e_msg_composer_get_shell (composer);
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
        sign_by_default =
                (validity_found & E_MAIL_PART_VALIDITY_SIGNED) != 0 &&
-               e_shell_settings_get_boolean (
-               shell_settings, "composer-sign-reply-if-signed");
+               /* FIXME This should be an EMsgComposer property. */
+               g_settings_get_boolean (
+                       settings, "composer-sign-reply-if-signed");
+
+       g_object_unref (settings);
 
        /* Pre-set only for encrypted messages, not for signed */
        if (sign_by_default) {
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 74a0eac..0da08fa 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -1519,7 +1519,7 @@ em_utils_is_re_in_subject (EShell *shell,
                            const gchar *subject,
                            gint *skip_len)
 {
-       EShellSettings *shell_settings;
+       GSettings *settings;
        gchar *prefixes, **prefixes_strv;
        gboolean res;
        gint ii;
@@ -1536,8 +1536,10 @@ em_utils_is_re_in_subject (EShell *shell,
        if (check_prefix (subject, "Re", skip_len))
                return TRUE;
 
-       shell_settings = e_shell_get_shell_settings (shell);
-       prefixes = e_shell_settings_get_string (shell_settings, "composer-localized-re");
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       prefixes = g_settings_get_string (settings, "composer-localized-re");
+       g_object_unref (settings);
+
        if (!prefixes || !*prefixes) {
                g_free (prefixes);
                return FALSE;
diff --git a/mail/mail-config.ui b/mail/mail-config.ui
index 162cdd4..2b32acb 100644
--- a/mail/mail-config.ui
+++ b/mail/mail-config.ui
@@ -481,16 +481,14 @@
                         <property name="xalign">0</property>
                         <property name="xscale">0</property>
                         <child>
-                          <object class="GtkComboBox" id="comboboxReplyStyle">
+                          <object class="GtkComboBoxText" id="comboboxReplyStyle">
                             <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="model">model3</property>
-                            <child>
-                              <object class="GtkCellRendererText" id="renderer3"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
+                            <items>
+                              <item translatable="yes" context="ReplyForward" id="attach">Attachment</item>
+                              <item translatable="yes" context="ReplyForward" id="outlook">Inline (Outlook 
style)</item>
+                              <item translatable="yes" context="ReplyForward" id="quoted">Quoted</item>
+                              <item translatable="yes" context="ReplyForward" id="do-not-quote">Do Not 
Quote</item>
+                            </items>
                           </object>
                         </child>
                       </object>
@@ -506,16 +504,13 @@
                         <property name="xalign">0</property>
                         <property name="xscale">0</property>
                         <child>
-                          <object class="GtkComboBox" id="comboboxForwardStyle">
+                          <object class="GtkComboBoxText" id="comboboxForwardStyle">
                             <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="model">model4</property>
-                            <child>
-                              <object class="GtkCellRendererText" id="renderer4"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
+                            <items>
+                              <item translatable="yes" context="ReplyForward" id="attached">Attachment</item>
+                              <item translatable="yes" context="ReplyForward" id="inline">Inline</item>
+                              <item translatable="yes" context="ReplyForward" id="quoted">Quoted</item>
+                            </items>
                           </object>
                         </child>
                       </object>
@@ -1065,43 +1060,6 @@
       </row>
     </data>
   </object>
-  <object class="GtkListStore" id="model3">
-    <columns>
-      <!-- column-name gchararray -->
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Attachment</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Inline (Outlook style)</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Quoted</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Do not quote</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="model4">
-    <columns>
-      <!-- column-name gchararray -->
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Attachment</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Inline</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="ReplyForward">Quoted</col>
-      </row>
-    </data>
-  </object>
   <object class="GtkNotebook" id="network_preferences_toplevel">
     <property name="visible">True</property>
     <property name="can_focus">True</property>
diff --git a/mail/message-list.c b/mail/message-list.c
index cc23f99..dcae35f 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -39,7 +39,6 @@
 #include <glib/gstdio.h>
 
 #include "shell/e-shell.h"
-#include "shell/e-shell-settings.h"
 
 #include "libemail-engine/e-mail-utils.h"
 #include "libemail-engine/mail-config.h"
diff --git a/modules/mail/Makefile.am b/modules/mail/Makefile.am
index bbf8366..a488ba2 100644
--- a/modules/mail/Makefile.am
+++ b/modules/mail/Makefile.am
@@ -23,8 +23,6 @@ module_mail_la_SOURCES = \
        e-mail-shell-backend.h                                          \
        e-mail-shell-content.c                                          \
        e-mail-shell-content.h                                          \
-       e-mail-shell-settings.c                                         \
-       e-mail-shell-settings.h                                         \
        e-mail-shell-sidebar.c                                          \
        e-mail-shell-sidebar.h                                          \
        e-mail-shell-view.c                                             \
diff --git a/modules/mail/e-mail-attachment-handler.c b/modules/mail/e-mail-attachment-handler.c
index 98680f8..d6caecf 100644
--- a/modules/mail/e-mail-attachment-handler.c
+++ b/modules/mail/e-mail-attachment-handler.c
@@ -121,19 +121,18 @@ mail_attachment_handler_forward (GtkAction *action,
                                  EAttachmentHandler *handler)
 {
        EMailAttachmentHandlerPrivate *priv;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        EMailForwardStyle style;
        CamelMimeMessage *message;
-       const gchar *property_name;
 
        priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler);
 
        message = mail_attachment_handler_get_selected_message (handler);
        g_return_if_fail (message != NULL);
 
-       property_name = "mail-forward-style";
-       shell_settings = e_shell_get_shell_settings (priv->shell);
-       style = e_shell_settings_get_int (shell_settings, property_name);
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       style = g_settings_get_enum (settings, "forward-style-name");
+       g_object_unref (settings);
 
        em_utils_forward_message (
                priv->shell, CAMEL_SESSION (priv->session),
@@ -147,19 +146,18 @@ mail_attachment_handler_reply (EAttachmentHandler *handler,
                                EMailReplyType reply_type)
 {
        EMailAttachmentHandlerPrivate *priv;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        EMailReplyStyle style;
        CamelMimeMessage *message;
-       const gchar *property_name;
 
        priv = E_MAIL_ATTACHMENT_HANDLER_GET_PRIVATE (handler);
 
        message = mail_attachment_handler_get_selected_message (handler);
        g_return_if_fail (message != NULL);
 
-       property_name = "mail-reply-style";
-       shell_settings = e_shell_get_shell_settings (priv->shell);
-       style = e_shell_settings_get_int (shell_settings, property_name);
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       style = g_settings_get_enum (settings, "reply-style-name");
+       g_object_unref (settings);
 
        em_utils_reply_to_message (
                priv->shell, message,
diff --git a/modules/mail/e-mail-shell-backend.c b/modules/mail/e-mail-shell-backend.c
index 1abcb8a..ecb295e 100644
--- a/modules/mail/e-mail-shell-backend.c
+++ b/modules/mail/e-mail-shell-backend.c
@@ -53,7 +53,6 @@
 #include <em-format/e-mail-formatter.h>
 #include <em-format/e-mail-part-utils.h>
 
-#include "e-mail-shell-settings.h"
 #include "e-mail-shell-sidebar.h"
 #include "e-mail-shell-view.h"
 #include "em-account-prefs.h"
@@ -369,7 +368,7 @@ mail_shell_backend_window_added_cb (GtkApplication *application,
 
        /* This applies to both the composer and signature editor. */
        if (GTKHTML_IS_EDITOR (window)) {
-               EShellSettings *shell_settings;
+               GSettings *settings;
                GList *spell_languages;
                gboolean active = TRUE;
 
@@ -378,12 +377,14 @@ mail_shell_backend_window_added_cb (GtkApplication *application,
                        GTKHTML_EDITOR (window), spell_languages);
                g_list_free (spell_languages);
 
-               shell_settings = e_shell_get_shell_settings (shell);
+               settings = g_settings_new ("org.gnome.evolution.mail");
 
                /* Express mode does not honor this setting. */
                if (!e_shell_get_express_mode (shell))
-                       active = e_shell_settings_get_boolean (
-                               shell_settings, "composer-format-html");
+                       active = g_settings_get_boolean (
+                               settings, "composer-send-html");
+
+               g_object_unref (settings);
 
                gtkhtml_editor_set_html_mode (GTKHTML_EDITOR (window), active);
        }
@@ -513,15 +514,14 @@ static void
 mail_shell_backend_constructed (GObject *object)
 {
        EShell *shell;
-       EShellSettings *shell_settings;
        EShellBackend *shell_backend;
        EMailSession *mail_session;
        CamelService *vstore;
        GtkWidget *preferences_window;
+       GSettings *settings;
 
        shell_backend = E_SHELL_BACKEND (object);
        shell = e_shell_backend_get_shell (shell_backend);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        /* Chain up to parent's constructed() method. */
        G_OBJECT_CLASS (e_mail_shell_backend_parent_class)->constructed (object);
@@ -543,8 +543,6 @@ mail_shell_backend_constructed (GObject *object)
                G_CALLBACK (mail_shell_backend_window_added_cb),
                shell_backend);
 
-       e_mail_shell_settings_init (shell_backend);
-
        /* Setup preference widget factories */
        preferences_window = e_shell_get_preferences_window (shell);
 
@@ -589,10 +587,14 @@ mail_shell_backend_constructed (GObject *object)
                CAMEL_SESSION (mail_session), E_MAIL_SESSION_VFOLDER_UID);
        g_return_if_fail (vstore != NULL);
 
-       g_object_bind_property (
-               shell_settings, "mail-enable-unmatched-search-folder",
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       g_settings_bind (
+               settings, "enable-unmatched",
                vstore, "unmatched-enabled",
-               G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL);
+               G_SETTINGS_BIND_DEFAULT);
+
+       g_object_unref (settings);
 
        g_object_unref (vstore);
 }
@@ -630,38 +632,31 @@ mail_shell_backend_start (EShellBackend *shell_backend)
 static gboolean
 mail_shell_backend_delete_junk_policy_decision (EMailBackend *backend)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
        GSettings *settings;
        gboolean delete_junk;
-       gint empty_date;
-       gint empty_days;
+       gint empty_date = 0;
+       gint empty_days = 0;
        gint now;
 
-       shell = e_shell_backend_get_shell (E_SHELL_BACKEND (backend));
-
        settings = g_settings_new ("org.gnome.evolution.mail");
-       shell_settings = e_shell_get_shell_settings (shell);
 
        now = time (NULL) / 60 / 60 / 24;
 
-       delete_junk = e_shell_settings_get_boolean (
-               shell_settings, "mail-empty-junk-on-exit");
-
-       /* XXX No EShellSettings properties for these keys. */
-
-       empty_date = empty_days = 0;
+       delete_junk = g_settings_get_boolean (settings, "junk-empty-on-exit");
 
        if (delete_junk) {
-               empty_days = g_settings_get_int (settings, "junk-empty-on-exit-days");
-               empty_date = g_settings_get_int (settings, "junk-empty-date");
+               empty_days = g_settings_get_int (
+                       settings, "junk-empty-on-exit-days");
+               empty_date = g_settings_get_int (
+                       settings, "junk-empty-date");
        }
 
-       delete_junk = delete_junk && ((empty_days == 0) || (empty_days > 0 && empty_date + empty_days <= 
now));
+       delete_junk = delete_junk && (
+               (empty_days == 0) ||
+               (empty_days > 0 && empty_date + empty_days <= now));
 
-       if (delete_junk) {
+       if (delete_junk)
                g_settings_set_int (settings, "junk-empty-date", now);
-       }
 
        g_object_unref (settings);
 
@@ -671,38 +666,31 @@ mail_shell_backend_delete_junk_policy_decision (EMailBackend *backend)
 static gboolean
 mail_shell_backend_empty_trash_policy_decision (EMailBackend *backend)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
        GSettings *settings;
        gboolean empty_trash;
-       gint empty_date;
-       gint empty_days;
+       gint empty_date = 0;
+       gint empty_days = 0;
        gint now;
 
-       shell = e_shell_backend_get_shell (E_SHELL_BACKEND (backend));
-
        settings = g_settings_new ("org.gnome.evolution.mail");
-       shell_settings = e_shell_get_shell_settings (shell);
 
        now = time (NULL) / 60 / 60 / 24;
 
-       empty_trash = e_shell_settings_get_boolean (
-               shell_settings, "mail-empty-trash-on-exit");
-
-       /* XXX No EShellSettings properties for these keys. */
-
-       empty_date = empty_days = 0;
+       empty_trash = g_settings_get_boolean (settings, "trash-empty-on-exit");
 
        if (empty_trash) {
-               empty_days = g_settings_get_int (settings, "trash-empty-on-exit-days");
-               empty_date = g_settings_get_int (settings, "trash-empty-date");
+               empty_days = g_settings_get_int (
+                       settings, "trash-empty-on-exit-days");
+               empty_date = g_settings_get_int (
+                       settings, "trash-empty-date");
        }
 
-       empty_trash = empty_trash && ((empty_days == 0) || (empty_days > 0 && empty_date + empty_days <= 
now));
+       empty_trash = empty_trash && (
+               (empty_days == 0) ||
+               (empty_days > 0 && empty_date + empty_days <= now));
 
-       if (empty_trash) {
+       if (empty_trash)
                g_settings_set_int (settings, "trash-empty-date", now);
-       }
 
        g_object_unref (settings);
 
@@ -852,8 +840,6 @@ e_mail_shell_backend_edit_account (EMailShellBackend *mail_shell_backend,
 
 /******************* Code below here belongs elsewhere. *******************/
 
-#include "shell/e-shell-settings.h"
-
 static GSList *
 mail_labels_get_filter_options (gboolean include_none)
 {
diff --git a/modules/mail/e-mail-shell-sidebar.c b/modules/mail/e-mail-shell-sidebar.c
index 2c2cdfb..7f3c569 100644
--- a/modules/mail/e-mail-shell-sidebar.c
+++ b/modules/mail/e-mail-shell-sidebar.c
@@ -122,12 +122,9 @@ static void
 mail_shell_sidebar_constructed (GObject *object)
 {
        EMailShellSidebar *mail_shell_sidebar;
-       EShellSettings *shell_settings;
        EShellBackend *shell_backend;
        EShellSidebar *shell_sidebar;
-       EShellWindow *shell_window;
        EShellView *shell_view;
-       EShell *shell;
        EMailBackend *backend;
        EMailSession *session;
        EAlertSink *alert_sink;
@@ -135,6 +132,7 @@ mail_shell_sidebar_constructed (GObject *object)
        GtkTreeView *tree_view;
        GtkWidget *container;
        GtkWidget *widget;
+       GSettings *settings;
 
        /* Chain up to parent's constructed method. */
        G_OBJECT_CLASS (e_mail_shell_sidebar_parent_class)->constructed (object);
@@ -142,10 +140,6 @@ mail_shell_sidebar_constructed (GObject *object)
        shell_sidebar = E_SHELL_SIDEBAR (object);
        shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
        shell_backend = e_shell_view_get_shell_backend (shell_view);
-       shell_window = e_shell_view_get_shell_window (shell_view);
-
-       shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        backend = E_MAIL_BACKEND (shell_backend);
        session = e_mail_backend_get_session (backend);
@@ -179,15 +173,19 @@ mail_shell_sidebar_constructed (GObject *object)
                widget, "key-file",
                G_BINDING_SYNC_CREATE);
 
-       g_object_bind_property (
-               shell_settings, "mail-sidebar-ellipsize",
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       g_settings_bind (
+               settings, "side-bar-ellipsize-mode",
                widget, "ellipsize",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "mail-sidebar-search",
+       g_settings_bind (
+               settings, "side-bar-search",
                widget, "enable-search",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
+
+       g_object_unref (settings);
 
        g_signal_connect_swapped (
                widget, "key-file-changed",
diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c
index 92cb0d5..ed5b307 100644
--- a/modules/mail/e-mail-shell-view-actions.c
+++ b/modules/mail/e-mail-shell-view-actions.c
@@ -953,10 +953,8 @@ static void
 action_mail_smart_backward_cb (GtkAction *action,
                                EMailShellView *mail_shell_view)
 {
-       EShell *shell;
        EShellView *shell_view;
        EShellWindow *shell_window;
-       EShellSettings *shell_settings;
        EMailShellContent *mail_shell_content;
        EMailShellSidebar *mail_shell_sidebar;
        EMFolderTree *folder_tree;
@@ -967,6 +965,7 @@ action_mail_smart_backward_cb (GtkAction *action,
        GtkWidget *window;
        GtkAdjustment *adj;
        EMailDisplay *display;
+       GSettings *settings;
        gboolean caret_mode;
        gboolean magic_spacebar;
        gdouble value;
@@ -975,8 +974,6 @@ action_mail_smart_backward_cb (GtkAction *action,
 
        shell_view = E_SHELL_VIEW (mail_shell_view);
        shell_window = e_shell_view_get_shell_window (shell_view);
-       shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        mail_shell_content = mail_shell_view->priv->mail_shell_content;
        mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
@@ -988,8 +985,9 @@ action_mail_smart_backward_cb (GtkAction *action,
        display = e_mail_reader_get_mail_display (reader);
        message_list = e_mail_reader_get_message_list (reader);
 
-       magic_spacebar = e_shell_settings_get_boolean (
-               shell_settings, "mail-magic-spacebar");
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar");
+       g_object_unref (settings);
 
        toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE));
        caret_mode = gtk_toggle_action_get_active (toggle_action);
@@ -1005,7 +1003,7 @@ action_mail_smart_backward_cb (GtkAction *action,
                if (caret_mode || !magic_spacebar)
                        return;
 
-                /* XXX Are two separate calls really necessary? */
+               /* XXX Are two separate calls really necessary? */
 
                if (message_list_select (
                    MESSAGE_LIST (message_list),
@@ -1038,10 +1036,8 @@ static void
 action_mail_smart_forward_cb (GtkAction *action,
                               EMailShellView *mail_shell_view)
 {
-       EShell *shell;
        EShellView *shell_view;
        EShellWindow *shell_window;
-       EShellSettings *shell_settings;
        EMailShellContent *mail_shell_content;
        EMailShellSidebar *mail_shell_sidebar;
        EMFolderTree *folder_tree;
@@ -1052,6 +1048,7 @@ action_mail_smart_forward_cb (GtkAction *action,
        GtkAdjustment *adj;
        GtkToggleAction *toggle_action;
        EMailDisplay *display;
+       GSettings *settings;
        gboolean caret_mode;
        gboolean magic_spacebar;
        gdouble value;
@@ -1061,8 +1058,6 @@ action_mail_smart_forward_cb (GtkAction *action,
 
        shell_view = E_SHELL_VIEW (mail_shell_view);
        shell_window = e_shell_view_get_shell_window (shell_view);
-       shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        mail_shell_content = mail_shell_view->priv->mail_shell_content;
        mail_view = e_mail_shell_content_get_mail_view (mail_shell_content);
@@ -1074,8 +1069,9 @@ action_mail_smart_forward_cb (GtkAction *action,
        display = e_mail_reader_get_mail_display (reader);
        message_list = e_mail_reader_get_message_list (reader);
 
-       magic_spacebar = e_shell_settings_get_boolean (
-               shell_settings, "mail-magic-spacebar");
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar");
+       g_object_unref (settings);
 
        toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE));
        caret_mode = gtk_toggle_action_get_active (toggle_action);
@@ -1092,7 +1088,7 @@ action_mail_smart_forward_cb (GtkAction *action,
                if (caret_mode || !magic_spacebar)
                        return;
 
-                /* XXX Are two separate calls really necessary? */
+               /* XXX Are two separate calls really necessary? */
 
                if (message_list_select (
                    MESSAGE_LIST (message_list),
diff --git a/modules/mail/em-composer-prefs.c b/modules/mail/em-composer-prefs.c
index 58066e0..7d80bbc 100644
--- a/modules/mail/em-composer-prefs.c
+++ b/modules/mail/em-composer-prefs.c
@@ -52,75 +52,50 @@ G_DEFINE_TYPE (
        GTK_TYPE_VBOX)
 
 static gboolean
-transform_old_to_new_reply_style (GBinding *binding,
-                                  const GValue *source_value,
-                                  GValue *target_value,
-                                  gpointer user_data)
+composer_prefs_map_string_to_color (GValue *value,
+                                    GVariant *variant,
+                                    gpointer user_data)
 {
-       gboolean success = TRUE;
-
-       /* XXX This is the kind of legacy crap we wind up
-        *     with when we don't migrate things properly. */
-
-       switch (g_value_get_int (source_value)) {
-               case 0:  /* Quoted: 0 -> 2 */
-                       g_value_set_int (target_value, 2);
-                       break;
-
-               case 1:  /* Do Not Quote: 1 -> 3 */
-                       g_value_set_int (target_value, 3);
-                       break;
-
-               case 2:  /* Attach: 2 -> 0 */
-                       g_value_set_int (target_value, 0);
-                       break;
-
-               case 3:  /* Outlook: 3 -> 1 */
-                       g_value_set_int (target_value, 1);
-                       break;
-
-               default:
-                       success = FALSE;
-                       break;
+       GdkColor color;
+       const gchar *string;
+       gboolean success = FALSE;
+
+       string = g_variant_get_string (variant, NULL);
+       if (gdk_color_parse (string, &color)) {
+               g_value_set_boxed (value, &color);
+               success = TRUE;
        }
 
        return success;
 }
 
-static gboolean
-transform_new_to_old_reply_style (GBinding *binding,
-                                  const GValue *source_value,
-                                  GValue *target_value,
-                                  gpointer user_data)
+static GVariant *
+composer_prefs_map_color_to_string (const GValue *value,
+                                    const GVariantType *expected_type,
+                                    gpointer user_data)
 {
-       gboolean success = TRUE;
-
-       /* XXX This is the kind of legacy crap we wind up
-        *     with when we don't migrate things properly. */
-
-       switch (g_value_get_int (source_value)) {
-               case 0:  /* Attach: 0 -> 2 */
-                       g_value_set_int (target_value, 2);
-                       break;
-
-               case 1:  /* Outlook: 1 -> 3 */
-                       g_value_set_int (target_value, 3);
-                       break;
-
-               case 2:  /* Quoted: 2 -> 0 */
-                       g_value_set_int (target_value, 0);
-                       break;
-
-               case 3:  /* Do Not Quote: 3 -> 1 */
-                       g_value_set_int (target_value, 1);
-                       break;
-
-               default:
-                       success = FALSE;
-                       break;
+       GVariant *variant;
+       const GdkColor *color;
+
+       color = g_value_get_boxed (value);
+       if (color == NULL) {
+               variant = g_variant_new_string ("");
+       } else {
+               gchar *string;
+
+               /* Encode the color manually because CSS styles expect
+                * color codes as #rrggbb, whereas gdk_color_to_string()
+                * returns color codes as #rrrrggggbbbb. */
+               string = g_strdup_printf (
+                       "#%02x%02x%02x",
+                       (gint) color->red * 256 / 65536,
+                       (gint) color->green * 256 / 65536,
+                       (gint) color->blue * 256 / 65536);
+               variant = g_variant_new_string (string);
+               g_free (string);
        }
 
-       return success;
+       return variant;
 }
 
 static void
@@ -302,7 +277,7 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
 {
        GtkWidget *toplevel, *widget, *info_pixmap;
        GtkWidget *container;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        ESourceRegistry *registry;
        GtkTreeView *view;
        GtkListStore *store;
@@ -314,7 +289,8 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
        gint i;
 
        registry = e_shell_get_registry (shell);
-       shell_settings = e_shell_get_shell_settings (shell);
+
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
        /* Make sure our custom widget classes are registered with
         * GType before we load the GtkBuilder definition file. */
@@ -343,129 +319,113 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
 
        /* Express mode does not honor this setting. */
        widget = e_builder_get_widget (prefs->builder, "chkSendHTML");
-       if (e_shell_get_express_mode (shell))
+       if (e_shell_get_express_mode (shell)) {
                gtk_widget_hide (widget);
-       else
-               g_object_bind_property (
-                       shell_settings, "composer-format-html",
+       } else {
+               g_settings_bind (
+                       settings, "composer-send-html",
                        widget, "active",
-                       G_BINDING_BIDIRECTIONAL |
-                       G_BINDING_SYNC_CREATE);
+                       G_SETTINGS_BIND_DEFAULT);
+       }
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptEmptySubject");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-empty-subject",
+       g_settings_bind (
+               settings, "prompt-on-empty-subject",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptBccOnly");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-only-bcc",
+       g_settings_bind (
+               settings, "prompt-on-only-bcc",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptPrivateListReply");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-private-list-reply",
+       g_settings_bind (
+               settings, "prompt-on-private-list-reply",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptReplyManyRecips");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-reply-many-recips",
+       g_settings_bind (
+               settings, "prompt-on-reply-many-recips",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptListReplyTo");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-list-reply-to",
+       g_settings_bind (
+               settings, "prompt-on-list-reply-to",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptSendInvalidRecip");
-       g_object_bind_property (
-               shell_settings, "composer-prompt-send-invalid-recip",
+       g_settings_bind (
+               settings, "prompt-on-invalid-recip",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkAutoSmileys");
-       g_object_bind_property (
-               shell_settings, "composer-magic-smileys",
+       g_settings_bind (
+               settings, "composer-magic-smileys",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkRequestReceipt");
-       g_object_bind_property (
-               shell_settings, "composer-request-receipt",
+       g_settings_bind (
+               settings, "composer-request-receipt",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkReplyStartBottom");
-       g_object_bind_property (
-               shell_settings, "composer-reply-start-bottom",
+       g_settings_bind (
+               settings, "composer-reply-start-bottom",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkOutlookFilenames");
-       g_object_bind_property (
-               shell_settings, "composer-outlook-filenames",
+       g_settings_bind (
+               settings, "composer-outlook-filenames",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkIgnoreListReplyTo");
-       g_object_bind_property (
-               shell_settings, "composer-ignore-list-reply-to",
+       g_settings_bind (
+               settings, "composer-ignore-list-reply-to",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkGroupReplyToList");
-       g_object_bind_property (
-               shell_settings, "composer-group-reply-to-list",
+       g_settings_bind (
+               settings, "composer-group-reply-to-list",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkSignReplyIfSigned");
-       g_object_bind_property (
-               shell_settings, "composer-sign-reply-if-signed",
+       g_settings_bind (
+               settings, "composer-sign-reply-if-signed",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkTopSignature");
-       g_object_bind_property (
-               shell_settings, "composer-top-signature",
+       g_settings_bind (
+               settings, "composer-top-signature",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkEnableSpellChecking");
-       g_object_bind_property (
-               shell_settings, "composer-inline-spelling",
+       g_settings_bind (
+               settings, "composer-inline-spelling",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_charset_combo_box_new ();
        container = e_builder_get_widget (prefs->builder, "hboxComposerCharset");
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
        gtk_widget_show (widget);
-       g_object_bind_property (
-               shell_settings, "composer-charset",
+       g_settings_bind (
+               settings, "composer-charset",
                widget, "charset",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        container = e_builder_get_widget (prefs->builder, "lblCharset");
        gtk_label_set_mnemonic_widget (GTK_LABEL (container), widget);
@@ -500,34 +460,28 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
                GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_BUTTON);
 
        widget = e_builder_get_widget (prefs->builder, "colorButtonSpellCheckColor");
-       g_object_bind_property_full (
-               shell_settings, "composer-spell-color",
+       g_settings_bind_with_mapping (
+               settings, "composer-spell-color",
                widget, "color",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE,
-               e_binding_transform_string_to_color,
-               e_binding_transform_color_to_string,
+               G_SETTINGS_BIND_DEFAULT,
+               composer_prefs_map_string_to_color,
+               composer_prefs_map_color_to_string,
                NULL, (GDestroyNotify) NULL);
 
        spell_setup (prefs);
 
        /* Forwards and Replies */
        widget = e_builder_get_widget (prefs->builder, "comboboxForwardStyle");
-       g_object_bind_property (
-               shell_settings, "mail-forward-style",
-               widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+       g_settings_bind (
+               settings, "forward-style-name",
+               widget, "active-id",
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "comboboxReplyStyle");
-       g_object_bind_property_full (
-               shell_settings, "mail-reply-style",
-               widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE,
-               transform_old_to_new_reply_style,
-               transform_new_to_old_reply_style,
-               NULL, (GDestroyNotify) NULL);
+       g_settings_bind (
+               settings, "reply-style-name",
+               widget, "active-id",
+               G_SETTINGS_BIND_DEFAULT);
 
        /* Signatures */
        container = e_builder_get_widget (
@@ -544,10 +498,10 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
 
        /* Express mode does not honor this setting. */
        if (!e_shell_get_express_mode (shell))
-               g_object_bind_property (
-                       shell_settings, "composer-format-html",
+               g_settings_bind (
+                       settings, "composer-send-html",
                        widget, "prefer-html",
-                       G_BINDING_SYNC_CREATE);
+                       G_SETTINGS_BIND_GET);
 
        /* Sanitize the dialog for Express mode */
        e_shell_hide_widgets_for_express_mode (
@@ -561,6 +515,8 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
        e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
        toplevel = e_config_create_widget ((EConfig *) ec);
        gtk_container_add (GTK_CONTAINER (prefs), toplevel);
+
+       g_object_unref (settings);
 }
 
 GtkWidget *
diff --git a/modules/mail/em-mailer-prefs.c b/modules/mail/em-mailer-prefs.c
index 83a23ef..469425f 100644
--- a/modules/mail/em-mailer-prefs.c
+++ b/modules/mail/em-mailer-prefs.c
@@ -117,35 +117,79 @@ em_mailer_prefs_init (EMMailerPrefs *preferences)
 }
 
 static gboolean
-mark_seen_milliseconds_to_seconds (GBinding *binding,
-                                   const GValue *source_value,
-                                   GValue *target_value,
-                                   gpointer user_data)
+mailer_prefs_map_milliseconds_to_seconds (GValue *value,
+                                          GVariant *variant,
+                                          gpointer user_data)
 {
-       gint milliseconds;
+       gint32 milliseconds;
        gdouble seconds;
 
-       milliseconds = g_value_get_int (source_value);
+       milliseconds = g_variant_get_int32 (variant);
        seconds = milliseconds / 1000.0;
-       g_value_set_double (target_value, seconds);
+       g_value_set_double (value, seconds);
 
        return TRUE;
 }
 
-static gboolean
-mark_seen_seconds_to_milliseconds (GBinding *binding,
-                                   const GValue *source_value,
-                                   GValue *target_value,
-                                   gpointer user_data)
+static GVariant *
+mailer_prefs_map_seconds_to_milliseconds (const GValue *value,
+                                          const GVariantType *expected_type,
+                                          gpointer user_data)
 {
-       gint milliseconds;
+       gint32 milliseconds;
        gdouble seconds;
 
-       seconds = g_value_get_double (source_value);
+       seconds = g_value_get_double (value);
        milliseconds = seconds * 1000;
-       g_value_set_int (target_value, milliseconds);
 
-       return TRUE;
+       return g_variant_new_int32 (milliseconds);
+}
+
+static gboolean
+mailer_prefs_map_string_to_color (GValue *value,
+                                  GVariant *variant,
+                                  gpointer user_data)
+{
+       GdkColor color;
+       const gchar *string;
+       gboolean success = FALSE;
+
+       string = g_variant_get_string (variant, NULL);
+       if (gdk_color_parse (string, &color)) {
+               g_value_set_boxed (value, &color);
+               success = TRUE;
+       }
+
+       return success;
+}
+
+static GVariant *
+mailer_prefs_map_color_to_string (const GValue *value,
+                                  const GVariantType *expected_type,
+                                  gpointer user_data)
+{
+       GVariant *variant;
+       const GdkColor *color;
+
+       color = g_value_get_boxed (value);
+       if (color == NULL) {
+               variant = g_variant_new_string ("");
+       } else {
+               gchar *string;
+
+               /* Encode the color manually because CSS styles expect
+                * color codes as #rrggbb, whereas gdk_color_to_string()
+                * returns color codes as #rrrrggggbbbb. */
+               string = g_strdup_printf (
+                       "#%02x%02x%02x",
+                       (gint) color->red * 256 / 65536,
+                       (gint) color->green * 256 / 65536,
+                       (gint) color->blue * 256 / 65536);
+               variant = g_variant_new_string (string);
+               g_free (string);
+       }
+
+       return variant;
 }
 
 enum {
@@ -687,19 +731,51 @@ emmp_empty_junk_init (EMMailerPrefs *prefs,
 }
 
 static void
-http_images_changed (GtkWidget *widget,
-                     EMMailerPrefs *prefs)
+image_loading_policy_always_cb (GtkToggleButton *toggle_button)
+{
+       if (gtk_toggle_button_get_active (toggle_button)) {
+               GSettings *settings;
+
+               settings = g_settings_new ("org.gnome.evolution.mail");
+
+               g_settings_set_enum (
+                       settings, "image-loading-policy",
+                       E_MAIL_IMAGE_LOADING_POLICY_ALWAYS);
+
+               g_object_unref (settings);
+       }
+}
+
+static void
+image_loading_policy_sometimes_cb (GtkToggleButton *toggle_button)
 {
-       EMailImageLoadingPolicy policy;
+       if (gtk_toggle_button_get_active (toggle_button)) {
+               GSettings *settings;
+
+               settings = g_settings_new ("org.gnome.evolution.mail");
 
-       if (gtk_toggle_button_get_active (prefs->images_always))
-               policy = E_MAIL_IMAGE_LOADING_POLICY_ALWAYS;
-       else if (gtk_toggle_button_get_active (prefs->images_sometimes))
-               policy = E_MAIL_IMAGE_LOADING_POLICY_SOMETIMES;
-       else
-               policy = E_MAIL_IMAGE_LOADING_POLICY_NEVER;
+               g_settings_set_enum (
+                       settings, "image-loading-policy",
+                       E_MAIL_IMAGE_LOADING_POLICY_SOMETIMES);
 
-       g_settings_set_int (prefs->settings, "load-http-images", policy);
+               g_object_unref (settings);
+       }
+}
+
+static void
+image_loading_policy_never_cb (GtkToggleButton *toggle_button)
+{
+       if (gtk_toggle_button_get_active (toggle_button)) {
+               GSettings *settings;
+
+               settings = g_settings_new ("org.gnome.evolution.mail");
+
+               g_settings_set_enum (
+                       settings, "image-loading-policy",
+                       E_MAIL_IMAGE_LOADING_POLICY_NEVER);
+
+               g_object_unref (settings);
+       }
 }
 
 static GtkWidget *
@@ -750,7 +826,7 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
 {
        GSList *header_add_list, *p;
        gchar **headers_config;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        GHashTable *default_header_hash;
        GtkWidget *toplevel;
        GtkWidget *container;
@@ -760,12 +836,13 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
        GtkCellRenderer *renderer;
        GtkTreeIter iter;
        gboolean locked;
+       gboolean writable;
        gint val, i;
        EMConfig *ec;
        EMConfigTargetPrefs *target;
        GSList *l;
 
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
        /* Make sure our custom widget classes are registered with
         * GType before we load the GtkBuilder definition file. */
@@ -791,197 +868,187 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
        /* General tab */
 
        widget = e_builder_get_widget (prefs->builder, "chkCheckMailOnStart");
-       g_object_bind_property (
-               shell_settings, "mail-check-on-start",
+       g_settings_bind (
+               settings, "send-recv-on-start",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkCheckMailInAllOnStart");
-       g_object_bind_property (
-               shell_settings, "mail-check-all-on-start",
+       g_settings_bind (
+               settings, "send-recv-all-on-start",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property (
-               shell_settings, "mail-check-on-start",
+               G_SETTINGS_BIND_DEFAULT);
+       g_settings_bind (
+               settings, "send-recv-on-start",
                widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        /* Message Display */
 
        widget = e_builder_get_widget (prefs->builder, "chkMarkTimeout");
-       g_object_bind_property (
-               shell_settings, "mail-mark-seen",
+       g_settings_bind (
+               settings, "mark-seen",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        /* The "mark seen" timeout requires special transform functions
         * because we display the timeout value to the user in seconds
         * but store the settings value in milliseconds. */
        widget = e_builder_get_widget (prefs->builder, "spinMarkTimeout");
-       g_object_bind_property (
-               shell_settings, "mail-mark-seen",
-               widget, "sensitive",
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property_full (
-               shell_settings, "mail-mark-seen-timeout",
+       g_settings_bind_with_mapping (
+               settings, "mark-seen-timeout",
                widget, "value",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE,
-               mark_seen_milliseconds_to_seconds,
-               mark_seen_seconds_to_milliseconds,
+               G_SETTINGS_BIND_DEFAULT,
+               mailer_prefs_map_milliseconds_to_seconds,
+               mailer_prefs_map_seconds_to_milliseconds,
                NULL, (GDestroyNotify) NULL);
+       g_settings_bind (
+               settings, "mark-seen",
+               widget, "sensitive",
+               G_SETTINGS_BIND_GET);
 
        widget = e_builder_get_widget (prefs->builder, "view-check");
-       g_object_bind_property (
-               shell_settings, "mail-global-view-setting",
+       g_settings_bind (
+               settings, "global-view-setting",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_charset_combo_box_new ();
        container = e_builder_get_widget (prefs->builder, "hboxDefaultCharset");
-       gtk_label_set_mnemonic_widget (GTK_LABEL (e_builder_get_widget (prefs->builder, 
"lblDefaultCharset")), widget);
+       gtk_label_set_mnemonic_widget (
+               GTK_LABEL (e_builder_get_widget (
+               prefs->builder, "lblDefaultCharset")), widget);
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
        gtk_widget_show (widget);
-       g_object_bind_property (
-               shell_settings, "mail-charset",
+       g_settings_bind (
+               settings, "charset",
                widget, "charset",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkHighlightCitations");
-       g_object_bind_property (
-               shell_settings, "mail-mark-citations",
+       g_settings_bind (
+               settings, "mark-citations",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "colorButtonHighlightCitations");
-       g_object_bind_property (
-               shell_settings, "mail-mark-citations",
-               widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property_full (
-               shell_settings, "mail-citation-color",
+       g_settings_bind_with_mapping (
+               settings, "citation-color",
                widget, "color",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE,
-               e_binding_transform_string_to_color,
-               e_binding_transform_color_to_string,
+               G_SETTINGS_BIND_DEFAULT,
+               mailer_prefs_map_string_to_color,
+               mailer_prefs_map_color_to_string,
                NULL, (GDestroyNotify) NULL);
+       g_settings_bind (
+               settings, "mark-citations",
+               widget, "sensitive",
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "thread-by-subject");
-       g_object_bind_property (
-               shell_settings, "mail-thread-by-subject",
+       g_settings_bind (
+               settings, "thread-subject",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        /* Deleting Mail */
        widget = e_builder_get_widget (prefs->builder, "chkEmptyTrashOnExit");
-       g_object_bind_property (
-               shell_settings, "mail-empty-trash-on-exit",
+       g_settings_bind (
+               settings, "trash-empty-on-exit",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "comboboxEmptyTrashDays");
-       g_object_bind_property (
-               shell_settings, "mail-empty-trash-on-exit",
+       g_settings_bind (
+               settings, "trash-empty-on-exit",
                widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
        emmp_empty_trash_init (prefs, GTK_COMBO_BOX (widget));
 
        widget = e_builder_get_widget (prefs->builder, "chkConfirmExpunge");
-       g_object_bind_property (
-               shell_settings, "mail-confirm-expunge",
+       g_settings_bind (
+               settings, "prompt-on-expunge",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        /* Mail Fonts */
        widget = e_builder_get_widget (prefs->builder, "radFontUseSame");
-       g_object_bind_property (
-               shell_settings, "mail-use-custom-fonts",
+       g_settings_bind (
+               settings, "use-custom-font",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE |
-               G_BINDING_INVERT_BOOLEAN);
+               G_SETTINGS_BIND_DEFAULT |
+               G_SETTINGS_BIND_INVERT_BOOLEAN);
 
        widget = e_builder_get_widget (prefs->builder, "FontFixed");
-       g_object_bind_property (
-               shell_settings, "mail-font-monospace",
+       g_settings_bind (
+               settings, "monospace-font",
                widget, "font-name",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property (
-               shell_settings, "mail-use-custom-fonts",
+               G_SETTINGS_BIND_DEFAULT);
+       g_settings_bind (
+               settings, "use-custom-font",
                widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        widget = e_builder_get_widget (prefs->builder, "FontVariable");
-       g_object_bind_property (
-               shell_settings, "mail-font-variable",
+       g_settings_bind (
+               settings, "variable-width-font",
                widget, "font-name",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property (
-               shell_settings, "mail-use-custom-fonts",
+               G_SETTINGS_BIND_DEFAULT);
+       g_settings_bind (
+               settings, "use-custom-font",
                widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        /* HTML Mail tab */
 
        /* Loading Images */
-       locked = !g_settings_is_writable (prefs->settings, "load-http-images");
+       writable = g_settings_is_writable (
+               prefs->settings, "image-loading-policy");
 
-       val = g_settings_get_int (prefs->settings, "load-http-images");
-       prefs->images_never = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "radImagesNever"));
-       gtk_toggle_button_set_active (prefs->images_never, val == E_MAIL_IMAGE_LOADING_POLICY_NEVER);
-       if (locked)
-               gtk_widget_set_sensitive ((GtkWidget *) prefs->images_never, FALSE);
+       val = g_settings_get_enum (prefs->settings, "image-loading-policy");
+       widget = e_builder_get_widget (
+               prefs->builder, "radImagesNever");
+       gtk_toggle_button_set_active (
+               GTK_TOGGLE_BUTTON (widget),
+               val == E_MAIL_IMAGE_LOADING_POLICY_NEVER);
+       gtk_widget_set_sensitive (widget, writable);
 
-       prefs->images_sometimes = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, 
"radImagesSometimes"));
-       gtk_toggle_button_set_active (prefs->images_sometimes, val == E_MAIL_IMAGE_LOADING_POLICY_SOMETIMES);
-       if (locked)
-               gtk_widget_set_sensitive ((GtkWidget *) prefs->images_sometimes, FALSE);
+       g_signal_connect (
+               widget, "toggled",
+               G_CALLBACK (image_loading_policy_never_cb), NULL);
 
-       prefs->images_always = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "radImagesAlways"));
-       gtk_toggle_button_set_active (prefs->images_always, val == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS);
-       if (locked)
-               gtk_widget_set_sensitive ((GtkWidget *) prefs->images_always, FALSE);
+       widget = e_builder_get_widget (
+               prefs->builder, "radImagesSometimes");
+       gtk_toggle_button_set_active (
+               GTK_TOGGLE_BUTTON (widget),
+               val == E_MAIL_IMAGE_LOADING_POLICY_SOMETIMES);
+       gtk_widget_set_sensitive (widget, writable);
 
        g_signal_connect (
-               prefs->images_never, "toggled",
-               G_CALLBACK (http_images_changed), prefs);
-       g_signal_connect (
-               prefs->images_sometimes, "toggled",
-               G_CALLBACK (http_images_changed), prefs);
+               widget, "toggled",
+               G_CALLBACK (image_loading_policy_sometimes_cb), NULL);
+
+       widget = e_builder_get_widget (
+               prefs->builder, "radImagesAlways");
+       gtk_toggle_button_set_active (
+               GTK_TOGGLE_BUTTON (widget),
+               val == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS);
+       gtk_widget_set_sensitive (widget, FALSE);
+
        g_signal_connect (
-               prefs->images_always, "toggled",
-               G_CALLBACK (http_images_changed), prefs);
+               widget, "toggled",
+               G_CALLBACK (image_loading_policy_always_cb), NULL);
 
        widget = e_builder_get_widget (prefs->builder, "chkShowAnimatedImages");
-       g_object_bind_property (
-               shell_settings, "mail-show-animated-images",
+       g_settings_bind (
+               settings, "show-animated-images",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "chkPromptWantHTML");
-       g_object_bind_property (
-               shell_settings, "mail-confirm-unwanted-html",
+       g_settings_bind (
+               settings, "prompt-on-unwanted-html",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        container = e_builder_get_widget (prefs->builder, "labels-alignment");
        widget = e_mail_label_manager_new ();
@@ -997,23 +1064,20 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
        locked = !g_settings_is_writable (prefs->settings, "headers");
 
        widget = e_builder_get_widget (prefs->builder, "photo_show");
-       g_object_bind_property (
-               shell_settings, "mail-show-sender-photo",
+       g_settings_bind (
+               settings, "show-sender-photo",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "photo_local");
-       g_object_bind_property (
-               shell_settings, "mail-show-sender-photo",
-               widget, "sensitive",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
-       g_object_bind_property (
-               shell_settings, "mail-only-local-photos",
+       g_settings_bind (
+               settings, "photo-local",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
+       g_settings_bind (
+               settings, "show-sender-photo",
+               widget, "sensitive",
+               G_SETTINGS_BIND_GET);
 
        /* always de-sensitised until the user types something in the entry */
        prefs->add_header = GTK_BUTTON (e_builder_get_widget (prefs->builder, "cmdHeadersAdd"));
@@ -1142,33 +1206,30 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
        widget = gtk_check_button_new_with_mnemonic (_("Show _original header value"));
        gtk_widget_show (widget);
        gtk_table_attach ((GtkTable *) table, widget, 0, 3, 2, 3, GTK_EXPAND | GTK_FILL, 0, 12, 0);
-       g_object_bind_property (
-               shell_settings, "mail-show-real-date",
+       g_settings_bind (
+               settings, "show-real-date",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        /* Junk prefs */
        widget = e_builder_get_widget (prefs->builder, "chkCheckIncomingMail");
-       g_object_bind_property (
-               shell_settings, "mail-check-for-junk",
+       g_settings_bind (
+               settings, "junk-check-incoming",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "junk_empty_check");
-       g_object_bind_property (
-               shell_settings, "mail-empty-junk-on-exit",
+       g_settings_bind (
+               settings, "junk-empty-on-exit",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_DEFAULT);
 
        widget = e_builder_get_widget (prefs->builder, "junk_empty_combobox");
        emmp_empty_junk_init (prefs, GTK_COMBO_BOX (widget));
-       g_object_bind_property (
-               shell_settings, "mail-empty-junk-on-exit",
+       g_settings_bind (
+               settings, "junk-empty-on-exit",
                widget, "sensitive",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        widget = e_builder_get_widget (prefs->builder, "junk-module-options");
        e_mail_junk_options_set_session (E_MAIL_JUNK_OPTIONS (widget), session);
@@ -1211,6 +1272,8 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs,
        e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
        toplevel = e_config_create_widget ((EConfig *) ec);
        gtk_container_add (GTK_CONTAINER (prefs), toplevel);
+
+       g_object_unref (settings);
 }
 
 GtkWidget *
diff --git a/modules/mail/em-mailer-prefs.h b/modules/mail/em-mailer-prefs.h
index afd88af..67cd1f6 100644
--- a/modules/mail/em-mailer-prefs.h
+++ b/modules/mail/em-mailer-prefs.h
@@ -67,11 +67,6 @@ struct _EMMailerPrefs {
        GtkFontButton *font_fixed;
        GtkToggleButton *font_share;
 
-       /* Loading Images */
-       GtkToggleButton *images_always;
-       GtkToggleButton *images_sometimes;
-       GtkToggleButton *images_never;
-
        GtkToggleButton *autodetect_links;
 
        /* Labels and Colours tab */
diff --git a/modules/mailto-handler/evolution-mailto-handler.c 
b/modules/mailto-handler/evolution-mailto-handler.c
index b6f3656..f985562 100644
--- a/modules/mailto-handler/evolution-mailto-handler.c
+++ b/modules/mailto-handler/evolution-mailto-handler.c
@@ -102,8 +102,7 @@ mailto_handler_is_evolution (GAppInfo *app_info)
 static gboolean
 mailto_handler_prompt (EMailtoHandler *extension)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        GtkWidget *container;
        GtkWidget *dialog;
        GtkWidget *widget;
@@ -111,9 +110,6 @@ mailto_handler_prompt (EMailtoHandler *extension)
        gchar *markup;
        gint response;
 
-       shell = mailto_handler_get_shell (extension);
-       shell_settings = e_shell_get_shell_settings (shell);
-
        dialog = gtk_dialog_new_with_buttons (
                "", NULL, 0,
                GTK_STOCK_NO, GTK_RESPONSE_NO,
@@ -156,12 +152,16 @@ mailto_handler_prompt (EMailtoHandler *extension)
        gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 12);
        gtk_widget_show (widget);
 
-       g_object_bind_property (
-               shell_settings, "mailto-handler-check",
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       g_settings_bind (
+               settings, "prompt-check-if-default-mailer",
                widget, "active",
-               G_BINDING_BIDIRECTIONAL |
-               G_BINDING_SYNC_CREATE |
-               G_BINDING_INVERT_BOOLEAN);
+               G_SETTINGS_BIND_GET |
+               G_SETTINGS_BIND_SET |
+               G_SETTINGS_BIND_INVERT_BOOLEAN);
+
+       g_object_unref (settings);
 
        /* Direct input focus away from the checkbox. */
        widget = gtk_dialog_get_widget_for_response (
@@ -178,19 +178,17 @@ mailto_handler_prompt (EMailtoHandler *extension)
 static void
 mailto_handler_check (EMailtoHandler *extension)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        gboolean check_mailto_handler = TRUE;
        GAppInfo *app_info = NULL;
        GError *error = NULL;
 
-       shell = mailto_handler_get_shell (extension);
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
-       g_object_get (
-               shell_settings,
-               "mailto-handler-check", &check_mailto_handler,
-               NULL);
+       check_mailto_handler = g_settings_get_boolean (
+               settings, "prompt-check-if-default-mailer");
+
+       g_object_unref (settings);
 
        /* Should we check the "mailto" URI handler? */
        if (!check_mailto_handler)
@@ -245,11 +243,6 @@ mailto_handler_constructed (GObject *object)
 
        shell = mailto_handler_get_shell (extension);
 
-       e_shell_settings_install_property_for_key (
-               "mailto-handler-check",
-               "org.gnome.evolution.mail",
-               "prompt-check-if-default-mailer");
-
        g_signal_connect_swapped (
                shell, "event::ready-to-start",
                G_CALLBACK (mailto_handler_check), extension);
diff --git a/modules/settings/e-settings-mail-formatter.c b/modules/settings/e-settings-mail-formatter.c
index 1efd290..7733c02 100644
--- a/modules/settings/e-settings-mail-formatter.c
+++ b/modules/settings/e-settings-mail-formatter.c
@@ -22,7 +22,6 @@
 
 #include "e-settings-mail-formatter.h"
 
-#include <shell/e-shell.h>
 #include <e-util/e-util.h>
 #include <em-format/e-mail-formatter.h>
 #include <mail/e-mail-reader-utils.h>
@@ -51,6 +50,24 @@ settings_mail_formatter_get_extensible (ESettingsMailFormatter *extension)
        return E_MAIL_FORMATTER (extensible);
 }
 
+static gboolean
+settings_mail_formatter_map_string_to_color (GValue *value,
+                                             GVariant *variant,
+                                             gpointer user_data)
+{
+       GdkColor color;
+       const gchar *string;
+       gboolean success = FALSE;
+
+       string = g_variant_get_string (variant, NULL);
+       if (gdk_color_parse (string, &color)) {
+               g_value_set_boxed (value, &color);
+               success = TRUE;
+       }
+
+       return success;
+}
+
 static void
 settings_mail_formatter_headers_changed_cb (GSettings *settings,
                                             const gchar *key,
@@ -91,14 +108,15 @@ settings_mail_formatter_dispose (GObject *object)
 
        priv = E_SETTINGS_MAIL_FORMATTER_GET_PRIVATE (object);
 
-       if (priv->settings != NULL) {
+       if (priv->headers_changed_id > 0) {
                g_signal_handler_disconnect (
                        priv->settings,
                        priv->headers_changed_id);
-               g_object_unref (priv->settings);
-               priv->settings = NULL;
+               priv->headers_changed_id = 0;
        }
 
+       g_clear_object (&priv->settings);
+
        /* Chain up to parent's dispose() method. */
        G_OBJECT_CLASS (e_settings_mail_formatter_parent_class)->
                dispose (object);
@@ -109,46 +127,45 @@ settings_mail_formatter_constructed (GObject *object)
 {
        ESettingsMailFormatter *extension;
        EMailFormatter *formatter;
-       EShellSettings *shell_settings;
-       EShell *shell;
+       GSettings *settings;
 
        extension = E_SETTINGS_MAIL_FORMATTER (object);
        formatter = settings_mail_formatter_get_extensible (extension);
 
-       shell = e_shell_get_default ();
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = extension->priv->settings;
 
-       g_object_bind_property_full (
-               shell_settings, "mail-citation-color",
+       g_settings_bind_with_mapping (
+               settings, "citation-color",
                formatter, "citation-color",
-               G_BINDING_SYNC_CREATE,
-               e_binding_transform_string_to_color,
-               NULL, NULL, (GDestroyNotify) NULL);
+               G_SETTINGS_BIND_GET,
+               settings_mail_formatter_map_string_to_color,
+               (GSettingsBindSetMapping) NULL,
+               NULL, (GDestroyNotify) NULL);
 
-       g_object_bind_property (
-               shell_settings, "mail-mark-citations",
+       g_settings_bind (
+               settings, "mark-citations",
                formatter, "mark-citations",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "mail-image-loading-policy",
+       g_settings_bind (
+               settings, "image-loading-policy",
                formatter, "image-loading-policy",
                G_BINDING_SYNC_CREATE);
 
-       g_object_bind_property (
-               shell_settings, "mail-show-sender-photo",
+       g_settings_bind (
+               settings, "show-sender-photo",
                formatter, "show-sender-photo",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "mail-show-real-date",
+       g_settings_bind (
+               settings, "show-real-date",
                formatter, "show-real-date",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "mail-show-animated-images",
+       g_settings_bind (
+               settings, "show-animated-images",
                formatter, "animate-images",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        extension->priv->headers_changed_id = g_signal_connect (
                extension->priv->settings, "changed::headers",
@@ -189,10 +206,12 @@ e_settings_mail_formatter_class_finalize (ESettingsMailFormatterClass *class)
 static void
 e_settings_mail_formatter_init (ESettingsMailFormatter *extension)
 {
+       GSettings *settings;
+
        extension->priv = E_SETTINGS_MAIL_FORMATTER_GET_PRIVATE (extension);
 
-       extension->priv->settings =
-               g_settings_new ("org.gnome.evolution.mail");
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       extension->priv->settings = settings;
 }
 
 void
diff --git a/modules/settings/e-settings-mail-reader.c b/modules/settings/e-settings-mail-reader.c
index 17ab57b..d333c81 100644
--- a/modules/settings/e-settings-mail-reader.c
+++ b/modules/settings/e-settings-mail-reader.c
@@ -43,31 +43,34 @@ settings_mail_reader_idle_cb (EExtension *extension)
 {
        EExtensible *extensible;
        GtkActionGroup *action_group;
-       EShellSettings *shell_settings;
        ESourceRegistry *registry;
+       GSettings *settings;
        ESource *source;
        EShell *shell;
 
        extensible = e_extension_get_extensible (extension);
 
-       shell = e_shell_get_default ();
-       registry = e_shell_get_registry (shell);
-       shell_settings = e_shell_get_shell_settings (shell);
+       settings = g_settings_new ("org.gnome.evolution.mail");
 
-       g_object_bind_property (
-               shell_settings, "mail-forward-style",
+       g_settings_bind (
+               settings, "forward-style-name",
                extensible, "forward-style",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "mail-reply-style",
+       g_settings_bind (
+               settings, "reply-style-name",
                extensible, "reply-style",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
+
+       g_object_unref (settings);
 
        action_group = e_mail_reader_get_action_group (
                E_MAIL_READER (extensible),
                E_MAIL_READER_ACTION_GROUP_SEARCH_FOLDERS);
 
+       shell = e_shell_get_default ();
+       registry = e_shell_get_registry (shell);
+
        source = e_source_registry_ref_source (registry, "vfolder");
 
        g_object_bind_property (
diff --git a/modules/settings/e-settings-web-view-gtkhtml.c b/modules/settings/e-settings-web-view-gtkhtml.c
index 49e8112..297e88f 100644
--- a/modules/settings/e-settings-web-view-gtkhtml.c
+++ b/modules/settings/e-settings-web-view-gtkhtml.c
@@ -25,7 +25,7 @@
 
 #include "e-settings-web-view-gtkhtml.h"
 
-#include <shell/e-shell.h>
+#include <e-util/e-util.h>
 
 #define E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE(obj) \
        (G_TYPE_INSTANCE_GET_PRIVATE \
@@ -33,7 +33,7 @@
 
 struct _ESettingsWebViewGtkHTMLPrivate {
        GtkCssProvider *css_provider;
-       EShellSettings *shell_settings;
+       GSettings *settings;
 };
 
 G_DEFINE_DYNAMIC_TYPE (
@@ -74,33 +74,28 @@ settings_web_view_gtkhtml_load_style (ESettingsWebViewGtkHTML *extension)
        gboolean custom_fonts;
        gboolean mark_citations;
        EExtensible *extensible;
-       EShellSettings *shell_settings;
        GtkStyleContext *style_context;
+       GSettings *settings;
        GError *error = NULL;
 
        /* Some of our mail and composer preferences are passed down to
         * GtkHtml through style properties, unfortunately.  This builds
         * a style sheet for the EWebView using values from GSettings. */
 
-       shell_settings = extension->priv->shell_settings;
-
-       custom_fonts = e_shell_settings_get_boolean (
-               shell_settings, "mail-use-custom-fonts");
-
-       monospace_font = e_shell_settings_get_string (
-               shell_settings, "mail-font-monospace");
-
-       variable_font = e_shell_settings_get_string (
-               shell_settings, "mail-font-variable");
-
-       mark_citations = e_shell_settings_get_boolean (
-               shell_settings, "mail-mark-citations");
-
-       citation_color = e_shell_settings_get_string (
-               shell_settings, "mail-citation-color");
-
-       spell_color = e_shell_settings_get_string (
-               shell_settings, "composer-spell-color");
+       settings = extension->priv->settings;
+
+       custom_fonts =
+               g_settings_get_boolean (settings, "use-custom-font");
+       monospace_font =
+               g_settings_get_string (settings, "monospace-font");
+       variable_font =
+               g_settings_get_string (settings, "variable-width-font");
+       mark_citations =
+               g_settings_get_boolean (settings, "mark-citations");
+       citation_color =
+               g_settings_get_string (settings, "citation-color");
+       spell_color =
+               g_settings_get_string (settings, "composer-spell-color");
 
        buffer = g_string_new ("EWebViewGtkHTML {\n");
 
@@ -150,27 +145,35 @@ settings_web_view_gtkhtml_load_style (ESettingsWebViewGtkHTML *extension)
 }
 
 static void
+settings_web_view_gtkhtml_changed_cb (GSettings *settings,
+                                      const gchar *key,
+                                      ESettingsWebViewGtkHTML *extension)
+{
+       settings_web_view_gtkhtml_load_style (extension);
+}
+
+static void
 settings_web_view_gtkhtml_realize (GtkWidget *widget,
                                    ESettingsWebViewGtkHTML *extension)
 {
-       EShellSettings *shell_settings;
+       GSettings *settings;
 
-       shell_settings = extension->priv->shell_settings;
+       settings = extension->priv->settings;
 
-       g_object_bind_property (
-               shell_settings, "composer-inline-spelling",
+       g_settings_bind (
+               settings, "composer-inline-spelling",
                widget, "inline-spelling",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "composer-magic-links",
+       g_settings_bind (
+               settings, "composer-magic-links",
                widget, "magic-links",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "composer-magic-smileys",
+       g_settings_bind (
+               settings, "composer-magic-smileys",
                widget, "magic-smileys",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
        gtk_style_context_add_provider (
                gtk_widget_get_style_context (widget),
@@ -181,34 +184,34 @@ settings_web_view_gtkhtml_realize (GtkWidget *widget,
 
        /* Reload the style sheet when certain settings change. */
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::mail-use-custom-fonts",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::use-custom-font",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::mail-font-monospace",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::monospace-font",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::mail-font-variable",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::variable-width-font",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::mail-mark-citations",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::mark-citations",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::mail-citation-color",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::citation-color",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 
-       g_signal_connect_swapped (
-               shell_settings, "notify::composer-spell-color",
-               G_CALLBACK (settings_web_view_gtkhtml_load_style),
+       g_signal_connect (
+               settings, "changed::composer-spell-color",
+               G_CALLBACK (settings_web_view_gtkhtml_changed_cb),
                extension);
 }
 
@@ -219,19 +222,15 @@ settings_web_view_gtkhtml_dispose (GObject *object)
 
        priv = E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE (object);
 
-       if (priv->css_provider != NULL) {
-               g_object_unref (priv->css_provider);
-               priv->css_provider = NULL;
-       }
-
-       if (priv->shell_settings != NULL) {
+       if (priv->settings != NULL) {
                g_signal_handlers_disconnect_by_func (
-                       priv->shell_settings,
-                       settings_web_view_gtkhtml_load_style, object);
-               g_object_unref (priv->shell_settings);
-               priv->shell_settings = NULL;
+                       priv->settings,
+                       settings_web_view_gtkhtml_changed_cb, object);
        }
 
+       g_clear_object (&priv->css_provider);
+       g_clear_object (&priv->settings);
+
        /* Chain up to parent's dispose() method. */
        G_OBJECT_CLASS (e_settings_web_view_gtkhtml_parent_class)->
                dispose (object);
@@ -240,27 +239,17 @@ settings_web_view_gtkhtml_dispose (GObject *object)
 static void
 settings_web_view_gtkhtml_constructed (GObject *object)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
-       ESettingsWebViewGtkHTML *extension;
        EExtensible *extensible;
 
-       shell = e_shell_get_default ();
-       shell_settings = e_shell_get_shell_settings (shell);
-
-       extension = (ESettingsWebViewGtkHTML *) object;
-       extensible = e_extension_get_extensible (E_EXTENSION (extension));
-
-       extension->priv->css_provider = gtk_css_provider_new ();
-       extension->priv->shell_settings = g_object_ref (shell_settings);
+       extensible = e_extension_get_extensible (E_EXTENSION (object));
 
-       /* Wait to bind shell settings until the EWebView is realized
-        * so GtkhtmlEditor has a chance to install a GtkHTMLEditorAPI.
+       /* Wait to bind settings until the EWebView is realized so
+        * GtkhtmlEditor has a chance to install a GtkHTMLEditorAPI.
         * Otherwise our settings will have no effect. */
 
        g_signal_connect (
                extensible, "realize",
-               G_CALLBACK (settings_web_view_gtkhtml_realize), extension);
+               G_CALLBACK (settings_web_view_gtkhtml_realize), object);
 
        /* Chain up to parent's constructed() method. */
        G_OBJECT_CLASS (e_settings_web_view_gtkhtml_parent_class)->
@@ -292,8 +281,15 @@ e_settings_web_view_gtkhtml_class_finalize (ESettingsWebViewGtkHTMLClass *class)
 static void
 e_settings_web_view_gtkhtml_init (ESettingsWebViewGtkHTML *extension)
 {
+       GSettings *settings;
+
        extension->priv =
                E_SETTINGS_WEB_VIEW_GTKHTML_GET_PRIVATE (extension);
+
+       extension->priv->css_provider = gtk_css_provider_new ();
+
+       settings = g_settings_new ("org.gnome.evolution.mail");
+       extension->priv->settings = settings;
 }
 
 void
diff --git a/modules/settings/e-settings-web-view.c b/modules/settings/e-settings-web-view.c
index c8da19f..843a750 100644
--- a/modules/settings/e-settings-web-view.c
+++ b/modules/settings/e-settings-web-view.c
@@ -25,7 +25,7 @@
 
 #include "e-settings-web-view.h"
 
-#include <shell/e-shell.h>
+#include <e-util/e-util.h>
 
 #define E_SETTINGS_WEB_VIEW_GET_PRIVATE(obj) \
        (G_TYPE_INSTANCE_GET_PRIVATE \
@@ -43,29 +43,29 @@ G_DEFINE_DYNAMIC_TYPE (
 static void
 settings_web_view_constructed (GObject *object)
 {
-       EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
        EExtensible *extensible;
 
-       shell = e_shell_get_default ();
-       shell_settings = e_shell_get_shell_settings (shell);
-
        extensible = e_extension_get_extensible (E_EXTENSION (object));
 
-       g_object_bind_property (
-               shell_settings, "composer-inline-spelling",
+       settings = g_settings_new ("org.gnome.evolution.mail");
+
+       g_settings_bind (
+               settings, "composer-inline-spelling",
                extensible, "inline-spelling",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "composer-magic-links",
+       g_settings_bind (
+               settings, "composer-magic-links",
                extensible, "magic-links",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
 
-       g_object_bind_property (
-               shell_settings, "composer-magic-smileys",
+       g_settings_bind (
+               settings, "composer-magic-smileys",
                extensible, "magic-smileys",
-               G_BINDING_SYNC_CREATE);
+               G_SETTINGS_BIND_GET);
+
+       g_object_unref (settings);
 
        /* Chain up to parent's constructed() method. */
        G_OBJECT_CLASS (e_settings_web_view_parent_class)->
diff --git a/modules/text-highlight/e-mail-formatter-text-highlight.c 
b/modules/text-highlight/e-mail-formatter-text-highlight.c
index aec403c..f1a97b3 100644
--- a/modules/text-highlight/e-mail-formatter-text-highlight.c
+++ b/modules/text-highlight/e-mail-formatter-text-highlight.c
@@ -28,9 +28,6 @@
 #include <em-format/e-mail-part-utils.h>
 #include <e-util/e-util.h>
 
-#include <shell/e-shell-settings.h>
-#include <shell/e-shell.h>
-
 #include <libebackend/libebackend.h>
 #include <libedataserver/libedataserver.h>
 
@@ -52,21 +49,6 @@ G_DEFINE_DYNAMIC_TYPE (
        E_TYPE_MAIL_FORMATTER_EXTENSION)
 
 static gchar *
-get_default_font (void)
-{
-       gchar *font;
-       GSettings *settings;
-
-       settings = g_settings_new ("org.gnome.desktop.interface");
-
-       font = g_settings_get_string (settings, "monospace-font-name");
-
-       g_object_unref (settings);
-
-       return font ? font : g_strdup ("monospace 10");
-}
-
-static gchar *
 get_syntax (EMailPart *part,
             const gchar *uri)
 {
@@ -177,10 +159,9 @@ emfe_text_highlight_format (EMailFormatterExtension *extension,
                GPid pid;
                CamelDataWrapper *dw;
                gchar *font_family, *font_size, *syntax;
-               gboolean use_custom_font;
-               EShell *shell;
-               EShellSettings *settings;
                PangoFontDescription *fd;
+               GSettings *settings;
+               gchar *font = NULL;
                gboolean success;
 
                const gchar *argv[] = { HIGHLIGHT_COMMAND,
@@ -207,30 +188,26 @@ emfe_text_highlight_format (EMailFormatterExtension *extension,
                        return FALSE;
                }
 
-               shell = e_shell_get_default ();
-               settings = e_shell_get_shell_settings (shell);
-
-               fd = NULL;
-               use_custom_font = e_shell_settings_get_boolean (
-                                       settings, "mail-use-custom-fonts");
-               if (!use_custom_font) {
-                       gchar *font;
-
-                       font = get_default_font ();
-                       fd = pango_font_description_from_string (font);
-                       g_free (font);
+               settings = g_settings_new ("org.gnome.evolution.mail");
+               if (g_settings_get_boolean (settings, "use-custom-font"))
+                       font = g_settings_get_string (
+                               settings, "monospace-font");
+               g_object_unref (settings);
+
+               if (font == NULL) {
+                       settings = g_settings_new (
+                               "org.gnome.desktop.interface");
+                       font = g_settings_get_string (
+                               settings, "monospace-font-name");
+                       g_object_unref (settings);
+               }
 
-               } else {
-                       gchar *font;
+               if (font == NULL)
+                       font = g_strdup ("monospace 10");
 
-                       font = e_shell_settings_get_string (
-                                       settings, "mail-font-monospace");
-                       if (!font)
-                               font = get_default_font ();
+               fd = pango_font_description_from_string (font);
 
-                       fd = pango_font_description_from_string (font);
-                       g_free (font);
-               }
+               g_free (font);
 
                font_family = g_strdup_printf (
                        "--font='%s'",
diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c
index 335e939..2b70a5e 100644
--- a/shell/e-shell-window-actions.c
+++ b/shell/e-shell-window-actions.c
@@ -763,17 +763,17 @@ action_work_offline_cb (GtkAction *action,
                         EShellWindow *shell_window)
 {
        EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
 
        shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        e_shell_set_online (shell, FALSE);
 
-       /* XXX The sense of the setting is reversed.  Would be more
-        *     intuitive and less error-prone as "start-online". */
-       e_shell_settings_set_boolean (
-               shell_settings, "start-offline", TRUE);
+       /* XXX The boolean sense of the setting is backwards.  Would
+        *     be more intuitive and less error-prone as "start-online". */
+       settings = g_settings_new ("org.gnome.evolution.shell");
+       g_settings_set_boolean (settings, "start-offline", TRUE);
+       g_object_unref (settings);
 }
 
 /**
@@ -789,17 +789,17 @@ action_work_online_cb (GtkAction *action,
                        EShellWindow *shell_window)
 {
        EShell *shell;
-       EShellSettings *shell_settings;
+       GSettings *settings;
 
        shell = e_shell_window_get_shell (shell_window);
-       shell_settings = e_shell_get_shell_settings (shell);
 
        e_shell_set_online (shell, TRUE);
 
-       /* XXX The sense of the setting is reversed.  Would be more
-        *     intuitive and less error-prone as "start-online". */
-       e_shell_settings_set_boolean (
-               shell_settings, "start-offline", FALSE);
+       /* XXX The boolean sense of the setting is backwards.  Would
+        *     be more intuitive and less error-prone as "start-online". */
+       settings = g_settings_new ("org.gnome.evolution.shell");
+       g_settings_set_boolean (settings, "start-offline", FALSE);
+       g_object_unref (settings);
 }
 
 /**


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