From c536d1f19ccf869cab28a2d02e49cc5680f255da Mon Sep 17 00:00:00 2001 From: Emanuele Giaquinta Date: Wed, 14 Feb 2007 10:59:27 +0000 Subject: [PATCH] Fix format_real_length to return the correct length when the input string includes a trailing wide char. Change statusbar_item_default_handler to compute padding also when item->size < item->min_size, needed after the fix to format_real_length. Patch by Yi-Hsuan Hsin, bug #452. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4416 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/fe-common/core/formats.c | 4 ++++ src/fe-text/statusbar.c | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fe-common/core/formats.c b/src/fe-common/core/formats.c index ccfad968..9a5569ff 100644 --- a/src/fe-common/core/formats.c +++ b/src/fe-common/core/formats.c @@ -366,6 +366,7 @@ int format_real_length(const char *str, int len) GString *tmp; const char *start; #ifdef HAVE_GLIB2 + const char *oldstr; gboolean utf8; #endif g_return_val_if_fail(str != NULL, 0); @@ -394,7 +395,10 @@ int format_real_length(const char *str, int len) } #ifdef HAVE_GLIB2 + oldstr = str; len -= advance(&str, utf8); + if (len < 0) + str = oldstr; #else len--; str++; diff --git a/src/fe-text/statusbar.c b/src/fe-text/statusbar.c index 5eba9557..9f1b09b0 100644 --- a/src/fe-text/statusbar.c +++ b/src/fe-text/statusbar.c @@ -732,7 +732,7 @@ void statusbar_item_default_handler(SBAR_ITEM_REC *item, int get_size_only, /* they're forcing us smaller than minimum size.. */ len = format_real_length(tmpstr, item->size); tmpstr[len] = '\0'; - } else { + } /* make sure the str is big enough to fill the requested size, so it won't corrupt screen */ len = format_get_length(tmpstr); @@ -748,7 +748,6 @@ void statusbar_item_default_handler(SBAR_ITEM_REC *item, int get_size_only, g_free(tmpstr); tmpstr = tmpstr2; } - } tmpstr2 = update_statusbar_bg(tmpstr, item->bar->color); gui_printtext(item->xpos, item->bar->real_ypos, tmpstr2);