diff options
-rw-r--r-- | libemail-engine/e-mail-session.c | 12 | ||||
-rw-r--r-- | modules/settings/e-settings-mail-session.c | 78 |
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); |