evolution r35257 - branches/mbarnes-composer/composer
- From: mbarnes svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r35257 - branches/mbarnes-composer/composer
- Date: Thu, 27 Mar 2008 03:42:36 +0000 (GMT)
Author: mbarnes
Date: Thu Mar 27 03:42:35 2008
New Revision: 35257
URL: http://svn.gnome.org/viewvc/evolution?rev=35257&view=rev
Log:
Fix a crash when shutting down the autosave system.
Modified:
branches/mbarnes-composer/composer/e-composer-autosave.c
branches/mbarnes-composer/composer/e-composer-autosave.h
branches/mbarnes-composer/composer/e-msg-composer.c
Modified: branches/mbarnes-composer/composer/e-composer-autosave.c
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-autosave.c (original)
+++ branches/mbarnes-composer/composer/e-composer-autosave.c Thu Mar 27 03:42:35 2008
@@ -209,6 +209,26 @@
composer_autosave_timeout, NULL);
}
+void
+e_composer_autosave_unregister (EMsgComposer *composer)
+{
+ AutosaveState *state;
+
+ g_return_if_fail (E_IS_MSG_COMPOSER (composer));
+
+ state = g_object_get_data (G_OBJECT (composer), "autosave");
+ if (state == NULL || state->filename == NULL)
+ return;
+
+ if (e_composer_autosave_snapshot (composer)) {
+ close (state->fd);
+ g_unlink (state->filename);
+ } else
+ close (state->fd);
+
+ g_object_set_data (G_OBJECT (composer), "autosave", NULL);
+}
+
gboolean
e_composer_autosave_snapshot (EMsgComposer *composer)
{
Modified: branches/mbarnes-composer/composer/e-composer-autosave.h
==============================================================================
--- branches/mbarnes-composer/composer/e-composer-autosave.h (original)
+++ branches/mbarnes-composer/composer/e-composer-autosave.h Thu Mar 27 03:42:35 2008
@@ -9,6 +9,7 @@
GList * e_composer_autosave_find_orphans (GError **error);
void e_composer_autosave_register (EMsgComposer *composer);
+void e_composer_autosave_unregister (EMsgComposer *composer);
gboolean e_composer_autosave_snapshot (EMsgComposer *composer);
gint e_composer_autosave_get_fd (EMsgComposer *composer);
const gchar * e_composer_autosave_get_filename (EMsgComposer *composer);
Modified: branches/mbarnes-composer/composer/e-msg-composer.c
==============================================================================
--- branches/mbarnes-composer/composer/e-msg-composer.c (original)
+++ branches/mbarnes-composer/composer/e-msg-composer.c Thu Mar 27 03:42:35 2008
@@ -1527,29 +1527,6 @@
return composer;
}
-static void
-autosave_manager_unregister (EMsgComposer *composer)
-{
- const gchar *filename;
- gint fd;
-
- filename = e_composer_autosave_get_filename (composer);
- fd = e_composer_autosave_get_fd (composer);
-
- if (filename == NULL)
- return;
-
- /* only remove the file if we can successfully save it */
- /* FIXME this test could probably be more efficient */
- if (e_composer_autosave_snapshot (composer)) {
- /* Close before unlinking necessary on Win32 */
- close (fd);
- g_unlink (filename);
- } else {
- close (fd);
- }
-}
-
/* Menu callbacks. */
static void
menu_file_save_cb (BonoboUIComponent *uic,
@@ -2324,15 +2301,10 @@
{
EMsgComposer *composer = E_MSG_COMPOSER (object);
- /* When destroy () is called, the contents of the window
- * (including the remote editor control) will already have
- * been destroyed, so we have to do this here.
- */
- autosave_manager_unregister (composer);
-
+ e_composer_autosave_unregister (composer);
e_composer_private_dispose (composer);
- /* Chain up to parent's dispose () method. */
+ /* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@@ -2343,7 +2315,7 @@
e_composer_private_finalize (composer);
- /* Chain up to parent's finalize () method. */
+ /* Chain up to parent's finalize() method. */
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -2375,7 +2347,7 @@
g_object_unref (gconf);
}
- /* Chain up to parent's destroy () method. */
+ /* Chain up to parent's destroy() method. */
GTK_OBJECT_CLASS (parent_class)->destroy (object);
}
@@ -2956,7 +2928,7 @@
{
EComposerHeaderTable *table;
const gchar *subject;
- gint button;
+ gint response;
if (!e_msg_composer_is_dirty (composer) &&
!e_composer_autosave_get_saved (composer)) {
@@ -2970,12 +2942,28 @@
table = e_msg_composer_get_header_table (composer);
subject = e_composer_header_table_get_subject (table);
- button = e_error_run ((GtkWindow *)composer, "mail-composer:exit-unsaved",
- subject && subject[0] ? subject : _ ("Untitled Message"), NULL);
- e_composer_autosave_register (composer);
- e_msg_composer_check_autosave (GTK_WINDOW (composer));
+ if (subject == NULL || *subject == '\0')
+ subject = _("Untitled Message");
- composer->priv->has_changed = FALSE;
+ response = e_error_run (
+ GTK_WINDOW (composer),
+ "mail-composer:exit-unsaved",
+ subject, NULL);
+
+ switch (response) {
+ case GTK_RESPONSE_YES:
+ g_signal_emit (composer, signals[SAVE_DRAFT], 0, TRUE);
+ e_composer_autosave_set_saved (composer, FALSE);
+ e_msg_composer_unset_changed (composer);
+ break;
+
+ case GTK_RESPONSE_NO:
+ gtk_widget_destroy (GTK_WIDGET (composer));
+ break;
+
+ case GTK_RESPONSE_CANCEL:
+ break;
+ }
}
static EMsgComposer *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]