diff options
author | Dan Vrátil <dvratil@redhat.com> | 2012-06-08 22:09:53 +0800 |
---|---|---|
committer | Dan Vrátil <dvratil@redhat.com> | 2012-06-08 23:08:00 +0800 |
commit | c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd (patch) | |
tree | 52b0f8825f9defd6accf554c5b26ae1c8c7ead94 /modules/mail | |
parent | a601031be2fa34f3f860179c8448cc0b04d4bfa4 (diff) | |
download | gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar.gz gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar.bz2 gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar.lz gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar.xz gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.tar.zst gsoc2013-evolution-c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd.zip |
Fix displayed message headers
The new formatter was ignoring selected headers, always displaying
only From, To, Subject and Date (default headers).
Handling of the currently displayed headers has been moved to
EMailConfigFormatHTML extension, because it is related to
configuration of EMailFormatter, rather then EMailReader.
Diffstat (limited to 'modules/mail')
-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); } |