diff options
author | 2016-12-01 16:31:08 (GMT) | |
---|---|---|
committer | 2016-12-01 16:31:08 (GMT) | |
commit | 812ed6856edef9b77442c5d55e85829f98780f2b (patch) | |
tree | 0076c63cb51e396b43ae2271bb624f9b595f3e4d /kconfig/symbol.c | |
parent | 6785440c767c7c0411bbe6e89d60320b8b8161cd (diff) | |
parent | 89a2182f14dec1f8dd2ff633c65449ca5efda95b (diff) |
Merge pull request #485 from bhundven/update_kconfig
kconfig: sync upstream changes
Diffstat (limited to 'kconfig/symbol.c')
-rw-r--r-- | kconfig/symbol.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kconfig/symbol.c b/kconfig/symbol.c index 25cf0c2..2432298 100644 --- a/kconfig/symbol.c +++ b/kconfig/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)) |