evolution r35569 - trunk/mail



Author: abharath
Date: Mon Jun  2 05:00:46 2008
New Revision: 35569
URL: http://svn.gnome.org/viewvc/evolution?rev=35569&view=rev

Log:
Committing on behalf of  Milan Crha  <mcrha redhat com>

2008-05-29  Milan Crha  <mcrha redhat com>

       ** Fix for bug #525966

       * em-composer-utils.c: (composer_set_no_change):
       New helper function to set composers state properly to "no
       change".
       * em-composer-utils.c: (em_utils_compose_new_message),
       (em_utils_compose_new_message_with_mailto), (em_utils_post_to_folder),
       (em_utils_post_to_url), (edit_message), (forward_attached),
       (forward_non_attached), (em_utils_redirect_message),
       (em_utils_reply_to_message), (post_reply_to_message):
       Use the above helper function.
       * em-composer-utils.c: (reply_get_composer), (composer_set_body):
       Do not drop undo in the editor multiple times, do that only once.



Modified:
   trunk/mail/ChangeLog
   trunk/mail/em-composer-utils.c

Modified: trunk/mail/em-composer-utils.c
==============================================================================
--- trunk/mail/em-composer-utils.c	(original)
+++ trunk/mail/em-composer-utils.c	Mon Jun  2 05:00:46 2008
@@ -44,6 +44,7 @@
 #include "em-utils.h"
 #include "em-composer-utils.h"
 #include "composer/e-msg-composer.h"
+#include "composer/e-composer-autosave.h"
 #include "em-format-html.h"
 #include "em-format-quote.h"
 #include "em-event.h"
@@ -462,6 +463,22 @@
 };
 
 static void
+composer_set_no_change (EMsgComposer *composer, gboolean drop_undo)
+{
+	GtkhtmlEditor *editor;
+	
+	g_return_if_fail (composer != NULL);
+
+	editor = GTKHTML_EDITOR (composer);
+
+	if (drop_undo)
+		gtkhtml_editor_drop_undo (editor);
+
+	gtkhtml_editor_set_changed (editor, FALSE);
+	e_composer_autosave_set_saved (composer, TRUE);
+}
+
+static void
 save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *info, int ok,
 		 const char *appended_uid, void *user_data)
 {
@@ -471,6 +488,7 @@
 	if (!ok)
 		goto done;
 
+	/* do not set autosave saved to TRUE because e_msg_composer_save_draft doesn't do that too */
 	gtkhtml_editor_set_changed (GTKHTML_EDITOR (sdi->composer), FALSE);
 
 	if ((emcs = sdi->emcs) == NULL) {
@@ -664,15 +682,12 @@
 em_utils_compose_new_message (const char *fromuri)
 {
 	GtkWidget *composer;
-	GtkhtmlEditor *editor;
 
 	composer = (GtkWidget *) create_new_composer ("", fromuri, TRUE);
 	if (composer == NULL)
 		return;
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (E_MSG_COMPOSER (composer), TRUE);
 
 	gtk_widget_show (composer);
 }
@@ -689,7 +704,6 @@
 em_utils_compose_new_message_with_mailto (const char *url, const char *fromuri)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 	EComposerHeaderTable *table;
 	EAccount *account = NULL;
 
@@ -705,9 +719,7 @@
 	    && (account = mail_config_get_account_by_source_url(fromuri)))
 		e_composer_header_table_set_account_name (table, account->name);
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 
 	gtk_widget_show ((GtkWidget *) composer);
 	gdk_window_raise (((GtkWidget *) composer)->window);
@@ -725,7 +737,6 @@
 em_utils_post_to_folder (CamelFolder *folder)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 	EComposerHeaderTable *table;
 	EAccount *account;
 
@@ -752,9 +763,7 @@
 
 	em_composer_utils_setup_default_callbacks (composer);
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 
 	gtk_widget_show ((GtkWidget *) composer);
 	gdk_window_raise (((GtkWidget *) composer)->window);
@@ -772,7 +781,6 @@
 em_utils_post_to_url (const char *url)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 	EComposerHeaderTable *table;
 
 	composer = e_msg_composer_new_with_type (E_MSG_COMPOSER_POST);
@@ -788,9 +796,7 @@
 
 	em_composer_utils_setup_default_callbacks (composer);
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 
 	gtk_widget_show ((GtkWidget *) composer);
 }
