From 19567a991794c628687a25d201682c936b7e066f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 17 Oct 2005 10:09:04 +0000 Subject: [PATCH] Now makes sure the selected entry is visible upon entry, too. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14398 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/platform/bios_ia32/menu.cpp | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/system/boot/platform/bios_ia32/menu.cpp b/src/system/boot/platform/bios_ia32/menu.cpp index d916daf890..7e6c6ea828 100644 --- a/src/system/boot/platform/bios_ia32/menu.cpp +++ b/src/system/boot/platform/bios_ia32/menu.cpp @@ -284,6 +284,24 @@ last_selectable_item(Menu *menu) } +static bool +make_item_visible(Menu *menu, int32 selected) +{ + if (sMenuOffset > selected + || sMenuOffset + menu_height() <= selected) { + if (sMenuOffset > selected) + sMenuOffset = selected; + else + sMenuOffset = selected + 1 - menu_height(); + + draw_menu(menu); + return true; + } + + return false; +} + + static void run_menu(Menu *menu) { @@ -302,6 +320,8 @@ run_menu(Menu *menu) item->Select(true); } + make_item_visible(menu, selected); + while (true) { union key key = wait_for_key(); @@ -366,7 +386,8 @@ run_menu(Menu *menu) MenuItem *item = menu->ItemAt(selected); if (item != NULL) item->Select(true); - + + make_item_visible(menu, selected); // make sure that the new selected entry is visible if (sMenuOffset > selected || sMenuOffset + menu_height() <= selected) {