Index: main.c =================================================================== --- main.c (revision 232) +++ main.c (working copy) @@ -1199,24 +1199,28 @@ { GString* string = g_string_new((gchar*)element->data); /* Ellipsize text */ - if (string->len > prefs.item_length) + glong len = g_utf8_strlen(string->str, string->len); + if (len > prefs.item_length) { switch (prefs.ellipsize) { case PANGO_ELLIPSIZE_START: - string = g_string_erase(string, 0, string->len-(prefs.item_length)); + string = g_string_erase(string, 0, g_utf8_offset_to_pointer(string->str, len - prefs.item_length) - string->str); string = g_string_prepend(string, "..."); break; case PANGO_ELLIPSIZE_MIDDLE: - string = g_string_erase(string, (prefs.item_length/2), string->len-(prefs.item_length)); - string = g_string_insert(string, (string->len/2), "..."); + ; /* to avoid wierd gcc error */ + gchar* p1 = g_utf8_offset_to_pointer(string->str, prefs.item_length / 2); + gchar* p2 = g_utf8_offset_to_pointer(string->str, len - prefs.item_length / 2); + string = g_string_erase(string, p1 - string->str, p2 - p1); + string = g_string_insert(string, p1 - string->str, "..."); break; case PANGO_ELLIPSIZE_END: - string = g_string_truncate(string, prefs.item_length); + string = g_string_truncate(string, g_utf8_offset_to_pointer(string->str, prefs.item_length) - string->str); string = g_string_append(string, "..."); break; } - } + } /* Remove control characters */ gsize i = 0; while (i < string->len)