[evolution-data-server] Bug #486553 - Inline expansion of email lists are not separated by commas



commit 315779dc18ee5d4e7dc4d66a30903f327a2be386
Author: Milan Crha <mcrha redhat com>
Date:   Mon Nov 15 13:29:57 2010 +0100

    Bug #486553 - Inline expansion of email lists are not separated by commas

 libedataserverui/e-name-selector-entry.c |   41 +++++++++++++++++++++--------
 1 files changed, 29 insertions(+), 12 deletions(-)
---
diff --git a/libedataserverui/e-name-selector-entry.c b/libedataserverui/e-name-selector-entry.c
index ead543a..6cd7676 100644
--- a/libedataserverui/e-name-selector-entry.c
+++ b/libedataserverui/e-name-selector-entry.c
@@ -2338,30 +2338,47 @@ editor_closed_cb (GtkWidget *editor, gpointer data)
 static void
 popup_activate_inline_expand (ENameSelectorEntry *name_selector_entry, GtkWidget *menu_item)
 {
-	const gchar *email_list, *text;
-	gchar *sanitized_text;
+	const gchar *text;
+	GString *sanitized_text = g_string_new ("");
 	EDestination *destination = name_selector_entry->priv->popup_destination;
 	gint position, start, end;
+	const GList *dests;
 
 	position = GPOINTER_TO_INT(g_object_get_data ((GObject *)name_selector_entry, "index"));
 
-	email_list = e_destination_get_address (destination);
-	text = gtk_entry_get_text (GTK_ENTRY (name_selector_entry));
-	get_range_at_position (text, position, &start, &end);
+	for (dests = e_destination_list_get_dests (destination); dests; dests = dests->next) {
+		const EDestination *dest = dests->data;
+		gchar *sanitized;
 
-	g_signal_handlers_block_by_func (name_selector_entry, user_delete_text, name_selector_entry);
+		if (!dest)
+			continue;
 
-	gtk_editable_delete_text (GTK_EDITABLE (name_selector_entry), start, end);
+		text = e_destination_get_address (dest);
+		if (!text || !*text)
+			continue;
 
-	sanitized_text = sanitize_string (email_list);
-	gtk_editable_insert_text (GTK_EDITABLE (name_selector_entry), sanitized_text, -1, &start);
-	g_free (sanitized_text);
+		sanitized = sanitize_string (text);
+		if (!sanitized)
+			continue;
 
-	g_signal_handlers_unblock_by_func (name_selector_entry, user_delete_text, name_selector_entry);
+		if (*sanitized) {
+			if (*sanitized_text->str)
+				g_string_append (sanitized_text, ", ");
+
+			g_string_append (sanitized_text, sanitized);
+		}
+
+		g_free (sanitized);
+	}
+
+	text = gtk_entry_get_text (GTK_ENTRY (name_selector_entry));
+	get_range_at_position (text, position, &start, &end);
+	gtk_editable_delete_text (GTK_EDITABLE (name_selector_entry), start, end);
+	gtk_editable_insert_text (GTK_EDITABLE (name_selector_entry), sanitized_text->str, -1, &start);
+	g_string_free (sanitized_text, TRUE);
 
 	clear_completion_model (name_selector_entry);
 	generate_attribute_list (name_selector_entry);
-
 }
 
 static void



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