aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-11-18 19:24:10 +0800
committerMilan Crha <mcrha@redhat.com>2009-11-18 19:24:10 +0800
commitbd2c2a77bb891c2b269c7027820085dd6dbf5672 (patch)
tree9d5991a91119a26edbb98395d4f5bd285b3e8737
parent6611fab1c4f556f5b7d8dbf7602a6b43301935f6 (diff)
downloadgsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar.gz
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar.bz2
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar.lz
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar.xz
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.tar.zst
gsoc2013-evolution-bd2c2a77bb891c2b269c7027820085dd6dbf5672.zip
Bug #596566 - Crash on quit with composer window opened
-rw-r--r--composer/e-composer-autosave.c3
-rw-r--r--composer/e-msg-composer.c25
-rw-r--r--composer/e-msg-composer.h4
-rw-r--r--mail/mail-component.c7
4 files changed, 30 insertions, 9 deletions
diff --git a/composer/e-composer-autosave.c b/composer/e-composer-autosave.c
index bc4c92dcc4..f160a69a56 100644
--- a/composer/e-composer-autosave.c
+++ b/composer/e-composer-autosave.c
@@ -473,6 +473,9 @@ e_composer_autosave_snapshot_finish (EMsgComposer *composer,
g_simple_async_result_propagate_error (simple, error);
g_object_unref (simple);
+ if (e_msg_composer_is_exiting (composer))
+ e_msg_composer_close (composer);
+
return success;
}
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 64f565ddea..3bdec6903f 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -3931,12 +3931,12 @@ e_msg_composer_is_exiting (EMsgComposer *composer)
void
e_msg_composer_request_close (EMsgComposer *composer)
{
- g_return_val_if_fail (composer != NULL, FALSE);
+ g_return_if_fail (composer != NULL);
composer->priv->application_exiting = TRUE;
}
-gboolean
+void
e_msg_composer_request_close_all (void)
{
GSList *iter, *next;
@@ -3960,9 +3960,20 @@ e_msg_composer_request_close_all (void)
e_composer_autosave_snapshot_async (composer,
(GAsyncReadyCallback) e_composer_autosave_snapshot_finish,
NULL);
- gtk_action_activate (ACTION (CLOSE));
}
+}
+
+void
+e_msg_composer_close (EMsgComposer *composer)
+{
+ g_return_if_fail (composer != NULL);
+ gtk_action_activate (ACTION (CLOSE));
+}
+
+gboolean
+e_msg_composer_all_closed (void)
+{
return (all_composers == NULL);
}
@@ -4195,14 +4206,16 @@ e_save_spell_languages (GList *spell_languages)
}
}
-void e_msg_composer_set_mail_sent (EMsgComposer *composer, gboolean mail_sent)
+void
+e_msg_composer_set_mail_sent (EMsgComposer *composer, gboolean mail_sent)
{
- g_return_val_if_fail (composer != NULL, FALSE);
+ g_return_if_fail (composer != NULL);
composer->priv->mail_sent = mail_sent;
}
-gboolean e_msg_composer_get_mail_sent (EMsgComposer *composer)
+gboolean
+e_msg_composer_get_mail_sent (EMsgComposer *composer)
{
g_return_val_if_fail (composer != NULL, FALSE);
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index 93db807e23..1d8560c954 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -138,7 +138,9 @@ void e_msg_composer_add_message_attachments
gboolean just_inlines);
void e_msg_composer_request_close (EMsgComposer *composer);
-gboolean e_msg_composer_request_close_all(void);
+void e_msg_composer_request_close_all(void);
+void e_msg_composer_close (EMsgComposer *composer);
+gboolean e_msg_composer_all_closed (void);
EMsgComposer * e_msg_composer_load_from_file (const gchar *filename);
void e_msg_composer_check_autosave (GtkWindow *parent);
diff --git a/mail/mail-component.c b/mail/mail-component.c
index 95e14ea57d..faccc04762 100644
--- a/mail/mail-component.c
+++ b/mail/mail-component.c
@@ -829,8 +829,7 @@ impl_requestQuit(PortableServer_Servant servant, CORBA_Environment *ev)
CamelFolder *folder;
guint32 unsent;
- if (!e_msg_composer_request_close_all())
- return FALSE;
+ e_msg_composer_request_close_all ();
folder = mc_default_folders[MAIL_COMPONENT_FOLDER_OUTBOX].folder;
if (folder != NULL
@@ -921,6 +920,10 @@ impl_quit(PortableServer_Servant servant, CORBA_Environment *ev)
if (mc->priv->quit_count > 0 || mc->priv->mail_sync_in_progress > 0)
return FALSE;
+ /* messages are autosaved, there is no prompt for cancelling */
+ if (!e_msg_composer_all_closed ())
+ return FALSE;
+
mail_cancel_all();
mc->priv->quit_state = MC_QUIT_THREADS;