@@ -801,14 +807,11 @@
 edit_message (CamelMimeMessage *message, CamelFolder *drafts, const char *uid)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 
 	composer = e_msg_composer_new_with_message (message);
 	em_composer_utils_setup_callbacks (composer, NULL, NULL, 0, 0, drafts, uid);
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 
 	gtk_widget_show (GTK_WIDGET (composer));
 }
@@ -924,7 +927,6 @@
 forward_attached (CamelFolder *folder, GPtrArray *uids, GPtrArray *messages, CamelMimePart *part, char *subject, const char *fromuri)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 
 	composer = create_new_composer (subject, fromuri, TRUE);
 	if (composer == NULL)
@@ -936,9 +938,7 @@
 	if (uids)
 		setup_forward_attached_callbacks (composer, folder, uids);
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 
 	gtk_widget_show (GTK_WIDGET (composer));
 }
@@ -987,7 +987,6 @@
 {
 	CamelMimeMessage *message;
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 	char *subject, *text;
 	int i;
 	guint32 flags;
@@ -1019,9 +1018,7 @@
 				if (uids && uids->pdata[i])
 					em_composer_utils_setup_callbacks (composer, folder, uids->pdata[i], CAMEL_MESSAGE_FORWARDED, CAMEL_MESSAGE_FORWARDED, NULL, NULL);
 
-				editor = GTKHTML_EDITOR (composer);
-				gtkhtml_editor_set_changed (editor, FALSE);
-				gtkhtml_editor_drop_undo (editor);
+				composer_set_no_change (composer, TRUE);
 
 				gtk_widget_show (GTK_WIDGET (composer));
 			}
@@ -1191,7 +1188,6 @@
 em_utils_redirect_message (CamelMimeMessage *message)
 {
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 
 	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message));
 
@@ -1199,9 +1195,7 @@
 
 	gtk_widget_show (GTK_WIDGET (composer));
 
-	editor = GTKHTML_EDITOR (composer);
-	gtkhtml_editor_set_changed (editor, FALSE);
-	gtkhtml_editor_drop_undo (editor);
+	composer_set_no_change (composer, TRUE);
 }
 
 static void
@@ -1595,8 +1589,6 @@
 		e_msg_composer_add_header (composer, "References", references);
 	}
 
-	gtkhtml_editor_drop_undo (GTKHTML_EDITOR (composer));
-
 	return composer;
 }
 
@@ -2027,8 +2019,6 @@
 		g_free (text);
 		break;
 	}
-
-	gtkhtml_editor_drop_undo (GTKHTML_EDITOR (composer));
 }
 
 struct _reply_data {
@@ -2142,9 +2132,9 @@
 
 	em_composer_utils_setup_callbacks (composer, folder, uid, flags, flags, NULL, NULL);
 
-	gtk_widget_show (GTK_WIDGET (composer));
+	composer_set_no_change (composer, TRUE);
 
-	gtkhtml_editor_set_changed (GTKHTML_EDITOR (composer), FALSE);
+	gtk_widget_show (GTK_WIDGET (composer));
 }
 
 /* Posting replies... */
@@ -2158,7 +2148,6 @@
 	EDestination **tov = NULL;
 	CamelFolder *real_folder;
 	EMsgComposer *composer;
-	GtkhtmlEditor *editor;
 	EComposerHeaderTable *table;
 	char *subject, *url;
 	EAccount *account;
@@ -2188,7 +2177,6 @@
 	get_reply_sender (message, to, NULL);
 
 	composer = e_msg_composer_new_with_type (E_MSG_COMPOSER_MAIL_POST);
-	editor = GTKHTML_EDITOR (composer);
 
 	/* construct the tov/ccv */
 	tov = em_utils_camel_address_to_destination (to);
@@ -2237,17 +2225,15 @@
 		e_msg_composer_add_header (composer, "References", references);
 	}
 
-	gtkhtml_editor_drop_undo (editor);
-
 	e_msg_composer_add_message_attachments (composer, message, TRUE);
 
 	composer_set_body (composer, message, NULL);
 
 	em_composer_utils_setup_callbacks (composer, real_folder, real_uid, flags, flags, NULL, NULL);
 
-	gtk_widget_show (GTK_WIDGET (composer));
+	composer_set_no_change (composer, TRUE);
 
-	gtkhtml_editor_set_changed (editor, FALSE);
+	gtk_widget_show (GTK_WIDGET (composer));
 
 	camel_object_unref (real_folder);
 	camel_object_unref(to);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]