summaryrefslogtreecommitdiffstats
path: root/ui/ncurses/nc-menu.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-07-24 15:13:24 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-07-28 13:50:35 +0800
commite596e8e66b014161116c207daa8d42cff849bfd2 (patch)
tree5c32aa7165907d85f1d015c058806d5375d6f28c /ui/ncurses/nc-menu.c
parent0bacabfe38d4e6721d4b32c11c6ef5bff599492c (diff)
downloadtalos-petitboot-e596e8e66b014161116c207daa8d42cff849bfd2.tar.gz
talos-petitboot-e596e8e66b014161116c207daa8d42cff849bfd2.zip
ui/ncurses: Move menu initialisation to cui code
We'll want to re-initialise the petitboot main menu (when the language is changed), which we can't do if the items are populated entirely from the main() function. This change moves the menu initilisation to the cui code, we we can re-init when necessary. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'ui/ncurses/nc-menu.c')
-rw-r--r--ui/ncurses/nc-menu.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/ui/ncurses/nc-menu.c b/ui/ncurses/nc-menu.c
index 531ea2d..a77ea98 100644
--- a/ui/ncurses/nc-menu.c
+++ b/ui/ncurses/nc-menu.c
@@ -492,6 +492,19 @@ int pmenu_remove(struct pmenu *menu, struct pmenu_item *item)
return 0;
}
+static int pmenu_destructor(void *ptr)
+{
+ struct pmenu *menu = ptr;
+ assert(menu->scr.sig == pb_pmenu_sig);
+ menu->scr.sig = pb_removed_sig;
+
+ unpost_menu(menu->ncm);
+ free_menu(menu->ncm);
+ delwin(menu->scr.sub_ncw);
+ delwin(menu->scr.main_ncw);
+ return 0;
+}
+
/**
* pmenu_init - Allocate and initialize a new menu instance.
*
@@ -504,14 +517,13 @@ struct pmenu *pmenu_init(void *ui_ctx, unsigned int item_count,
void (*on_exit)(struct pmenu *))
{
struct pmenu *menu = talloc_zero(ui_ctx, struct pmenu);
-
if (!menu)
return NULL;
- /* note items array has a null terminator */
+ talloc_set_destructor(menu, pmenu_destructor);
+ /* note items array has a null terminator */
menu->items = talloc_zero_array(menu, ITEM *, item_count + 1);
-
if (!menu->items) {
talloc_free(menu);
return NULL;
@@ -555,19 +567,3 @@ int pmenu_setup(struct pmenu *menu)
return 0;
}
-/**
- * pmenu_delete - Delete a menu instance.
- *
- */
-
-void pmenu_delete(struct pmenu *menu)
-{
- assert(menu->scr.sig == pb_pmenu_sig);
- menu->scr.sig = pb_removed_sig;
-
- unpost_menu(menu->ncm);
- free_menu(menu->ncm);
- delwin(menu->scr.sub_ncw);
- delwin(menu->scr.main_ncw);
- talloc_free(menu);
-}
OpenPOWER on IntegriCloud