]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-config.c
ui/ncurses: Abstract text-screen code from sysinfo screen
[petitboot] / ui / ncurses / nc-config.c
index 6b29a660d43a4b6afd6b04cc0a576e0931a8fbe8..9cc6a29085ff3e4b21b14d3bb11ed4ec689e6763 100644 (file)
@@ -131,6 +131,8 @@ static int config_screen_post(struct nc_scr *scr)
        struct config_screen *screen = config_screen_from_scr(scr);
        widgetset_post(screen->widgetset);
        nc_scr_frame_draw(scr);
+       redrawwin(scr->main_ncw);
+       wrefresh(screen->scr.main_ncw);
        pad_refresh(screen);
        return 0;
 }
@@ -150,13 +152,13 @@ struct nc_scr *config_screen_scr(struct config_screen *screen)
 static int screen_process_form(struct config_screen *screen)
 {
        const struct system_info *sysinfo = screen->cui->sysinfo;
-       struct config *config = talloc_zero(screen, struct config);
        enum net_conf_type net_conf_type;
        struct interface_config *iface;
+       struct config *config;
        char *str, *end;
        int rc;
 
-       config_set_defaults(config);
+       config = config_copy(screen, screen->cui->config);
 
        config->autoboot_enabled =
                widget_checkbox_get_value(screen->widgets.autoboot_f);
@@ -212,6 +214,7 @@ static int screen_process_form(struct config_screen *screen)
                        screen->scr.frame.status =
                                "No IP / mask values are set";
                        nc_scr_frame_draw(&screen->scr);
+                       talloc_free(config);
                        return -1;
                }
 
@@ -579,8 +582,7 @@ static void config_screen_widget_focus(struct nc_widget *widget, void *arg)
        pad_refresh(screen);
 }
 
-
-void config_screen_update(struct config_screen *screen,
+static void config_screen_draw(struct config_screen *screen,
                const struct config *config,
                const struct system_info *sysinfo)
 {
@@ -625,7 +627,13 @@ void config_screen_update(struct config_screen *screen,
 
        if (repost)
                widgetset_post(screen->widgetset);
+}
 
+void config_screen_update(struct config_screen *screen,
+               const struct config *config,
+               const struct system_info *sysinfo)
+{
+       config_screen_draw(screen, config, sysinfo);
        pad_refresh(screen);
 }
 
@@ -665,9 +673,7 @@ struct config_screen *config_screen_init(struct cui *cui,
 
        scrollok(screen->scr.sub_ncw, true);
 
-       config_screen_update(screen, config, sysinfo);
-
-       wrefresh(screen->scr.main_ncw);
+       config_screen_draw(screen, config, sysinfo);
 
        return screen;
 }