diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2011-01-22 06:40:22 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-06-30 00:41:21 +0800 |
commit | 15c32eafdb8a79152113559bd8a5e8f9e72f142c (patch) | |
tree | d5dfd5f6643eb578db480a31347d32ada4b7a4e8 /mail | |
parent | 042c0c5732a6d6144e9359ddb55f7c9e65f60010 (diff) | |
download | gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar.gz gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar.bz2 gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar.lz gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar.xz gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.tar.zst gsoc2013-evolution-15c32eafdb8a79152113559bd8a5e8f9e72f142c.zip |
Bug 640091 - Improve error handling during send post-processing
If a newly-composed message was successfully sent but an error occurred
during post-processing (outgoing filters or appending to a Sent folder),
close the composer window and show an alert in the main window.
Diffstat (limited to 'mail')
-rw-r--r-- | mail/e-mail-session-utils.c | 16 | ||||
-rw-r--r-- | mail/e-mail-session-utils.h | 7 | ||||
-rw-r--r-- | mail/em-composer-utils.c | 16 |
3 files changed, 37 insertions, 2 deletions
diff --git a/mail/e-mail-session-utils.c b/mail/e-mail-session-utils.c index f91bc73455..f77f1cac73 100644 --- a/mail/e-mail-session-utils.c +++ b/mail/e-mail-session-utils.c @@ -101,6 +101,19 @@ async_context_free (AsyncContext *context) g_slice_free (AsyncContext, context); } +GQuark +e_mail_error_quark (void) +{ + static GQuark quark = 0; + + if (G_UNLIKELY (quark == 0)) { + const gchar *string = "e-mail-error-quark"; + quark = g_quark_from_static_string (string); + } + + return quark; +} + static void mail_session_handle_draft_headers_thread (GSimpleAsyncResult *simple, EMailSession *session, @@ -590,7 +603,8 @@ exit: /* Stuff the accumulated error messages in a GError. */ } else if (error_messages->len > 0) { g_simple_async_result_set_error ( - simple, CAMEL_ERROR, CAMEL_ERROR_GENERIC, + simple, E_MAIL_ERROR, + E_MAIL_ERROR_POST_PROCESSING, "%s", error_messages->str); } diff --git a/mail/e-mail-session-utils.h b/mail/e-mail-session-utils.h index e7ec28dd2d..c59d27f335 100644 --- a/mail/e-mail-session-utils.h +++ b/mail/e-mail-session-utils.h @@ -23,8 +23,15 @@ #include <mail/e-mail-session.h> +#define E_MAIL_ERROR (e_mail_error_quark ()) + G_BEGIN_DECLS +typedef enum { + E_MAIL_ERROR_POST_PROCESSING +} EMailError; + +GQuark e_mail_error_quark (void) G_GNUC_CONST; gboolean e_mail_session_handle_draft_headers_sync (EMailSession *session, CamelMimeMessage *message, diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index 5dfa1ffa05..2668e2f1e0 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -489,7 +489,21 @@ composer_send_completed (EMailSession *session, goto exit; } - if (error != NULL) { + /* Post-processing errors are shown in the shell window. */ + if (g_error_matches (error, E_MAIL_ERROR, E_MAIL_ERROR_POST_PROCESSING)) { + EAlert *alert; + EShell *shell; + + shell = e_msg_composer_get_shell (context->composer); + + alert = e_alert_new ( + "mail-composer:send-post-processing-error", + error->message, NULL); + e_shell_submit_alert (shell, alert); + g_object_unref (alert); + + /* All other errors are shown in the composer window. */ + } else if (error != NULL) { gint response; /* Clear the activity bar before |