1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:28:12 +00:00

WindowServer: Adjust position of flipped submenus by menu item height

Fixes #5950.
This commit is contained in:
Linus Groh 2021-03-26 09:22:31 +01:00 committed by Andreas Kling
parent 8461100bf7
commit b220c89c5c
2 changed files with 5 additions and 3 deletions

View file

@ -288,7 +288,7 @@ void Menu::update_for_new_hovered_item(bool make_input)
if (hovered_item() && hovered_item()->is_submenu()) {
VERIFY(menu_window());
MenuManager::the().close_everyone_not_in_lineage(*hovered_item()->submenu());
hovered_item()->submenu()->do_popup(hovered_item()->rect().top_right().translated(menu_window()->rect().location()), make_input);
hovered_item()->submenu()->do_popup(hovered_item()->rect().top_right().translated(menu_window()->rect().location()), make_input, true);
} else {
MenuManager::the().close_everyone_not_in_lineage(*this);
ensure_menu_window().set_visible(true);
@ -518,7 +518,7 @@ void Menu::popup(const Gfx::IntPoint& position)
do_popup(position, true);
}
void Menu::do_popup(const Gfx::IntPoint& position, bool make_input)
void Menu::do_popup(const Gfx::IntPoint& position, bool make_input, bool as_submenu)
{
if (is_empty()) {
dbgln("Menu: Empty menu popup");
@ -536,6 +536,8 @@ void Menu::do_popup(const Gfx::IntPoint& position, bool make_input)
}
if (adjusted_pos.y() + window.height() >= Screen::the().height() - margin) {
adjusted_pos = adjusted_pos.translated(0, -window.height());
if (as_submenu)
adjusted_pos = adjusted_pos.translated(0, item_height());
}
if (adjusted_pos.y() < MenuManager::the().menubar_rect().height())