1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 11:07:35 +00:00

WindowServer: Skip over disabled menu items during keyboard navigation

This commit is contained in:
Andreas Kling 2020-04-24 17:24:09 +02:00
parent 4218b00cb4
commit cbb3c7aade

View file

@ -406,12 +406,15 @@ void Menu::event(Core::Event& event)
if (is_scrollable() && m_hovered_item_index == 0) if (is_scrollable() && m_hovered_item_index == 0)
return; return;
auto original_index = m_hovered_item_index;
do { do {
if (m_hovered_item_index == 0) if (m_hovered_item_index == 0)
m_hovered_item_index = m_items.size() - 1; m_hovered_item_index = m_items.size() - 1;
else else
--m_hovered_item_index; --m_hovered_item_index;
} while (hovered_item()->type() == MenuItem::Separator); if (m_hovered_item_index == original_index)
return;
} while (hovered_item()->type() == MenuItem::Separator || !hovered_item()->is_enabled());
ASSERT(m_hovered_item_index >= 0 && m_hovered_item_index <= static_cast<int>(m_items.size()) - 1); ASSERT(m_hovered_item_index >= 0 && m_hovered_item_index <= static_cast<int>(m_items.size()) - 1);
@ -428,12 +431,15 @@ void Menu::event(Core::Event& event)
if (is_scrollable() && m_hovered_item_index == static_cast<int>(m_items.size()) - 1) if (is_scrollable() && m_hovered_item_index == static_cast<int>(m_items.size()) - 1)
return; return;
auto original_index = m_hovered_item_index;
do { do {
if (m_hovered_item_index == static_cast<int>(m_items.size()) - 1) if (m_hovered_item_index == static_cast<int>(m_items.size()) - 1)
m_hovered_item_index = 0; m_hovered_item_index = 0;
else else
++m_hovered_item_index; ++m_hovered_item_index;
} while (hovered_item()->type() == MenuItem::Separator); if (m_hovered_item_index == original_index)
return;
} while (hovered_item()->type() == MenuItem::Separator || !hovered_item()->is_enabled());
ASSERT(m_hovered_item_index >= 0 && m_hovered_item_index <= static_cast<int>(m_items.size()) - 1); ASSERT(m_hovered_item_index >= 0 && m_hovered_item_index <= static_cast<int>(m_items.size()) - 1);