g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text_after, recpt_editor);
gtk_text_buffer_insert (buffer, &iter, string_to_add, -1);
-
+
g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text, recpt_editor);
g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text_after, recpt_editor);
gtk_text_buffer_get_bounds (buffer, &start, &end);
buffer_contents = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ g_strstrip (buffer_contents);
if (!g_str_has_suffix (buffer_contents, "\n")) {
if (g_str_has_suffix (buffer_contents, ";")||(g_str_has_suffix (buffer_contents, ",")))
gtk_text_buffer_insert (buffer, &end, "\n", -1);
- else
+ else
gtk_text_buffer_insert (buffer, &end, ";\n", -1);
}
g_free (buffer_contents);
if ((recipient) && (strlen (recipient) != 0)) {
if (!is_first_recipient)
- gtk_text_buffer_insert (buffer, &iter, "\n", -1);
+ gtk_text_buffer_insert (buffer, &iter, "\n", -1);
gtk_text_buffer_insert (buffer, &iter, recipient, -1);
gtk_text_buffer_insert (buffer, &iter, ";", -1);
gtk_text_buffer_delete (buffer, start, end);
- while (email_lists_list) {
+ while (email_lists_list && recipient_ids_list) {
gchar *recipient_id = (gchar *) recipient_ids_list->data;
GSList *email_list = (GSList *) email_lists_list->data;
if ((recipient) && (strlen (recipient) != 0)) {
- if (!is_first_recipient)
+ if (!is_first_recipient || !gtk_text_iter_is_start(start))
gtk_text_buffer_insert (buffer, start, "\n", -1);
gtk_text_buffer_insert_with_tags (buffer, start, recipient, -1, tag, NULL);
ModestRecptEditorPrivate *priv;
GtkTextBuffer *buffer = NULL;
GtkTextIter start, end;
- gchar *c;
g_return_val_if_fail (MODEST_IS_RECPT_EDITOR (recpt_editor), NULL);
priv = MODEST_RECPT_EDITOR_GET_PRIVATE (recpt_editor);
gtk_text_buffer_get_end_iter (buffer, &end);
priv->recipients = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- for (c = priv->recipients; *c != '\0'; c = g_utf8_next_char (c)) {
- if (*c == '\n') {
- *c = ' ';
- }
- }
return priv->recipients;
next_c = g_utf8_get_char (g_utf8_next_char (current));
else
next_c = 0;
- if (c != 0x2022 && c != 0xfffc &&
+ if (c != 0x2022 && c != 0xfffc &&
c != g_utf8_get_char ("\n") &&
c != g_utf8_get_char ("\t"))
str = g_string_append_unichar (str, c);
if (!quoted && ((c == g_utf8_get_char(",") || c == g_utf8_get_char (";")))) {
- if ((next_c != 0) && (next_c != g_utf8_get_char ("\n")))
- str = g_string_append_c (str, '\n');
+ if ((next_c != 0) && (next_c != g_utf8_get_char ("\n"))) {
+ gchar *last_separator = MAX (g_utf8_strrchr(str->str, -1, g_utf8_get_char (",")),
+ g_utf8_strrchr(str->str, -1, g_utf8_get_char (";")));
+ if (last_separator) {
+ gchar *last_at = g_utf8_strrchr (str->str, -1, g_utf8_get_char ("@"));
+ if (last_at) {
+ if (last_at < last_separator)
+ str = g_string_append_c (str, '\n');
+ }
+ } else {
+ if (g_utf8_strrchr (str->str, -1, g_utf8_get_char ("@")))
+ str = g_string_append_c (str, '\n');
+ }
+ }
}
if (c == g_utf8_get_char ("\""))
quoted = !quoted;
current = g_utf8_next_char (current);
i = current - text;
}
+
return g_string_free (str, FALSE);
}
ModestRecptEditorPrivate *priv = MODEST_RECPT_EDITOR_GET_PRIVATE (editor);
prev = *location;
- if (!gtk_text_iter_backward_char (&prev))
+ /* We must go backwards twice as location points to the next
+ valid position to insert text */
+ if (!gtk_text_iter_backward_chars (&prev, 2))
return;
prev_char = gtk_text_iter_get_char (&prev);
g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text, editor);
g_signal_handlers_block_by_func (buffer, modest_recpt_editor_on_insert_text_after, editor);
- if ((prev_char == ';'||prev_char == ',')&&(!quote_opened(location))) {
+ if ((prev_char == ';'||prev_char == ',')&&(!quote_opened(&prev))) {
GtkTextMark *insert;
- gtk_text_buffer_insert (buffer, location, "\n",-1);
+ gtk_text_iter_forward_char (&prev);
+ gtk_text_buffer_insert (buffer, &prev, "\n",-1);
insert = gtk_text_buffer_get_insert (buffer);
- gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (priv->text_view), location, 0.0,TRUE, 0.0, 1.0);
+ gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (priv->text_view), &prev, 0.0,TRUE, 0.0, 1.0);
}
g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text, editor);
g_signal_handlers_unblock_by_func (buffer, modest_recpt_editor_on_insert_text_after, editor);