| 848 | } |
| 849 | |
| 850 | static void conf(struct menu *menu, struct menu *active_menu) |
| 851 | { |
| 852 | struct menu *submenu; |
| 853 | const char *prompt = menu_get_prompt(menu); |
| 854 | struct subtitle_part stpart; |
| 855 | struct symbol *sym; |
| 856 | int res; |
| 857 | int s_scroll = 0; |
| 858 | |
| 859 | if (menu != &rootmenu) |
| 860 | stpart.text = menu_get_prompt(menu); |
| 861 | else |
| 862 | stpart.text = NULL; |
| 863 | list_add_tail(&stpart.entries, &trail); |
| 864 | |
| 865 | while (1) { |
| 866 | item_reset(); |
| 867 | current_menu = menu; |
| 868 | build_conf(menu); |
| 869 | if (!child_count) |
| 870 | break; |
| 871 | set_subtitle(); |
| 872 | dialog_clear(); |
| 873 | res = dialog_menu(prompt ? prompt : "Main Menu", |
| 874 | menu_instructions, |
| 875 | active_menu, &s_scroll); |
| 876 | if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) |
| 877 | break; |
| 878 | if (item_count() != 0) { |
| 879 | if (!item_activate_selected()) |
| 880 | continue; |
| 881 | if (!item_tag()) |
| 882 | continue; |
| 883 | } |
| 884 | submenu = item_data(); |
| 885 | active_menu = item_data(); |
| 886 | if (submenu) |
| 887 | sym = submenu->sym; |
| 888 | else |
| 889 | sym = NULL; |
| 890 | |
| 891 | switch (res) { |
| 892 | case 0: |
| 893 | switch (item_tag()) { |
| 894 | case 'm': |
| 895 | if (single_menu_mode) |
| 896 | submenu->data = (void *) (long) !submenu->data; |
| 897 | else |
| 898 | conf(submenu, NULL); |
| 899 | break; |
| 900 | case 't': |
| 901 | if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) |
| 902 | conf_choice(submenu); |
| 903 | else if (submenu->prompt->type == P_MENU) |
| 904 | conf(submenu, NULL); |
| 905 | break; |
| 906 | case 's': |
| 907 | conf_string(submenu); |
no test coverage detected