aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer.c
diff options
context:
space:
mode:
authorPhilip Withnall <bugzilla@tecnocode.co.uk>2009-08-07 10:32:55 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-08-07 11:05:45 +0800
commit35fadc2d399c6b647b48fbe6ecab4259dffc11f3 (patch)
treec3a378fd31994f373764ace7eb934c3e805cef70 /composer/e-msg-composer.c
parent052e89dd423b5ba2f394f55c2fcc48102e7b9bc3 (diff)
downloadgsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar.gz
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar.bz2
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar.lz
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar.xz
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.tar.zst
gsoc2013-evolution-35fadc2d399c6b647b48fbe6ecab4259dffc11f3.zip
Bug 590747 – Composer autosave can easily lose data
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r--composer/e-msg-composer.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 55bfc84492..1b2d5c665c 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1264,6 +1264,15 @@ set_editor_text (EMsgComposer *composer,
/* Commands. */
+static void
+autosave_load_draft_cb (EMsgComposer *composer, GAsyncResult *result,
+ gchar *filename)
+{
+ if (e_composer_autosave_snapshot_finish (composer, result, NULL))
+ g_unlink (filename);
+ g_free (filename);
+}
+
static EMsgComposer *
autosave_load_draft (const gchar *filename)
{
@@ -1284,8 +1293,13 @@ autosave_load_draft (const gchar *filename)
composer = e_msg_composer_new_with_message (msg);
if (composer) {
- if (e_composer_autosave_snapshot (composer))
- g_unlink (filename);
+ /* Mark the message as changed so it gets autosaved again, then
+ * we can safely remove the old autosave file in
+ * autosave_load_draft_cb */
+ gtkhtml_editor_set_changed (GTKHTML_EDITOR (composer), FALSE);
+ e_composer_autosave_snapshot_async (composer,
+ (GAsyncReadyCallback) autosave_load_draft_cb,
+ g_strdup (filename));
gtk_widget_show (GTK_WIDGET (composer));
}
@@ -3883,7 +3897,9 @@ e_msg_composer_request_close_all (void)
* which is misleading.
*/
composer->priv->application_exiting = TRUE;
- e_composer_autosave_snapshot (composer);
+ e_composer_autosave_snapshot_async (composer,
+ (GAsyncReadyCallback) e_composer_autosave_snapshot_finish,
+ NULL);
gtk_action_activate (ACTION (CLOSE));
}