diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2008-04-09 10:00:45 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-04-09 10:00:45 +0800 |
commit | 534e5a1764bdbeb542cf3531c2575df451d8e572 (patch) | |
tree | cf340bb3975698b2cf1dfd61ac9bf6b10805bbc3 /composer/e-msg-composer.c | |
parent | fea1867db330edef4260cd057e1f73b61aacc6fa (diff) | |
download | gsoc2013-evolution-534e5a1764bdbeb542cf3531c2575df451d8e572.tar.gz gsoc2013-evolution-534e5a1764bdbeb542cf3531c2575df451d8e572.tar.zst gsoc2013-evolution-534e5a1764bdbeb542cf3531c2575df451d8e572.zip |
** Fixes bug #523413
2008-04-08 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #523413
* composer/e-msg-composer.c (msg_composer_dispose):
Use the 'application_exiting' private flag to determine whether
to tell e_composer_autosave_unregister() to delete the autosave
file.
* composer/e-msg-composer.c (msg_composer_class_init),
(e_msg_composer_save_draft):
Remove the 'quit' parameter from the 'save-draft' signal.
* composer/e-msg-composer.c (e_msg_composer_request_close_all):
Take an autosave snapshot before activating the CLOSE action,
and set the private 'application_exiting' flag. This should
avoid prompting the user before shutting down.
* composer/e-composer-actions.c (action_close_cb):
When electing to save a message before closing, hide the window
immediately. The callback function can then check the window's
visibility after the save is complete to know whether to destroy
the window.
* composer/e-composer-autosave.c (e_composer_autosave_unregister):
Add a 'delete_file' boolean parameter to determine whether to
delete the autosave file.
* composer/e-composer-private.h:
Add an 'application_exiting' flag.
* mail/em-composer-utils.c (save_draft_done):
Check the composer window's visibility to determine whether to
destroy the window. See the corresponding composer/ChangeLog
entry to get the full story.
* mail/em-composer-utils.c (em_utils_composer_save_draft_cb):
Remove the 'quit' parameter.
svn path=/trunk/; revision=35346
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r-- | composer/e-msg-composer.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 5b2d9526a7..ac9f452f07 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2150,8 +2150,15 @@ static void msg_composer_dispose (GObject *object) { EMsgComposer *composer = E_MSG_COMPOSER (object); + gboolean delete_file; + + /* If the application is exiting, keep the autosave file so we can + * restore it later. Otherwise we're just closing this composer + * window, and the CLOSE action has already handled any unsaved + * changes, so we can safely delete the autosave file. */ + delete_file = !composer->priv->application_exiting; + e_composer_autosave_unregister (composer, delete_file); - e_composer_autosave_unregister (composer); e_composer_private_dispose (composer); /* Chain up to parent's dispose() method. */ @@ -2709,9 +2716,8 @@ msg_composer_class_init (EMsgComposerClass *class) E_TYPE_MSG_COMPOSER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, - g_cclosure_marshal_VOID__BOOLEAN, - G_TYPE_NONE, 1, - G_TYPE_BOOLEAN); + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static void @@ -3744,7 +3750,7 @@ e_msg_composer_save_draft (EMsgComposer *composer) editor = GTKHTML_EDITOR (composer); - g_signal_emit (composer, signals[SAVE_DRAFT], 0, FALSE); + g_signal_emit (composer, signals[SAVE_DRAFT], 0); /* XXX This should be elsewhere. */ gtkhtml_editor_set_changed (editor, FALSE); @@ -4601,7 +4607,21 @@ e_msg_composer_request_close_all (void) for (iter = all_composers; iter != NULL; iter = next) { EMsgComposer *composer = iter->data; + + /* The CLOSE action will delete this list node, + * so grab the next one while we still can. */ next = iter->next; + + /* Try to autosave before closing. If it fails for + * some reason, the CLOSE action will still detect + * unsaved changes and prompt the user. + * + * FIXME If it /does/ prompt the user, the Cancel + * button will act the same as Discard Changes, + * which is misleading. + */ + composer->priv->application_exiting = TRUE; + e_composer_autosave_snapshot (composer); gtk_action_activate (ACTION (CLOSE)); } |