aboutsummaryrefslogtreecommitdiffstats
path: root/composer
diff options
context:
space:
mode:
Diffstat (limited to 'composer')
-rw-r--r--composer/ChangeLog12
-rw-r--r--composer/e-msg-composer.c31
-rw-r--r--composer/e-msg-composer.h1
-rw-r--r--composer/evolution-composer.c13
4 files changed, 52 insertions, 5 deletions
diff --git a/composer/ChangeLog b/composer/ChangeLog
index 33ff23ef08..2e4e572644 100644
--- a/composer/ChangeLog
+++ b/composer/ChangeLog
@@ -1,3 +1,15 @@
+2001-10-29 Dan Winship <danw@ximian.com>
+
+ * evolution-composer.c (init): Set the (new) "no_body" flag on the
+ composer.
+ (impl_Composer_set_body_text): And unset it here.
+ (unset_no_body): And here (called if/when the composer is
+ realized).
+
+ * e-msg-composer.c (build_message): If the composer has the
+ "no_body" flag set, and a single attachment, promote that
+ attachment to be the message body.
+
2001-10-30 Radek Doulik <rodo@ximian.com>
* listener.c (reply_indent): simplified, requires new gtkhtml
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 50c4e608c8..b68d0e871f 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -280,6 +280,21 @@ add_inlined_images (EMsgComposer *composer, CamelMultipart *multipart)
}
}
+static void
+copy_headers (CamelMedium *dest, CamelMedium *src)
+{
+ CamelMediumHeader header;
+ GArray *headers;
+ int i;
+
+ headers = camel_medium_get_headers (src);
+ for (i = 0; i < headers->len; i++) {
+ header = g_array_index (headers, CamelMediumHeader, i);
+ camel_medium_set_header (dest, header.name, header.value);
+ }
+ camel_medium_free_headers (src, headers);
+}
+
/* This functions builds a CamelMimeMessage for the message that the user has
* composed in `composer'.
*/
@@ -299,7 +314,7 @@ build_message (EMsgComposer *composer)
CamelMultipart *body = NULL;
CamelMimePart *part;
CamelException ex;
- int i;
+ int i, num_attachments;
if (composer->persist_stream_interface == CORBA_OBJECT_NIL)
return NULL;
@@ -395,7 +410,8 @@ build_message (EMsgComposer *composer)
} else
current = plain;
- if (e_msg_composer_attachment_bar_get_num_attachments (attachment_bar)) {
+ num_attachments = e_msg_composer_attachment_bar_get_num_attachments (attachment_bar);
+ if (num_attachments) {
CamelMultipart *multipart = camel_multipart_new ();
/* Generate a random boundary. */
@@ -410,8 +426,15 @@ build_message (EMsgComposer *composer)
camel_object_unref (CAMEL_OBJECT (part));
e_msg_composer_attachment_bar_to_multipart (attachment_bar, multipart, composer->charset);
-
- current = CAMEL_DATA_WRAPPER (multipart);
+
+ if (composer->no_body && num_attachments == 1) {
+ part = camel_multipart_get_part (multipart, 1);
+ current = camel_medium_get_content_object (CAMEL_MEDIUM (part));
+ copy_headers (CAMEL_MEDIUM (new), CAMEL_MEDIUM (part));
+ camel_object_ref (CAMEL_OBJECT (current));
+ camel_object_unref (CAMEL_OBJECT (multipart));
+ } else
+ current = CAMEL_DATA_WRAPPER (multipart);
}
if (composer->pgp_sign || composer->pgp_encrypt) {
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index 941834d120..4e73509207 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -92,6 +92,7 @@ struct _EMsgComposer {
gboolean view_cc : 1;
gboolean view_subject : 1;
gboolean has_changed : 1;
+ gboolean no_body : 1;
gboolean in_signature_insert : 1;
};
diff --git a/composer/evolution-composer.c b/composer/evolution-composer.c
index c19f286a66..289a8a3765 100644
--- a/composer/evolution-composer.c
+++ b/composer/evolution-composer.c
@@ -109,6 +109,7 @@ impl_Composer_set_body_text (PortableServer_Servant servant,
composer = EVOLUTION_COMPOSER (bonobo_object);
e_msg_composer_set_body_text (composer->composer, text);
+ composer->composer->no_body = FALSE;
}
static void
@@ -244,13 +245,23 @@ class_init (EvolutionComposerClass *klass)
}
static void
+unset_no_body (EMsgComposer *composer, gpointer user_data)
+{
+ composer->no_body = FALSE;
+}
+
+static void
init (EvolutionComposer *composer)
{
const MailConfigAccount *account;
account = mail_config_get_default_account ();
composer->composer = e_msg_composer_new ();
-
+ composer->composer->no_body = TRUE;
+
+ gtk_signal_connect (GTK_OBJECT (composer->composer), "realize",
+ GTK_SIGNAL_FUNC (unset_no_body), NULL);
+
gtk_signal_connect (GTK_OBJECT (composer->composer), "send",
GTK_SIGNAL_FUNC (send_cb), NULL);
gtk_signal_connect (GTK_OBJECT (composer->composer), "postpone",