X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fnc-cui.c;h=7200a81ae4bc5c5a87c5fe8437303751d5a3a033;hp=3a898692cd71f2854f4e3046a35c0317c76a4588;hb=a685c78f33418c109313a6fc4ea25bb8b90a8111;hpb=1bbd230d618162ccd5ea97540a413c766a07c0cb diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c index 3a89869..7200a81 100644 --- a/ui/ncurses/nc-cui.c +++ b/ui/ncurses/nc-cui.c @@ -58,6 +58,11 @@ static void cui_start(void) define_key("\x7f", KEY_BACKSPACE); define_key("\x08", KEY_BACKSPACE); + /* we need backtab too, for form navigation. vt220 doesn't include + * this (kcbt), but we don't want to require a full linux/xterm termcap + */ + define_key("\x1b[Z", KEY_BTAB); + while (getch() != ERR) /* flush stdin */ (void)0; } @@ -322,10 +327,6 @@ static int cui_process_key(void *arg) assert(cui->current); - if (!cui->has_input) - discover_client_cancel_default(cui->client); - cui->has_input = true; - for (;;) { int c = getch(); @@ -334,6 +335,13 @@ static int cui_process_key(void *arg) if (c == ERR) break; + if (!cui->has_input) { + pb_log("UI input received (key = %d), aborting " + "default boot\n", c); + discover_client_cancel_default(cui->client); + cui->has_input = true; + } + if (process_global_keys(cui, c)) continue; @@ -677,6 +685,7 @@ retry_start: } atexit(cui_atexit); + talloc_steal(cui, cui->client); cui_start(); waiter_register_io(cui->waitset, STDIN_FILENO, WAIT_IN,