diff options
Diffstat (limited to 'scripts/kconfig/lxdialog/util.c')
-rw-r--r-- | scripts/kconfig/lxdialog/util.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/scripts/kconfig/lxdialog/util.c b/scripts/kconfig/lxdialog/util.c index 109d53117d22..a0e97c299410 100644 --- a/scripts/kconfig/lxdialog/util.c +++ b/scripts/kconfig/lxdialog/util.c | |||
@@ -257,12 +257,48 @@ void dialog_clear(void) | |||
257 | attr_clear(stdscr, LINES, COLS, dlg.screen.atr); | 257 | attr_clear(stdscr, LINES, COLS, dlg.screen.atr); |
258 | /* Display background title if it exists ... - SLH */ | 258 | /* Display background title if it exists ... - SLH */ |
259 | if (dlg.backtitle != NULL) { | 259 | if (dlg.backtitle != NULL) { |
260 | int i; | 260 | int i, len = 0, skip = 0; |
261 | struct subtitle_list *pos; | ||
261 | 262 | ||
262 | wattrset(stdscr, dlg.screen.atr); | 263 | wattrset(stdscr, dlg.screen.atr); |
263 | mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle); | 264 | mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle); |
265 | |||
266 | for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { | ||
267 | /* 3 is for the arrow and spaces */ | ||
268 | len += strlen(pos->text) + 3; | ||
269 | } | ||
270 | |||
264 | wmove(stdscr, 1, 1); | 271 | wmove(stdscr, 1, 1); |
265 | for (i = 1; i < COLS - 1; i++) | 272 | if (len > COLS - 2) { |
273 | const char *ellipsis = "[...] "; | ||
274 | waddstr(stdscr, ellipsis); | ||
275 | skip = len - (COLS - 2 - strlen(ellipsis)); | ||
276 | } | ||
277 | |||
278 | for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { | ||
279 | if (skip == 0) | ||
280 | waddch(stdscr, ACS_RARROW); | ||
281 | else | ||
282 | skip--; | ||
283 | |||
284 | if (skip == 0) | ||
285 | waddch(stdscr, ' '); | ||
286 | else | ||
287 | skip--; | ||
288 | |||
289 | if (skip < strlen(pos->text)) { | ||
290 | waddstr(stdscr, pos->text + skip); | ||
291 | skip = 0; | ||
292 | } else | ||
293 | skip -= strlen(pos->text); | ||
294 | |||
295 | if (skip == 0) | ||
296 | waddch(stdscr, ' '); | ||
297 | else | ||
298 | skip--; | ||
299 | } | ||
300 | |||
301 | for (i = len + 1; i < COLS - 1; i++) | ||
266 | waddch(stdscr, ACS_HLINE); | 302 | waddch(stdscr, ACS_HLINE); |
267 | } | 303 | } |
268 | wnoutrefresh(stdscr); | 304 | wnoutrefresh(stdscr); |
@@ -302,6 +338,11 @@ void set_dialog_backtitle(const char *backtitle) | |||
302 | dlg.backtitle = backtitle; | 338 | dlg.backtitle = backtitle; |
303 | } | 339 | } |
304 | 340 | ||
341 | void set_dialog_subtitles(struct subtitle_list *subtitles) | ||
342 | { | ||
343 | dlg.subtitles = subtitles; | ||
344 | } | ||
345 | |||
305 | /* | 346 | /* |
306 | * End using dialog functions. | 347 | * End using dialog functions. |
307 | */ | 348 | */ |