[evolution/wip/gsettings] Bug #656290 - "Always carbon-copy (cc) to:" option not honored



commit aa4440a9590572533c7deb59290cc30c51ec4e62
Author: Milan Crha <mcrha redhat com>
Date:   Fri Aug 12 13:20:43 2011 +0200

    Bug #656290 - "Always carbon-copy (cc) to:" option not honored

 composer/e-msg-composer.c |   48 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)
---
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 6ba256d..5b79930 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -3933,6 +3933,52 @@ add_recipients (GList *list, const gchar *recips)
 	return list;
 }
 
+static gboolean
+list_contains_addr (const GList *lst, EDestination *dest)
+{
+	g_return_val_if_fail (dest != NULL, FALSE);
+
+	while (lst) {
+		if (e_destination_equal (dest, lst->data))
+			return TRUE;
+
+		lst = lst->next;
+	}
+
+	return FALSE;
+}
+
+static void
+merge_cc_bcc (EDestination **addrv, GList **merge_into, const GList *to, const GList *cc, const GList *bcc)
+{
+	gint ii;
+
+	for (ii = 0; addrv && addrv[ii]; ii++) {
+		if (!list_contains_addr (to, addrv[ii]) &&
+		    !list_contains_addr (cc, addrv[ii]) &&
+		    !list_contains_addr (bcc, addrv[ii]))
+			*merge_into = g_list_append (*merge_into, g_object_ref (addrv[ii]));
+	}
+}
+
+static void
+merge_always_cc_and_bcc (EComposerHeaderTable *table, const GList *to, GList **cc, GList **bcc)
+{
+	EDestination **addrv;
+
+	g_return_if_fail (table != NULL);
+	g_return_if_fail (cc != NULL);
+	g_return_if_fail (bcc != NULL);
+
+	addrv = e_composer_header_table_get_destinations_cc (table);
+	merge_cc_bcc (addrv, cc, to, *cc, *bcc);
+	e_destination_freev (addrv);
+
+	addrv = e_composer_header_table_get_destinations_bcc (table);
+	merge_cc_bcc (addrv, bcc, to, *cc, *bcc);
+	e_destination_freev (addrv);
+}
+
 static void
 handle_mailto (EMsgComposer *composer, const gchar *mailto)
 {
@@ -4057,6 +4103,8 @@ handle_mailto (EMsgComposer *composer, const gchar *mailto)
 
 	g_free (buf);
 
+	merge_always_cc_and_bcc (table, to, &cc, &bcc);
+
 	tov  = destination_list_to_vector (to);
 	ccv  = destination_list_to_vector (cc);
 	bccv = destination_list_to_vector (bcc);



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