|
@@ -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))
|