mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
kconfig: show sub-menu entries even if the prompt is hidden
Since commitf79dc03fe6
("kconfig: refactor choice value calculation"), when EXPERT is disabled, nothing within the "if INPUT" ... "endif" block in drivers/input/Kconfig is displayed. This issue affects all command-line interfaces and GUI frontends. The prompt for INPUT is hidden when EXPERT is disabled. Previously, menu_is_visible() returned true in this case; however, it now returns false, resulting in all sub-menu entries being skipped. Here is a simplified test case illustrating the issue: config A bool "A" if X default y config B bool "B" depends on A When X is disabled, A becomes unconfigurable and is forced to y. B should be displayed, as its dependency is met. This commit restores the necessary code, so menu_is_visible() functions as it did previously. Fixes:f79dc03fe6
("kconfig: refactor choice value calculation") Reported-by: Edmund Raile <edmund.raile@proton.me> Closes: https://lore.kernel.org/all/5fd0dfc7ff171aa74352e638c276069a5f2e888d.camel@proton.me/ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
2ad7126c51
commit
d01661e1f4
@ -533,6 +533,7 @@ bool menu_is_empty(struct menu *menu)
|
|||||||
|
|
||||||
bool menu_is_visible(struct menu *menu)
|
bool menu_is_visible(struct menu *menu)
|
||||||
{
|
{
|
||||||
|
struct menu *child;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
tristate visible;
|
tristate visible;
|
||||||
|
|
||||||
@ -551,7 +552,17 @@ bool menu_is_visible(struct menu *menu)
|
|||||||
} else
|
} else
|
||||||
visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
|
visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
|
||||||
|
|
||||||
return visible != no;
|
if (visible != no)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!sym || sym_get_tristate_value(menu->sym) == no)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (child = menu->list; child; child = child->next)
|
||||||
|
if (menu_is_visible(child))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *menu_get_prompt(const struct menu *menu)
|
const char *menu_get_prompt(const struct menu *menu)
|
||||||
|
Loading…
Reference in New Issue
Block a user