diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-07-24 15:13:24 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-07-28 13:50:35 +0800 |
commit | e596e8e66b014161116c207daa8d42cff849bfd2 (patch) | |
tree | 5c32aa7165907d85f1d015c058806d5375d6f28c /ui/ncurses/nc-menu.c | |
parent | 0bacabfe38d4e6721d4b32c11c6ef5bff599492c (diff) | |
download | petitboot-e596e8e66b014161116c207daa8d42cff849bfd2.zip petitboot-e596e8e66b014161116c207daa8d42cff849bfd2.tar.gz |
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.c | 34 |
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); -} |