aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libemail-engine/e-mail-session.c12
-rw-r--r--modules/settings/e-settings-mail-session.c78
2 files changed, 79 insertions, 11 deletions
diff --git a/libemail-engine/e-mail-session.c b/libemail-engine/e-mail-session.c
index 7cffcc514f..003c0a73a2 100644
--- a/libemail-engine/e-mail-session.c
+++ b/libemail-engine/e-mail-session.c
@@ -1289,16 +1289,6 @@ mail_session_constructed (GObject *object)
g_list_free (list);
- settings = g_settings_new ("org.gnome.evolution.mail");
-
- /* Bind the "junk-default-plugin" GSettings
- * key to our "junk-filter-name" property. */
-
- g_settings_bind (
- settings, "junk-default-plugin",
- object, "junk-filter-name",
- G_SETTINGS_BIND_DEFAULT);
-
mail_config_reload_junk_headers (session);
e_proxy_setup_proxy (session->priv->proxy);
@@ -1307,6 +1297,8 @@ mail_session_constructed (GObject *object)
* before starting the first mail store refresh. */
mail_msg_init ();
+ settings = g_settings_new ("org.gnome.evolution.mail");
+
/* The application is not yet fully initialized at this point,
* so run the first mail store refresh from an idle callback. */
if (g_settings_get_boolean (settings, "send-recv-on-start"))
diff --git a/modules/settings/e-settings-mail-session.c b/modules/settings/e-settings-mail-session.c
index 0029a5a47d..04b0169f03 100644
--- a/modules/settings/e-settings-mail-session.c
+++ b/modules/settings/e-settings-mail-session.c
@@ -33,13 +33,83 @@ G_DEFINE_DYNAMIC_TYPE (
e_settings_mail_session,
E_TYPE_EXTENSION)
+static gboolean
+settings_mail_session_name_to_junk_filter (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const gchar *filter_name;
+ gboolean success = FALSE;
+
+ filter_name = g_variant_get_string (variant, NULL);
+
+ if (filter_name != NULL) {
+ EMailJunkFilter *junk_filter;
+
+ junk_filter = e_mail_session_get_junk_filter_by_name (
+ E_MAIL_SESSION (user_data), filter_name);
+ g_value_set_object (value, junk_filter);
+ success = (junk_filter != NULL);
+ }
+
+ return success;
+}
+
+static GVariant *
+settings_mail_session_junk_filter_to_name (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ EMailJunkFilter *junk_filter;
+ GVariant *result = NULL;
+
+ junk_filter = g_value_get_object (value);
+
+ if (E_IS_MAIL_JUNK_FILTER (junk_filter)) {
+ EMailJunkFilterClass *class;
+
+ class = E_MAIL_JUNK_FILTER_GET_CLASS (junk_filter);
+ result = g_variant_new_string (class->filter_name);
+ }
+
+ return result;
+}
+
+static gboolean
+settings_mail_session_idle_cb (gpointer user_data)
+{
+ EMailSession *session;
+ GSettings *settings;
+
+ session = E_MAIL_SESSION (user_data);
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+
+ /* Need to delay the settings binding to give EMailSession a
+ * chance to set up its junk filter table. The junk filters
+ * are also EMailSession extensions. */
+ g_settings_bind_with_mapping (
+ settings, "junk-default-plugin",
+ session, "junk-filter",
+ G_SETTINGS_BIND_DEFAULT,
+ settings_mail_session_name_to_junk_filter,
+ settings_mail_session_junk_filter_to_name,
+ session, (GDestroyNotify) NULL);
+
+ g_object_unref (settings);
+
+ return G_SOURCE_REMOVE;
+}
+
static void
settings_mail_session_constructed (GObject *object)
{
+ EExtension *extension;
EExtensible *extensible;
GSettings *settings;
- extensible = e_extension_get_extensible (E_EXTENSION (object));
+ extension = E_EXTENSION (object);
+ extensible = e_extension_get_extensible (extension);
settings = g_settings_new ("org.gnome.evolution.mail");
@@ -52,6 +122,12 @@ settings_mail_session_constructed (GObject *object)
g_object_unref (settings);
+ g_idle_add_full (
+ G_PRIORITY_HIGH_IDLE,
+ settings_mail_session_idle_cb,
+ g_object_ref (extensible),
+ (GDestroyNotify) g_object_unref);
+
/* Chain up to parent's constructed() method. */
G_OBJECT_CLASS (e_settings_mail_session_parent_class)->
constructed (object);