From e9ea8a567cc85027ef7dcef7ba3ad03044677793 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 22 Apr 2010 18:28:17 -0400 Subject: Work around another dropped gnome-icon-theme icon. mail-mark-notjunk -> mail-mark-not-junk --- mail/e-mail-reader.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index d238d500a9..8adc94536e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1292,8 +1292,8 @@ static GtkActionEntry mail_reader_entries[] = { N_("Mark the selected messages as junk"), G_CALLBACK (action_mail_mark_junk_cb) }, - { "mail-mark-notjunk", - "mail-mark-notjunk", + { "mail-mark-not-junk", + "mail-mark-not-junk", N_("_Not Junk"), "j", N_("Mark the selected messages as not being junk"), @@ -1602,9 +1602,9 @@ static EPopupActionEntry mail_reader_popup_entries[] = { N_("Mark as _Junk"), "mail-mark-junk" }, - { "mail-popup-mark-notjunk", + { "mail-popup-mark-not-junk", N_("Mark as _Not Junk"), - "mail-mark-notjunk" }, + "mail-mark-not-junk" }, { "mail-popup-mark-read", N_("Mar_k as Read"), @@ -2316,7 +2316,7 @@ mail_reader_update_actions (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); - action_name = "mail-mark-notjunk"; + action_name = "mail-mark-not-junk"; sensitive = selection_has_junk_messages; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); -- cgit v1.2.3 From 76735b58fcbce6fa39fd73d765786790307a6abb Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 26 Apr 2010 16:43:15 +0200 Subject: Bug #603418 - Custom headers not displayed in message preview --- mail/e-mail-browser.c | 2 + mail/e-mail-reader-utils.c | 186 ++++++++++++++++++++++++++++++++++++ mail/e-mail-reader-utils.h | 15 +++ modules/mail/e-mail-shell-content.c | 3 + modules/mail/em-mailer-prefs.c | 128 ++----------------------- modules/mail/em-mailer-prefs.h | 12 --- 6 files changed, 216 insertions(+), 130 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c index 78dd91b5c2..aaf4f789d6 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -619,6 +619,8 @@ mail_browser_constructed (GObject *object) id = "org.gnome.evolution.mail.browser"; e_plugin_ui_register_manager (ui_manager, id, object); e_plugin_ui_enable_manager (ui_manager, id); + + e_mail_reader_connect_headers (E_MAIL_READER (reader)); } static gboolean diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c index b525345d4a..ab72b364c7 100644 --- a/mail/e-mail-reader-utils.c +++ b/mail/e-mail-reader-utils.c @@ -24,6 +24,7 @@ #include "e-mail-reader-utils.h" #include +#include #include #include #include @@ -37,6 +38,7 @@ #include "mail/em-format-html-print.h" #include "mail/em-utils.h" #include "mail/mail-autofilter.h" +#include "mail/mail-config.h" #include "mail/mail-ops.h" #include "mail/mail-tools.h" #include "mail/mail-vfolder.h" @@ -556,3 +558,187 @@ e_mail_reader_create_vfolder_from_selected (EMailReader *reader, em_utils_uids_free (uids); } + +static EMailReaderHeader * +emr_header_from_xmldoc (xmlDocPtr doc) +{ + EMailReaderHeader *h; + xmlNodePtr root; + xmlChar *name; + + if (doc == NULL) + return NULL; + + root = doc->children; + if (strcmp ((gchar *)root->name, "header") != 0) + return NULL; + + name = xmlGetProp (root, (const guchar *)"name"); + if (name == NULL) + return NULL; + + h = g_malloc0 (sizeof (EMailReaderHeader)); + h->name = g_strdup ((gchar *)name); + xmlFree (name); + + if (xmlHasProp (root, (const guchar *)"enabled")) + h->enabled = 1; + else + h->enabled = 0; + + return h; +} + +/** + * e_mail_reader_header_from_xml + * @xml: XML configuration data + * + * Parses passed XML data, which should be of + * the format
, and + * returns a EMailReaderHeader structure, or NULL if there + * is an error. + **/ +EMailReaderHeader * +e_mail_reader_header_from_xml (const gchar *xml) +{ + EMailReaderHeader *header; + xmlDocPtr doc; + + if (!(doc = xmlParseDoc ((guchar *) xml))) + return NULL; + + header = emr_header_from_xmldoc (doc); + xmlFreeDoc (doc); + + return header; +} + +/** + * e_mail_reader_header_to_xml + * @header: header from which to generate XML + * + * Returns the passed header as a XML structure, + * or NULL on error + */ +gchar * +e_mail_reader_header_to_xml (EMailReaderHeader *header) +{ + xmlDocPtr doc; + xmlNodePtr root; + xmlChar *xml; + gchar *out; + gint size; + + g_return_val_if_fail (header != NULL, NULL); + g_return_val_if_fail (header->name != NULL, NULL); + + doc = xmlNewDoc ((const guchar *)"1.0"); + + root = xmlNewDocNode (doc, NULL, (const guchar *)"header", NULL); + xmlSetProp (root, (const guchar *)"name", (guchar *)header->name); + if (header->enabled) + xmlSetProp (root, (const guchar *)"enabled", NULL); + + xmlDocSetRootElement (doc, root); + xmlDocDumpMemory (doc, &xml, &size); + xmlFreeDoc (doc); + + out = g_malloc (size + 1); + memcpy (out, xml, size); + out[size] = '\0'; + xmlFree (xml); + + return out; +} + +/** + * e_mail_reader_header_free + * @header: header to free + * + * Frees the memory associated with the passed header + * structure. + */ +void +e_mail_reader_header_free (EMailReaderHeader *header) +{ + if (header == NULL) + return; + + g_free (header->name); + g_free (header); +} + +static void +headers_changed_cb (GConfClient *gconf, guint cnxn_id, GConfEntry *entry, EMailReader *reader) +{ + EMFormat *emf; + EMFormatHTMLDisplay *emfhd; + GSList *header_config_list, *p; + + g_return_if_fail (gconf != NULL); + g_return_if_fail (reader != NULL); + + emfhd = e_mail_reader_get_html_display (reader); + if (!emfhd) + return; + + emf = EM_FORMAT (emfhd); + g_return_if_fail (emf != NULL); + + header_config_list = gconf_client_get_list (gconf, "/apps/evolution/mail/display/headers", GCONF_VALUE_STRING, NULL); + em_format_clear_headers (emf); + 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) { + em_format_add_header (emf, h->name, EM_FORMAT_HEADER_BOLD); + } + + e_mail_reader_header_free (h); + } + + g_slist_foreach(header_config_list, (GFunc) g_free, NULL); + g_slist_free(header_config_list); + + /* force a redraw */ + if (emf->message) + em_format_redraw (emf); +} + +static void +remove_header_notify_cb (gpointer data) +{ + GConfClient *gconf = mail_config_get_gconf_client (); + guint notify_id; + + g_return_if_fail (gconf != NULL); + + notify_id = GPOINTER_TO_INT (data); + g_return_if_fail (notify_id != 0); + + gconf_client_notify_remove (gconf, notify_id); + gconf_client_remove_dir (gconf, "/apps/evolution/mail/display", NULL); +} + +/** + * e_mail_reader_connect_headers + * @reader: an #EMailReader + * + * Connects @reader to listening for changes in headers and + * updates the EMFormat whenever it changes and on this call too. + **/ +void +e_mail_reader_connect_headers (EMailReader *reader) +{ + GConfClient *gconf = mail_config_get_gconf_client (); + guint notify_id; + + gconf_client_add_dir (gconf, "/apps/evolution/mail/display", GCONF_CLIENT_PRELOAD_NONE, NULL); + notify_id = gconf_client_notify_add (gconf, "/apps/evolution/mail/display/headers", (GConfClientNotifyFunc) headers_changed_cb, reader, NULL, NULL); + + g_object_set_data_full (G_OBJECT (reader), "reader-header-notify-id", GINT_TO_POINTER (notify_id), remove_header_notify_cb); + + headers_changed_cb (gconf, 0, NULL, reader); +} diff --git a/mail/e-mail-reader-utils.h b/mail/e-mail-reader-utils.h index 46c3ea7345..72ad761cc3 100644 --- a/mail/e-mail-reader-utils.h +++ b/mail/e-mail-reader-utils.h @@ -28,6 +28,14 @@ G_BEGIN_DECLS +typedef struct _EMailReaderHeader EMailReaderHeader; + +struct _EMailReaderHeader { + gchar *name; + guint enabled:1; + guint is_default:1; +}; + void e_mail_reader_activate (EMailReader *reader, const gchar *action_name); gboolean e_mail_reader_confirm_delete (EMailReader *reader); @@ -51,6 +59,13 @@ void e_mail_reader_create_vfolder_from_selected (EMailReader *reader, gint filter_type); +EMailReaderHeader * + e_mail_reader_header_from_xml (const gchar *xml); +gchar * e_mail_reader_header_to_xml (EMailReaderHeader *header); +void e_mail_reader_header_free (EMailReaderHeader *header); + +void e_mail_reader_connect_headers (EMailReader *reader); + G_END_DECLS #endif /* E_MAIL_READER_UTILS_H */ diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index 17eb613b32..9ac74a48ea 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -40,6 +40,7 @@ #include "message-list.h" #include "e-mail-reader.h" +#include "e-mail-reader-utils.h" #include "e-mail-shell-backend.h" #include "e-mail-shell-view-actions.h" @@ -461,6 +462,8 @@ mail_shell_content_constructed (GObject *object) message_list, "message-selected", G_CALLBACK (mail_shell_content_message_selected_cb), shell_content); + + e_mail_reader_connect_headers (reader); } static guint32 diff --git a/modules/mail/em-mailer-prefs.c b/modules/mail/em-mailer-prefs.c index f32fbbf284..89a7f0acc9 100644 --- a/modules/mail/em-mailer-prefs.c +++ b/modules/mail/em-mailer-prefs.c @@ -45,6 +45,7 @@ #include "widgets/misc/e-charset-combo-box.h" #include "e-mail-label-manager.h" +#include "e-mail-reader-utils.h" #include "mail-config.h" #include "em-folder-selection-button.h" #include "em-junk.h" @@ -416,7 +417,7 @@ emmp_save_headers (EMMailerPrefs *prefs) header_list = NULL; valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (prefs->header_list_store), &iter); while (valid) { - struct _EMMailerPrefsHeader h; + struct _EMailReaderHeader h; gboolean enabled; gchar *xml; @@ -426,7 +427,7 @@ emmp_save_headers (EMMailerPrefs *prefs) -1); h.enabled = enabled; - if ((xml = em_mailer_prefs_header_to_xml (&h))) + if ((xml = e_mail_reader_header_to_xml (&h))) header_list = g_slist_append (header_list, xml); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (prefs->header_list_store), &iter); @@ -1085,9 +1086,9 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs, header_add_list = NULL; default_header_hash = g_hash_table_new (g_str_hash, g_str_equal); for (i = 0; i < G_N_ELEMENTS (default_headers); i++) { - struct _EMMailerPrefsHeader *h; + EMailReaderHeader *h; - h = g_malloc (sizeof (struct _EMMailerPrefsHeader)); + h = g_malloc (sizeof (EMailReaderHeader)); h->is_default = TRUE; h->name = g_strdup (default_headers[i]); h->enabled = strcmp ((gchar *)default_headers[i], "x-evolution-mailer") != 0; @@ -1099,15 +1100,15 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs, header_config_list = gconf_client_get_list (prefs->gconf, "/apps/evolution/mail/display/headers", GCONF_VALUE_STRING, NULL); p = header_config_list; while (p) { - struct _EMMailerPrefsHeader *h, *def; + EMailReaderHeader *h, *def; gchar *xml = (gchar *) p->data; - h = em_mailer_prefs_header_from_xml (xml); + h = e_mail_reader_header_from_xml (xml); if (h) { def = g_hash_table_lookup (default_header_hash, h->name); if (def) { def->enabled = h->enabled; - em_mailer_prefs_header_free (h); + e_mail_reader_header_free (h); } else { h->is_default = FALSE; header_add_list = g_slist_append (header_add_list, h); @@ -1123,7 +1124,7 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs, p = header_add_list; while (p) { - struct _EMMailerPrefsHeader *h = (struct _EMMailerPrefsHeader *) p->data; + struct _EMailReaderHeader *h = (struct _EMailReaderHeader *) p->data; const gchar *name; if (g_ascii_strcasecmp (h->name, EM_FORMAT_HEADER_XMAILER) == 0) @@ -1139,7 +1140,7 @@ em_mailer_prefs_construct (EMMailerPrefs *prefs, HEADER_LIST_HEADER_COLUMN, h->name, -1); - em_mailer_prefs_header_free (h); + e_mail_reader_header_free (h); p = p->next; } @@ -1227,112 +1228,3 @@ em_mailer_prefs_new (EShell *shell) return GTK_WIDGET (new); } - -static struct _EMMailerPrefsHeader * -emmp_header_from_xmldoc (xmlDocPtr doc) -{ - struct _EMMailerPrefsHeader *h; - xmlNodePtr root; - xmlChar *name; - - if (doc == NULL) - return NULL; - - root = doc->children; - if (strcmp ((gchar *)root->name, "header") != 0) - return NULL; - - name = xmlGetProp (root, (const guchar *)"name"); - if (name == NULL) - return NULL; - - h = g_malloc0 (sizeof (struct _EMMailerPrefsHeader)); - h->name = g_strdup ((gchar *)name); - xmlFree (name); - - if (xmlHasProp (root, (const guchar *)"enabled")) - h->enabled = 1; - else - h->enabled = 0; - - return h; -} - -/** - * em_mailer_prefs_header_from_xml - * @xml: XML configuration data - * - * Parses passed XML data, which should be of - * the format
, and - * returns a EMMailerPrefs structure, or NULL if there - * is an error. - **/ -struct _EMMailerPrefsHeader * -em_mailer_prefs_header_from_xml (const gchar *xml) -{ - struct _EMMailerPrefsHeader *header; - xmlDocPtr doc; - - if (!(doc = xmlParseDoc ((guchar *) xml))) - return NULL; - - header = emmp_header_from_xmldoc (doc); - xmlFreeDoc (doc); - - return header; -} - -/** - * em_mailer_prefs_header_free - * @header: header to free - * - * Frees the memory associated with the passed header - * structure. - */ -void -em_mailer_prefs_header_free (struct _EMMailerPrefsHeader *header) -{ - if (header == NULL) - return; - - g_free (header->name); - g_free (header); -} - -/** - * em_mailer_prefs_header_to_xml - * @header: header from which to generate XML - * - * Returns the passed header as a XML structure, - * or NULL on error - */ -gchar * -em_mailer_prefs_header_to_xml (struct _EMMailerPrefsHeader *header) -{ - xmlDocPtr doc; - xmlNodePtr root; - xmlChar *xml; - gchar *out; - gint size; - - g_return_val_if_fail (header != NULL, NULL); - g_return_val_if_fail (header->name != NULL, NULL); - - doc = xmlNewDoc ((const guchar *)"1.0"); - - root = xmlNewDocNode (doc, NULL, (const guchar *)"header", NULL); - xmlSetProp (root, (const guchar *)"name", (guchar *)header->name); - if (header->enabled) - xmlSetProp (root, (const guchar *)"enabled", NULL); - - xmlDocSetRootElement (doc, root); - xmlDocDumpMemory (doc, &xml, &size); - xmlFreeDoc (doc); - - out = g_malloc (size + 1); - memcpy (out, xml, size); - out[size] = '\0'; - xmlFree (xml); - - return out; -} diff --git a/modules/mail/em-mailer-prefs.h b/modules/mail/em-mailer-prefs.h index 8ad6ad2f64..db77493416 100644 --- a/modules/mail/em-mailer-prefs.h +++ b/modules/mail/em-mailer-prefs.h @@ -50,13 +50,6 @@ G_BEGIN_DECLS typedef struct _EMMailerPrefs EMMailerPrefs; typedef struct _EMMailerPrefsClass EMMailerPrefsClass; -typedef struct _EMMailerPrefsHeader EMMailerPrefsHeader; - -struct _EMMailerPrefsHeader { - gchar *name; - guint enabled:1; - guint is_default:1; -}; struct _EMMailerPrefs { GtkVBox parent_object; @@ -120,11 +113,6 @@ GtkWidget * create_combo_text_widget (void); GtkWidget * em_mailer_prefs_new (EShell *shell); -EMMailerPrefsHeader * - em_mailer_prefs_header_from_xml (const gchar *xml); -gchar * em_mailer_prefs_header_to_xml (EMMailerPrefsHeader *header); -void em_mailer_prefs_header_free (EMMailerPrefsHeader *header); - G_END_DECLS #endif /* EM_MAILER_PREFS_H */ -- cgit v1.2.3 From 020e16efd96e0b474364cd66dfe963891d503b7c Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 26 Apr 2010 18:07:54 +0200 Subject: Use default headers when none stored to display in mailer As part of bug #603418, to fix a corner case --- mail/e-mail-reader-utils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c index ab72b364c7..addc126285 100644 --- a/mail/e-mail-reader-utils.c +++ b/mail/e-mail-reader-utils.c @@ -699,8 +699,11 @@ headers_changed_cb (GConfClient *gconf, guint cnxn_id, GConfEntry *entry, EMailR e_mail_reader_header_free (h); } - g_slist_foreach(header_config_list, (GFunc) g_free, NULL); - g_slist_free(header_config_list); + if (!header_config_list) + em_format_default_headers (emf); + + g_slist_foreach (header_config_list, (GFunc) g_free, NULL); + g_slist_free (header_config_list); /* force a redraw */ if (emf->message) -- cgit v1.2.3 From be8c081a728fe8a1e97e615f443dccb5f824b19f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 29 Apr 2010 21:08:09 -0400 Subject: Revert "Work around another dropped gnome-icon-theme icon." This reverts commit edf6286a38279e6db82dee4da50e94c587f06e02. gnome-icon-theme got it wrong, not us. See bug #616954. --- mail/e-mail-reader.c | 10 +++++----- modules/mail/e-mail-shell-view-actions.c | 2 +- modules/mail/e-mail-shell-view-actions.h | 4 ++-- ui/evolution-mail-reader.ui | 4 ++-- ui/evolution-mail.ui | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 8adc94536e..d238d500a9 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1292,8 +1292,8 @@ static GtkActionEntry mail_reader_entries[] = { N_("Mark the selected messages as junk"), G_CALLBACK (action_mail_mark_junk_cb) }, - { "mail-mark-not-junk", - "mail-mark-not-junk", + { "mail-mark-notjunk", + "mail-mark-notjunk", N_("_Not Junk"), "j", N_("Mark the selected messages as not being junk"), @@ -1602,9 +1602,9 @@ static EPopupActionEntry mail_reader_popup_entries[] = { N_("Mark as _Junk"), "mail-mark-junk" }, - { "mail-popup-mark-not-junk", + { "mail-popup-mark-notjunk", N_("Mark as _Not Junk"), - "mail-mark-not-junk" }, + "mail-mark-notjunk" }, { "mail-popup-mark-read", N_("Mar_k as Read"), @@ -2316,7 +2316,7 @@ mail_reader_update_actions (EMailReader *reader) action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); - action_name = "mail-mark-not-junk"; + action_name = "mail-mark-notjunk"; sensitive = selection_has_junk_messages; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); diff --git a/modules/mail/e-mail-shell-view-actions.c b/modules/mail/e-mail-shell-view-actions.c index efd3f64d02..732b65060f 100644 --- a/modules/mail/e-mail-shell-view-actions.c +++ b/modules/mail/e-mail-shell-view-actions.c @@ -1223,7 +1223,7 @@ static GtkRadioActionEntry mail_filter_entries[] = { MAIL_FILTER_LAST_5_DAYS_MESSAGES }, { "mail-filter-messages-not-junk", - "mail-mark-not-junk", + "mail-mark-notjunk", N_("Messages Not Junk"), NULL, NULL, /* XXX Add a tooltip! */ diff --git a/modules/mail/e-mail-shell-view-actions.h b/modules/mail/e-mail-shell-view-actions.h index addd67452b..eb11f46013 100644 --- a/modules/mail/e-mail-shell-view-actions.h +++ b/modules/mail/e-mail-shell-view-actions.h @@ -115,8 +115,8 @@ E_SHELL_WINDOW_ACTION ((window), "mail-mark-important") #define E_SHELL_WINDOW_ACTION_MAIL_MARK_JUNK(window) \ E_SHELL_WINDOW_ACTION ((window), "mail-mark-junk") -#define E_SHELL_WINDOW_ACTION_MAIL_MARK_NOT_JUNK(window) \ - E_SHELL_WINDOW_ACTION ((window), "mail-mark-not-junk") +#define E_SHELL_WINDOW_ACTION_MAIL_MARK_NOTJUNK(window) \ + E_SHELL_WINDOW_ACTION ((window), "mail-mark-notjunk") #define E_SHELL_WINDOW_ACTION_MAIL_MARK_READ(window) \ E_SHELL_WINDOW_ACTION ((window), "mail-mark-read") #define E_SHELL_WINDOW_ACTION_MAIL_MARK_UNIMPORTANT(window) \ diff --git a/ui/evolution-mail-reader.ui b/ui/evolution-mail-reader.ui index 53cb8845d3..ad0b401676 100644 --- a/ui/evolution-mail-reader.ui +++ b/ui/evolution-mail-reader.ui @@ -82,7 +82,7 @@ - + @@ -127,7 +127,7 @@ #endif - + diff --git a/ui/evolution-mail.ui b/ui/evolution-mail.ui index 256d0f2006..849d579eb6 100644 --- a/ui/evolution-mail.ui +++ b/ui/evolution-mail.ui @@ -109,7 +109,7 @@ - + -- cgit v1.2.3 From 0fb409b6c5c18c43b49bf18f4a52c9883f6e2ab2 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 3 May 2010 21:39:09 +0200 Subject: Bug #611560 - 'Mark as junk' should be disabled in junk folder --- mail/e-mail-reader.c | 6 +++++- mail/e-mail-reader.h | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'mail') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index d238d500a9..53d45fd2e5 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2314,7 +2314,7 @@ mail_reader_update_actions (EMailReader *reader) action_name = "mail-mark-junk"; sensitive = selection_has_not_junk_messages; action = e_mail_reader_get_action (reader, action_name); - gtk_action_set_sensitive (action, sensitive); + gtk_action_set_sensitive (action, sensitive && !(state & E_MAIL_READER_FOLDER_IS_JUNK)); action_name = "mail-mark-notjunk"; sensitive = selection_has_junk_messages; @@ -2758,6 +2758,7 @@ e_mail_reader_check_state (EMailReader *reader) gboolean drafts_or_outbox; gboolean store_supports_vjunk = FALSE; gboolean is_mailing_list; + gboolean is_junk_folder = FALSE; guint32 state = 0; guint ii; @@ -2770,6 +2771,7 @@ e_mail_reader_check_state (EMailReader *reader) if (folder != NULL) { store = CAMEL_STORE (folder->parent_store); store_supports_vjunk = (store->flags & CAMEL_STORE_VJUNK); + is_junk_folder = (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) != 0; } drafts_or_outbox = @@ -2885,6 +2887,8 @@ e_mail_reader_check_state (EMailReader *reader) state |= E_MAIL_READER_SELECTION_HAS_UNREAD; if (is_mailing_list) state |= E_MAIL_READER_SELECTION_IS_MAILING_LIST; + if (is_junk_folder) + state |= E_MAIL_READER_FOLDER_IS_JUNK; em_utils_uids_free (uids); diff --git a/mail/e-mail-reader.h b/mail/e-mail-reader.h index a79d7f5274..b724d6e19b 100644 --- a/mail/e-mail-reader.h +++ b/mail/e-mail-reader.h @@ -75,7 +75,8 @@ enum { E_MAIL_READER_SELECTION_HAS_UNDELETED = 1 << 12, E_MAIL_READER_SELECTION_HAS_UNIMPORTANT = 1 << 13, E_MAIL_READER_SELECTION_HAS_UNREAD = 1 << 14, - E_MAIL_READER_SELECTION_IS_MAILING_LIST = 1 << 15 + E_MAIL_READER_SELECTION_IS_MAILING_LIST = 1 << 15, + E_MAIL_READER_FOLDER_IS_JUNK = 1 << 16 }; struct _EMailReaderIface { -- cgit v1.2.3 From 4993d81486d703d093970ce3ee1511af6108f0fd Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 3 May 2010 22:36:26 +0200 Subject: Bug #593890 - New folder window is not in focus in filter dialog --- mail/em-folder-utils.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mail') diff --git a/mail/em-folder-utils.c b/mail/em-folder-utils.c index c840644870..ad1b929e9d 100644 --- a/mail/em-folder-utils.c +++ b/mail/em-folder-utils.c @@ -672,7 +672,11 @@ em_folder_utils_create_folder (CamelFolderInfo *folderinfo, EMFolderTree *emft, if (folderinfo != NULL) em_folder_selector_set_selected ((EMFolderSelector *) dialog, folderinfo->uri); g_signal_connect (dialog, "response", G_CALLBACK (emfu_popup_new_folder_response), emft); - gtk_widget_show (dialog); + + if (!parent || !GTK_IS_DIALOG (parent)) + gtk_widget_show (dialog); + else + gtk_dialog_run (GTK_DIALOG (dialog)); } struct _folder_unsub_t { -- cgit v1.2.3 From ae66b7f97a6b6d3009aea4b905066b417833fe96 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 10 May 2010 19:06:07 +0200 Subject: Bug #616823 - Evolution allows moving IMAP Inbox to other folders --- mail/em-folder-tree.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'mail') diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index b1f204df4b..fdd1b88ee0 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -1786,11 +1786,14 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT GtkTreePath *src_path = gtk_tree_row_reference_get_path(p->drag_row); if (src_path) { + guint32 src_flags = 0; + if (gtk_tree_model_get_iter (model, &iter, src_path)) gtk_tree_model_get ( model, &iter, COL_POINTER_CAMEL_STORE, &sstore, - COL_STRING_URI, &src_uri, -1); + COL_STRING_URI, &src_uri, + COL_UINT_FLAGS, &src_flags, -1); /* can't dnd onto itself or below itself - bad things happen, no point dragging to where we were either */ @@ -1803,6 +1806,26 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT } gtk_tree_path_free(src_path); + + if ((src_flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_INBOX || (src_flags & CAMEL_FOLDER_SYSTEM) != 0) { + /* allow only copy of the Inbox and other system folders */ + GdkAtom xfolder; + + /* TODO: not sure if this is legal, but it works, force copy for special local folders */ + context->suggested_action = GDK_ACTION_COPY; + context->actions = GDK_ACTION_COPY; + xfolder = drop_atoms[DND_DROP_TYPE_FOLDER]; + while (targets != NULL) { + if (targets->data == (gpointer) xfolder) { + atom = xfolder; + goto done; + } + + targets = targets->next; + } + + goto done; + } } } @@ -1824,6 +1847,7 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT /* TODO: not sure if this is legal, but it works, force copy for special local folders */ context->suggested_action = GDK_ACTION_COPY; + context->actions = GDK_ACTION_COPY; xfolder = drop_atoms[DND_DROP_TYPE_FOLDER]; while (targets != NULL) { if (targets->data == (gpointer) xfolder) { -- cgit v1.2.3