From f5e47561f995ca50f2bbd45b940e0a10100281a5 Mon Sep 17 00:00:00 2001
From: Matthew Barnes <mbarnes@redhat.com>
Date: Sun, 2 Jun 2013 11:03:34 -0400
Subject: EMailReader: Add a "composer-created" signal.

Emitted to indicate a composer window was created in response to a user
action on the EMailReader.  Examples of such actions include replying,
forwarding, and starting a new message.

If applicable, the source message (i.e. the message being replied to or
forwarded) is included in the signal emission.

New functions:

  e_mail_reader_composer_created()
---
 mail/em-composer-utils.c | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

(limited to 'mail/em-composer-utils.c')

diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 6c60925c3f..a849f2830f 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1545,6 +1545,7 @@ edit_messages_cb (GObject *source_object,
 	g_hash_table_iter_init (&iter, hash_table);
 
 	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		EMsgComposer *composer;
 		CamelMimeMessage *message;
 		const gchar *message_uid;
 
@@ -1556,9 +1557,12 @@ edit_messages_cb (GObject *source_object,
 
 		camel_medium_remove_header (CAMEL_MEDIUM (value), "X-Mailer");
 
-		em_utils_edit_message (
+		composer = em_utils_edit_message (
 			shell, folder, message, message_uid,
 			async_context->keep_signature);
+
+		e_mail_reader_composer_created (
+			async_context->reader, composer, message);
 	}
 
 	g_hash_table_unref (hash_table);
@@ -1775,6 +1779,8 @@ forward_attached_cb (GObject *source_object,
 	EActivity *activity;
 	EAlertSink *alert_sink;
 	CamelMimePart *part;
+	CamelDataWrapper *content;
+	EMsgComposer *composer;
 	gchar *subject = NULL;
 	AsyncContext *async_context;
 	GError *local_error = NULL;
@@ -1810,9 +1816,28 @@ forward_attached_cb (GObject *source_object,
 
 	backend = e_mail_reader_get_backend (async_context->reader);
 
-	forward_attached (
+	composer = forward_attached (
 		backend, folder, async_context->ptr_array, part, subject);
 
+	content = camel_medium_get_content (CAMEL_MEDIUM (part));
+	if (CAMEL_IS_MIME_MESSAGE (content)) {
+		e_mail_reader_composer_created (
+			async_context->reader, composer,
+			CAMEL_MIME_MESSAGE (content));
+	} else {
+		/* XXX What to do for the multipart/digest case?
+		 *     Extract the first message from the digest, or
+		 *     change the argument type to CamelMimePart and
+		 *     just pass the whole digest through?
+		 *
+		 *     This signal is primarily serving EMailBrowser,
+		 *     which can only forward one message at a time.
+		 *     So for the moment it doesn't matter, but still
+		 *     something to consider. */
+		e_mail_reader_composer_created (
+			async_context->reader, composer, NULL);
+	}
+
 	e_activity_set_state (activity, E_ACTIVITY_COMPLETED);
 
 	g_object_unref (part);
@@ -1991,15 +2016,19 @@ forward_got_messages_cb (GObject *source_object,
 	g_hash_table_iter_init (&iter, hash_table);
 
 	while (g_hash_table_iter_next (&iter, &key, &value)) {
+		EMsgComposer *composer;
 		CamelMimeMessage *message;
 		const gchar *message_uid;
 
 		message_uid = (const gchar *) key;
 		message = CAMEL_MIME_MESSAGE (value);
 
-		em_utils_forward_message (
+		composer = em_utils_forward_message (
 			backend, message, async_context->style,
 			folder, message_uid);
+
+		e_mail_reader_composer_created (
+			async_context->reader, composer, message);
 	}
 
 	g_hash_table_unref (hash_table);
-- 
cgit