summaryrefslogtreecommitdiff
path: root/util/kconfig/lxdialog/checklist.c
diff options
context:
space:
mode:
authorPatrick Georgi <patrick@georgi-clan.de>2014-04-11 20:24:06 +0200
committerPatrick Georgi <patrick@georgi-clan.de>2014-05-07 19:39:28 +0200
commitd520840d4ca7d8fbd9c64946ee5f2d7ea44b8557 (patch)
tree0d51d363fe7ea38242199dc70edd48833d360657 /util/kconfig/lxdialog/checklist.c
parent99d8818af332f4db8ded058c7e5e59e2f56f7bc9 (diff)
downloadcoreboot-d520840d4ca7d8fbd9c64946ee5f2d7ea44b8557.tar.xz
kconfig: update to follow upstream more closely
This might break a bunch of stuff (eg. win32 support), but otherwise introduces nconfig (ncurses based configuration frontend), partial configuration headers for improved dependency tracking (which requires some more build system support) and various bug fixes. Change-Id: I5d8a280810c6a26fc3fd056d5d94cb9e591a0ff5 Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/5487 Tested-by: build bot (Jenkins) Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Diffstat (limited to 'util/kconfig/lxdialog/checklist.c')
-rw-r--r--util/kconfig/lxdialog/checklist.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/util/kconfig/lxdialog/checklist.c b/util/kconfig/lxdialog/checklist.c
index eafd53af39..3b15c08ec1 100644
--- a/util/kconfig/lxdialog/checklist.c
+++ b/util/kconfig/lxdialog/checklist.c
@@ -31,6 +31,10 @@ static int list_width, check_x, item_x;
static void print_item(WINDOW * win, int choice, int selected)
{
int i;
+ char *list_item = malloc(list_width + 1);
+
+ strncpy(list_item, item_str(), list_width - item_x);
+ list_item[list_width - item_x] = '\0';
/* Clear 'residue' of last item */
wattrset(win, dlg.menubox.atr);
@@ -41,16 +45,18 @@ static void print_item(WINDOW * win, int choice, int selected)
wmove(win, choice, check_x);
wattrset(win, selected ? dlg.check_selected.atr
: dlg.check.atr);
- wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
+ if (!item_is_tag(':'))
+ wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
- mvwaddch(win, choice, item_x, item_str()[0]);
+ mvwaddch(win, choice, item_x, list_item[0]);
wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
- waddstr(win, (char *)item_str() + 1);
+ waddstr(win, list_item + 1);
if (selected) {
wmove(win, choice, check_x + 1);
wrefresh(win);
}
+ free(list_item);
}
/*
@@ -126,16 +132,16 @@ int dialog_checklist(const char *title, const char *prompt, int height,
}
do_resize:
- if (getmaxy(stdscr) < (height + 6))
+ if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN))
return -ERRDISPLAYTOOSMALL;
- if (getmaxx(stdscr) < (width + 6))
+ if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN))
return -ERRDISPLAYTOOSMALL;
max_choice = MIN(list_height, item_count());
/* center dialog box on screen */
- x = (COLS - width) / 2;
- y = (LINES - height) / 2;
+ x = (getmaxx(stdscr) - width) / 2;
+ y = (getmaxy(stdscr) - height) / 2;
draw_shadow(stdscr, y, x, height, width);
@@ -174,6 +180,7 @@ do_resize:
check_x = 0;
item_foreach()
check_x = MAX(check_x, strlen(item_str()) + 4);
+ check_x = MIN(check_x, list_width);
check_x = (list_width - check_x) / 2;
item_x = check_x + 4;
@@ -309,13 +316,11 @@ do_resize:
case KEY_ESC:
key = on_key_esc(dialog);
break;
-#ifdef NCURSES_VERSION
case KEY_RESIZE:
delwin(list);
delwin(dialog);
on_key_resize();
goto do_resize;
-#endif
}
/* Now, update everything... */