WindowServer: Implement switching windows in reverse order

This commit is contained in:
Jami Kettunen 2020-01-01 19:07:53 +02:00 committed by Andreas Kling
parent 58517bc068
commit dfd759f75a
Notes: sideshowbarker 2024-07-19 10:28:48 +09:00
2 changed files with 13 additions and 2 deletions

View file

@ -1065,7 +1065,8 @@ void WSWindowManager::event(CEvent& event)
return; return;
} }
if (key_event.type() == WSEvent::KeyDown && key_event.modifiers() == Mod_Logo && key_event.key() == Key_Tab) if (key_event.type() == WSEvent::KeyDown && ((key_event.modifiers() == Mod_Logo && key_event.key() == Key_Tab) ||
(key_event.modifiers() == (Mod_Logo | Mod_Shift) && key_event.key() == Key_Tab)))
m_switcher.show(); m_switcher.show();
if (m_switcher.is_visible()) { if (m_switcher.is_visible()) {
m_switcher.on_key_event(key_event); m_switcher.on_key_event(key_event);

View file

@ -56,13 +56,23 @@ void WSWindowSwitcher::on_key_event(const WSKeyEvent& event)
} }
return; return;
} }
if (event.key() == Key_LeftShift || event.key() == Key_RightShift)
return;
if (event.key() != Key_Tab) { if (event.key() != Key_Tab) {
WSWindowManager::the().set_highlight_window(nullptr); WSWindowManager::the().set_highlight_window(nullptr);
hide(); hide();
return; return;
} }
ASSERT(!m_windows.is_empty()); ASSERT(!m_windows.is_empty());
m_selected_index = (m_selected_index + 1) % m_windows.size();
if (!event.shift()) {
m_selected_index = (m_selected_index + 1) % m_windows.size();
} else {
m_selected_index = (m_selected_index - 1) % m_windows.size();
if (m_selected_index < 0)
m_selected_index = m_windows.size() - 1;
}
ASSERT(m_selected_index < m_windows.size()); ASSERT(m_selected_index < m_windows.size());
auto* highlight_window = m_windows.at(m_selected_index).ptr(); auto* highlight_window = m_windows.at(m_selected_index).ptr();
ASSERT(highlight_window); ASSERT(highlight_window);