WindowServer: make menus wrap vertically

This commit adds vertical wrap to menus. The first item is focused if
Key_Down is pressed on the last item and the last item is focused if
Key_up is pressed on the first item.
This commit is contained in:
Oliver Kraitschy 2020-01-30 23:06:01 +01:00 committed by Andreas Kling
parent 4a36a51618
commit 5aa37f6f5c
Notes: sideshowbarker 2024-07-19 09:44:18 +09:00

View File

@ -393,9 +393,12 @@ void WSMenu::event(CEvent& event)
return;
do {
if (m_hovered_item_index <= 0)
if (m_hovered_item_index == 0)
m_hovered_item_index = m_items.size() - 1;
else if (m_hovered_item_index < 0)
return;
--m_hovered_item_index;
else
--m_hovered_item_index;
} while (hovered_item()->type() == WSMenuItem::Separator);
if (is_scrollable() && m_hovered_item_index < m_scroll_offset)
@ -412,9 +415,12 @@ void WSMenu::event(CEvent& event)
return;
do {
if (m_hovered_item_index >= m_items.size() - 1)
if (m_hovered_item_index == m_items.size() - 1)
m_hovered_item_index = 0;
else if (m_hovered_item_index > m_items.size() - 1)
return;
++m_hovered_item_index;
else
++m_hovered_item_index;
} while (hovered_item()->type() == WSMenuItem::Separator);
if (is_scrollable() && m_hovered_item_index >= (m_scroll_offset + visible_item_count()))