X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/cbc765de67bc4e947a61323fbcf9b0e01f66c606..446ad267cb4f93ec7b724cea974f3ee90aa7a569:/scripts/config/mconf.c diff --git a/scripts/config/mconf.c b/scripts/config/mconf.c index 083b23efa..8c58b6238 100644 --- a/scripts/config/mconf.c +++ b/scripts/config/mconf.c @@ -405,6 +405,7 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym) sym_get_string_value(sym)); for_all_prompts(sym, prop) get_prompt_str(r, prop); + hit = false; for_all_properties(sym, prop, P_SELECT) { if (!hit) { @@ -416,11 +417,29 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym) } if (hit) str_append(r, "\n"); + + hit = false; + for_all_properties(sym, prop, P_DESELECT) { + if (!hit) { + str_append(r, " Deselects: "); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); + if (sym->rev_dep.expr) { str_append(r, " Selected by: "); expr_gstr_print(sym->rev_dep.expr, r); str_append(r, "\n"); } + if (sym->rev_dep_inv.expr) { + str_append(r, " Deselected by: "); + expr_gstr_print(sym->rev_dep_inv.expr, r); + str_append(r, "\n"); + } str_append(r, "\n\n"); } @@ -888,6 +907,7 @@ static void conf_choice(struct menu *menu) const char *prompt = menu_get_prompt(menu); struct menu *child; struct symbol *active; + struct property *prop; int stat; active = sym_get_choice_value(menu->sym); @@ -920,9 +940,13 @@ static void conf_choice(struct menu *menu) case 0: if (sscanf(input_buf, "%p", &child) != 1) break; - if ((menu->sym->flags & SYMBOL_RESET) && - sym_get_tristate_value(child->sym) != yes) - conf_reset(); + + if (sym_get_tristate_value(child->sym) != yes) { + for_all_properties(menu->sym, prop, P_RESET) { + if (expr_calc_value(prop->visible.expr) != no) + conf_reset(); + } + } sym_set_tristate_value(child->sym, yes); return; case 1: