mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-11 15:34:55 +00:00
bootmenu: add reprint check
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>
This commit is contained in:
parent
ccdd7948e2
commit
599652cff1
2 changed files with 16 additions and 1 deletions
|
@ -103,11 +103,13 @@ static char *bootmenu_choice_entry(void *data)
|
|||
|
||||
switch (key) {
|
||||
case BKEY_UP:
|
||||
menu->last_active = menu->active;
|
||||
if (menu->active > 0)
|
||||
--menu->active;
|
||||
/* no menu key selected, regenerate menu */
|
||||
return NULL;
|
||||
case BKEY_DOWN:
|
||||
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);
|
||||
bootmenu_need_reprint, bootmenu);
|
||||
if (!menu) {
|
||||
bootmenu_destroy(bootmenu);
|
||||
return BOOTMENU_RET_FAIL;
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue