# HG changeset patch # User Richard Nelson # Date 1176113067 0 # Node ID 326e6a503724e08664fcafa4e87d08f507d8ac41 # Parent b60aaf9da8b127b91849035af232a63dcf4183e4# Parent 1f24fd9a6237ae8bda0c716b99083078528ee2fd merge of '649200ea9c6886cd157833a2ea5b596d48625a8b' and '76ae821b860d7d88ecac474faf4c7d8784b674b9' diff -r b60aaf9da8b1 -r 326e6a503724 finch/libgnt/gnttextview.c --- a/finch/libgnt/gnttextview.c Mon Apr 09 03:20:40 2007 +0000 +++ b/finch/libgnt/gnttextview.c Mon Apr 09 10:04: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;