
On Tue, Oct 29, 2024 at 05:47:22PM +0800, Weijie Gao wrote:
Record the last active menu item and check if it equals to the current selected item before reprint.
Signed-off-by: Weijie Gao weijie.gao@mediatek.com
Reviewed-by: Daniel Golle daniel@makrotopia.org Tested-by: Daniel Golle daniel@makrotopia.org
cmd/bootmenu.c | 16 +++++++++++++++- include/menu.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c index c99605f3398..ffa63a4628d 100644 --- a/cmd/bootmenu.c +++ b/cmd/bootmenu.c @@ -103,11 +103,13 @@ static char *bootmenu_choice_entry(void *data)
switch (key) { case BKEY_UP:
case BKEY_DOWN:menu->last_active = menu->active; if (menu->active > 0) --menu->active; /* no menu key selected, regenerate menu */ return NULL;
menu->last_active = menu->active; if (menu->active < menu->count - 1) ++menu->active; /* no menu key selected, regenerate menu */
@@ -133,6 +135,17 @@ static char *bootmenu_choice_entry(void *data) return NULL; }
+static bool bootmenu_need_reprint(void *data) +{
- struct bootmenu_data *menu = data;
- bool need_reprint;
- need_reprint = menu->last_active != menu->active;
- menu->last_active = menu->active;
- return need_reprint;
+}
static void bootmenu_destroy(struct bootmenu_data *menu) { struct bootmenu_entry *iter = menu->first; @@ -332,6 +345,7 @@ static struct bootmenu_data *bootmenu_create(int delay)
menu->delay = delay; menu->active = 0;
menu->last_active = -1; menu->first = NULL;
default_str = env_get("bootmenu_default");
@@ -506,7 +520,7 @@ static enum bootmenu_ret bootmenu_show(int delay)
menu = menu_create(NULL, bootmenu->delay, 1, menu_display_statusline, bootmenu_print_entry, bootmenu_choice_entry,
NULL, bootmenu);
if (!menu) { bootmenu_destroy(bootmenu); return BOOTMENU_RET_FAIL;bootmenu_need_reprint, bootmenu);
diff --git a/include/menu.h b/include/menu.h index 79643af272b..6cede89b950 100644 --- a/include/menu.h +++ b/include/menu.h @@ -40,6 +40,7 @@ int menu_show(int bootdelay); struct bootmenu_data { int delay; /* delay for autoboot */ int active; /* active menu entry */
- int last_active; /* last active menu entry */ int count; /* total count of menu entries */ struct bootmenu_entry *first; /* first menu entry */
};
2.45.2