From c4071b0a1d38a478d3ba51c81af222cdeb4ed4fd Mon Sep 17 00:00:00 2001 From: Dan Vrátil Date: Fri, 8 Jun 2012 16:09:53 +0200 Subject: 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. --- modules/mail/e-mail-config-format-html.c | 75 ++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'modules/mail') 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,9 +27,65 @@ #include #include #include +#include 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) { @@ -37,6 +93,8 @@ mail_config_format_html_constructed (GObject *object) 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); } -- cgit