diff options
Diffstat (limited to 'modules/mail/e-mail-config-format-html.c')
-rw-r--r-- | modules/mail/e-mail-config-format-html.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/modules/mail/e-mail-config-format-html.c b/modules/mail/e-mail-config-format-html.c index cbedecf914..a764e7d729 100644 --- a/modules/mail/e-mail-config-format-html.c +++ b/modules/mail/e-mail-config-format-html.c @@ -27,16 +27,74 @@ #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> static gpointer parent_class; static void +headers_changed_cb (GConfClient *client, + guint cnxn_id, + GConfEntry *entry, + gpointer user_data) +{ + GSList *header_config_list, *p; + EExtension *extension; + EMailFormatter *formatter; + + g_return_if_fail (client != NULL); + + extension = user_data; + formatter = E_MAIL_FORMATTER (e_extension_get_extensible (extension)); + + header_config_list = gconf_client_get_list ( + client, "/apps/evolution/mail/display/headers", + GCONF_VALUE_STRING, NULL); + + e_mail_formatter_clear_headers (formatter); + for (p = header_config_list; p; p = g_slist_next (p)) { + EMailReaderHeader *h; + gchar *xml = (gchar *) p->data; + + h = e_mail_reader_header_from_xml (xml); + if (h && h->enabled) + e_mail_formatter_add_header ( + formatter, h->name, NULL, + E_MAIL_FORMATTER_HEADER_FLAG_BOLD); + + e_mail_reader_header_free (h); + } + + if (!header_config_list) + e_mail_formatter_set_default_headers (formatter); + + g_slist_foreach (header_config_list, (GFunc) g_free, NULL); + g_slist_free (header_config_list); +} + +static void +remove_header_notify_cb (gpointer data) +{ + GConfClient *client; + guint notify_id; + + notify_id = GPOINTER_TO_INT (data); + g_return_if_fail (notify_id != 0); + + client = gconf_client_get_default (); + gconf_client_notify_remove (client, notify_id); + gconf_client_remove_dir (client, "/apps/evolution/mail/display", NULL); + g_object_unref (client); +} + +static void mail_config_format_html_constructed (GObject *object) { EExtension *extension; EExtensible *extensible; EShellSettings *shell_settings; EShell *shell; + GConfClient *client; + guint notify_id; extension = E_EXTENSION (object); extensible = e_extension_get_extensible (extension); @@ -81,6 +139,23 @@ mail_config_format_html_constructed (GObject *object) extensible, "animate-images", G_BINDING_SYNC_CREATE); + + client = gconf_client_get_default (); + gconf_client_add_dir ( + client, "/apps/evolution/mail/display", + GCONF_CLIENT_PRELOAD_NONE, NULL); + notify_id = gconf_client_notify_add ( + client, "/apps/evolution/mail/display/headers", + (GConfClientNotifyFunc) headers_changed_cb, + object, NULL, NULL); + + g_object_set_data_full ( + G_OBJECT (extensible), "reader-header-notify-id", + GINT_TO_POINTER (notify_id), remove_header_notify_cb); + + /* Initial synchronization */ + headers_changed_cb (client, 0, NULL, object); + /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (parent_class)->constructed (object); } |