Browse Source

WindowServer: Implement switching windows in reverse order

Jami Kettunen 5 years ago
parent
commit
dfd759f75a

+ 2 - 1
Servers/WindowServer/WSWindowManager.cpp

@@ -1065,7 +1065,8 @@ void WSWindowManager::event(CEvent& event)
             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();
         if (m_switcher.is_visible()) {
             m_switcher.on_key_event(key_event);

+ 11 - 1
Servers/WindowServer/WSWindowSwitcher.cpp

@@ -56,13 +56,23 @@ void WSWindowSwitcher::on_key_event(const WSKeyEvent& event)
         }
         return;
     }
+
+    if (event.key() == Key_LeftShift || event.key() == Key_RightShift)
+        return;
     if (event.key() != Key_Tab) {
         WSWindowManager::the().set_highlight_window(nullptr);
         hide();
         return;
     }
     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());
     auto* highlight_window = m_windows.at(m_selected_index).ptr();
     ASSERT(highlight_window);