# HG changeset patch # User Sadrul Habib Chowdhury # Date 1157238385 0 # Node ID cfd5bcc06a7e104f825fdf4dfe036a9bbaf55b82 # Parent 84a480acb6ad8f98ba3c8c198092274c568fc3c6 [gaim-migrate @ 17131] Try to make sure the strings are not too long to get out of the range of the screen. committer: Tailor Script diff -r 84a480acb6ad -r cfd5bcc06a7e console/libgnt/gntlabel.c --- a/console/libgnt/gntlabel.c Sat Sep 02 20:17:43 2006 +0000 +++ b/console/libgnt/gntlabel.c Sat Sep 02 23:06:25 2006 +0000 @@ -101,7 +101,7 @@ GntWidget *widget = g_object_new(GNT_TYPE_LABEL, NULL); GntLabel *label = GNT_LABEL(widget); - label->text = g_strdup(text); + label->text = gnt_util_onscreen_fit_string(text, -1); label->flags = flags; gnt_widget_set_take_focus(widget, FALSE); GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); @@ -112,7 +112,7 @@ void gnt_label_set_text(GntLabel *label, const char *text) { g_free(label->text); - label->text = g_strdup(text); + label->text = gnt_util_onscreen_fit_string(text, -1); if (GNT_WIDGET(label)->window) { diff -r 84a480acb6ad -r cfd5bcc06a7e console/libgnt/gntutils.c --- a/console/libgnt/gntutils.c Sat Sep 02 20:17:43 2006 +0000 +++ b/console/libgnt/gntutils.c Sat Sep 02 23:06:25 2006 +0000 @@ -68,3 +68,32 @@ return str; } +char *gnt_util_onscreen_fit_string(const char *string, int maxw) +{ + const char *start, *end; + GString *str; + + if (maxw <= 0) + maxw = getmaxx(stdscr) - 4; + + start = string; + str = g_string_new(NULL); + + while (*start) { + if ((end = strchr(start, '\n')) != NULL || + (end = strchr(start, '\r')) != NULL) { + if (gnt_util_onscreen_width(start, end) <= maxw) { + ++end; + } else + end = NULL; + } + if (end == NULL) + end = gnt_util_onscreen_width_to_pointer(start, maxw, NULL); + str = g_string_append_len(str, start, end - start); + start = end; + if (*end && *end != '\n' && *end != '\r') + str = g_string_append_c(str, '\n'); + } + return g_string_free(str, FALSE); +} + diff -r 84a480acb6ad -r cfd5bcc06a7e console/libgnt/gntutils.h --- a/console/libgnt/gntutils.h Sat Sep 02 20:17:43 2006 +0000 +++ b/console/libgnt/gntutils.h Sat Sep 02 23:06:25 2006 +0000 @@ -9,3 +9,11 @@ int gnt_util_onscreen_width(const char *start, const char *end); const char *gnt_util_onscreen_width_to_pointer(const char *str, int len, int *w); + +/* Inserts newlines in 'string' where necessary so that its onscreen width is + * no more than 'maxw'. + * 'maxw' can be <= 0, in which case the maximum screen width is considered. + * + * Returns a newly allocated string. + */ +char *gnt_util_onscreen_fit_string(const char *string, int maxw);