From 9384b0ab3b9bec1744c19c64ac5431db99110b04 Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Wed, 2 Sep 2015 15:43:39 +1000 Subject: ui/ncurses: Improve update handling in nested screens Several screens in petitboot-nc require an update if a config or sysinfo update is received. However if those screens exist but are not the current screen they will incorrectly try to draw to the screen. Where the currently active screen is a textscreen (eg. a help screen) the update is delayed until after the screen is exited. In the particular case of nc-config where the current screen can be an nc-subset screen, the nc-subset screen is exited immediately so the update can be performed, since the nc-subset screen depends on the information in the previous screen. Signed-off-by: Samuel Mendoza-Jonas --- ui/ncurses/nc-textscreen.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'ui/ncurses/nc-textscreen.c') diff --git a/ui/ncurses/nc-textscreen.c b/ui/ncurses/nc-textscreen.c index 826244c..55428e7 100644 --- a/ui/ncurses/nc-textscreen.c +++ b/ui/ncurses/nc-textscreen.c @@ -183,6 +183,13 @@ void text_screen_set_help(struct text_screen *screen, const char *title, static int text_screen_post(struct nc_scr *scr) { + struct text_screen *screen = text_screen_from_scr(scr); + + if (screen->need_update) { + text_screen_draw(screen); + screen->need_update = false; + } + nc_scr_frame_draw(scr); redrawwin(scr->main_ncw); wrefresh(scr->main_ncw); @@ -202,6 +209,7 @@ void text_screen_init(struct text_screen *screen, struct cui *cui, screen->cui = cui; screen->on_exit = on_exit; + screen->need_update = false; screen->scr.frame.ltitle = talloc_strdup(screen, title); screen->scr.frame.rtitle = NULL; -- cgit v1.2.1