]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-lang.c
ui/ncurses: in lockdown ensure system reboot in ncurses menu exit
[petitboot] / ui / ncurses / nc-lang.c
index dee129074ac752a547026625e00c9a3cc312a9de..a7c9ccc53bb53f24b755a2d2c3109752dc4da05e 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
 
 #include <talloc/talloc.h>
 #include <types/types.h>
@@ -131,7 +132,6 @@ static int lang_screen_post(struct nc_scr *scr)
        struct lang_screen *screen = lang_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;
@@ -230,7 +230,7 @@ static void lang_screen_layout_widgets(struct lang_screen *screen)
        widget_move(widget_button_base(screen->widgets.ok_b),
                        y, screen->field_x);
        widget_move(widget_button_base(screen->widgets.cancel_b),
-                       y, screen->field_x + 10);
+                       y, screen->field_x + 14);
 }
 
 static void lang_screen_setup_empty(struct lang_screen *screen)
@@ -238,7 +238,7 @@ static void lang_screen_setup_empty(struct lang_screen *screen)
        widget_new_label(screen->widgetset, 2, screen->field_x,
                        _("Waiting for configuration data..."));
        screen->widgets.cancel_b = widget_new_button(screen->widgetset,
-                       4, screen->field_x, 6, _("Cancel"),
+                       4, screen->field_x, 9, _("Cancel"),
                        cancel_click, screen);
 }
 
@@ -266,8 +266,14 @@ static void lang_screen_setup_widgets(struct lang_screen *screen,
 
                len = wcstombs(NULL, lang->label, 0);
                assert(len >= 0);
-               label = talloc_array(screen, char, len + 1);
-               wcstombs(label, lang->label, len + 1);
+               if (len < 0) {
+                       label = talloc_asprintf(screen,
+                               "Unable to display text in this locale (%s)\n",
+                               setlocale(LC_ALL, NULL));
+               } else {
+                       label = talloc_array(screen, char, len + 1);
+                       wcstombs(label, lang->label, len + 1);
+               }
 
                selected = config->lang && !strcmp(lang->name, config->lang);
                found |= selected;
@@ -287,9 +293,9 @@ static void lang_screen_setup_widgets(struct lang_screen *screen,
                screen->widgets.safe_mode = widget_new_label(set, 0, 0,
                         _("Selecting 'OK' will exit safe mode"));
 
-       screen->widgets.ok_b = widget_new_button(set, 0, 0, 6, _("OK"),
+       screen->widgets.ok_b = widget_new_button(set, 0, 0, 10, _("OK"),
                        ok_click, screen);
-       screen->widgets.cancel_b = widget_new_button(set, 0, 0, 6, _("Cancel"),
+       screen->widgets.cancel_b = widget_new_button(set, 0, 0, 10, _("Cancel"),
                        cancel_click, screen);
 }
 
@@ -385,7 +391,7 @@ struct lang_screen *lang_screen_init(struct cui *cui,
                        _("Petitboot Language Selection"));
        screen->scr.frame.rtitle = NULL;
        screen->scr.frame.help = talloc_strdup(screen,
-                       _("tab=next, shift+tab=previous, x=exit, h=help"));
+                       _("tab=next, shift+tab=previous, x=exit"));
        nc_scr_frame_draw(&screen->scr);
 
        scrollok(screen->scr.sub_ncw, true);