X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=config%2Fsymbol.c;h=2432298487fb330d04e365fa2b1c81ed6fbba691;hb=4805b7cd39bc6a22fc9a83999e613495cb1ed706;hp=25cf0c2c0c795ac36658a2bfa061c9f3383630a1;hpb=b3d9e508a8fbb972064bdb7409f0f0f19a67d37a;p=carl9170fw.git diff --git a/config/symbol.c b/config/symbol.c index 25cf0c2..2432298 100644 --- a/config/symbol.c +++ b/config/symbol.c @@ -209,12 +209,26 @@ static void sym_set_all_changed(void) static void sym_calc_visibility(struct symbol *sym) { struct property *prop; + struct symbol *choice_sym = NULL; tristate tri; /* any prompt visible? */ tri = no; + + if (sym_is_choice_value(sym)) + choice_sym = prop_get_symbol(sym_get_choice_prop(sym)); + for_all_prompts(sym, prop) { prop->visible.tri = expr_calc_value(prop->visible.expr); + /* + * Tristate choice_values with visibility 'mod' are + * not visible if the corresponding choice's value is + * 'yes'. + */ + if (choice_sym && sym->type == S_TRISTATE && + prop->visible.tri == mod && choice_sym->curr.tri == yes) + prop->visible.tri = no; + tri = EXPR_OR(tri, prop->visible.tri); } if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))