summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2007-02-14 10:59:27 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2007-02-14 10:59:27 +0000
commitc536d1f19ccf869cab28a2d02e49cc5680f255da (patch)
treea98b5139765478459cf6ceab239fe3c052975f1c /src
parent6d11f6f897a17b92f3df1db35f6f6e21654ac130 (diff)
downloadirssi-c536d1f19ccf869cab28a2d02e49cc5680f255da.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/fe-common/core/formats.c4
-rw-r--r--src/fe-text/statusbar.c3
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);