# HG changeset patch
# User Nathan Walp <nwalp@pidgin.im>
# Date 1176121827 0
# Node ID 26e519aad395e5db2eb98dccd24df9eab1984667
# Parent  3d29a73536720b46ed5678dffdd8e97a3065bbea# Parent  326e6a503724e08664fcafa4e87d08f507d8ac41
merge of 'd36941e443b528a93bedee123adfcef05776a8c4'
     and 'd62256b61a542163041106f71bfb45189710d363'

diff -r 3d29a7353672 -r 26e519aad395 finch/libgnt/gnttextview.c
--- a/finch/libgnt/gnttextview.c	Mon Apr 09 12:28:46 2007 +0000
+++ b/finch/libgnt/gnttextview.c	Mon Apr 09 12:30:27 2007 +0000
@@ -483,9 +483,12 @@
 	start = end = view->string->str + len;
 
 	while (*start) {
+		GntTextLine *oldl;
 		GntTextSegment *seg = NULL;
 
 		if (*end == '\n' || *end == '\r') {
+			if (!strncmp(end, "\r\n", 2))
+				end++;
 			end++;
 			start = end;
 			gnt_text_view_next_line(view);
@@ -501,8 +504,8 @@
 			view->list = g_list_prepend(view->list, line);
 		}
 
-		if ((end = strchr(start, '\n')) != NULL ||
-			(end = strchr(start, '\r')) != NULL) {
+		if ((end = strchr(start, '\r')) != NULL ||
+			(end = strchr(start, '\n')) != NULL) {
 			len = gnt_util_onscreen_width(start, end - 1);
 			if (len >= widget->priv.width - line->length - 1) {
 				end = NULL;
@@ -527,15 +530,25 @@
 			seg->flags = fl;
 			line->segments = g_list_append(line->segments, seg);
 		}
-		seg->end = end - view->string->str;
-		line->length += len;
 
-		start = end;
+		oldl = line;
 		if (*end && *end != '\n' && *end != '\r') {
+			const char *tmp = end;
+			while (end && *end != '\n' && *end != '\r' && !g_ascii_isspace(*end)) {
+				end = g_utf8_find_prev_char(seg->start + view->string->str, end);
+			}
+			if (!end || !g_ascii_isspace(*end))
+				end = tmp;
+			else
+				end++; /* Remove the space */
+
 			line = g_new0(GntTextLine, 1);
 			line->soft = TRUE;
 			view->list = g_list_prepend(view->list, line);
 		}
+		seg->end = end - view->string->str;
+		oldl->length += len;
+		start = end;
 	}
 
 	view->list = list;