Browse Source

WindowServer: Moving a window to front should always activate it.

So instead of having move_to_front() + set_active_window(), let's have
move_to_front_and_make_active().
Andreas Kling 6 years ago
parent
commit
e84823360d

+ 9 - 13
Servers/WindowServer/WSWindowManager.cpp

@@ -520,7 +520,7 @@ void WSWindowManager::add_window(WSWindow& window)
         m_switcher.refresh();
 }
 
-void WSWindowManager::move_to_front(WSWindow& window)
+void WSWindowManager::move_to_front_and_make_active(WSWindow& window)
 {
     if (window.is_blocked_by_modal_window())
         return;
@@ -529,6 +529,8 @@ void WSWindowManager::move_to_front(WSWindow& window)
         invalidate(window);
     m_windows_in_order.remove(&window);
     m_windows_in_order.append(&window);
+
+    set_active_window(&window);
 }
 
 void WSWindowManager::remove_window(WSWindow& window)
@@ -620,6 +622,7 @@ void WSWindowManager::start_window_drag(WSWindow& window, WSMouseEvent& event)
 #ifdef DRAG_DEBUG
     printf("[WM] Begin dragging WSWindow{%p}\n", &window);
 #endif
+    move_to_front_and_make_active(window);
     m_drag_window = window.make_weak_ptr();;
     m_drag_origin = event.position();
     m_drag_window_origin = window.position();
@@ -628,6 +631,7 @@ void WSWindowManager::start_window_drag(WSWindow& window, WSMouseEvent& event)
 
 void WSWindowManager::start_window_resize(WSWindow& window, WSMouseEvent& event)
 {
+    move_to_front_and_make_active(window);
     constexpr ResizeDirection direction_for_hot_area[3][3] = {
         { ResizeDirection::UpLeft, ResizeDirection::Up, ResizeDirection::UpRight },
         { ResizeDirection::Left, ResizeDirection::None, ResizeDirection::Right },
@@ -821,23 +825,17 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& event_
     for_each_visible_window_from_front_to_back([&] (WSWindow& window) {
         if (window.type() == WSWindowType::Normal && outer_window_rect(window).contains(event.position())) {
             if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Left) {
-                move_to_front(window);
-                set_active_window(&window);
                 start_window_drag(window, event);
                 return IterationDecision::Abort;
             }
             if (m_keyboard_modifiers == Mod_Logo && event.type() == WSMessage::MouseDown && event.button() == MouseButton::Right && !window.is_blocked_by_modal_window()) {
-                move_to_front(window);
-                set_active_window(&window);
                 start_window_resize(window, event);
                 return IterationDecision::Abort;
             }
         }
         if (window.type() == WSWindowType::Normal && title_bar_rect(window.rect()).contains(event.position())) {
-            if (event.type() == WSMessage::MouseDown) {
-                move_to_front(window);
-                set_active_window(&window);
-            }
+            if (event.type() == WSMessage::MouseDown)
+                move_to_front_and_make_active(window);
             if (close_button_rect_for_window(window.rect()).contains(event.position())) {
                 handle_close_button_mouse_event(window, event);
                 return IterationDecision::Abort;
@@ -848,10 +846,8 @@ void WSWindowManager::process_mouse_event(WSMouseEvent& event, WSWindow*& event_
         }
 
         if (window.rect().contains(event.position())) {
-            if (window.type() == WSWindowType::Normal && event.type() == WSMessage::MouseDown) {
-                move_to_front(window);
-                set_active_window(&window);
-            }
+            if (window.type() == WSWindowType::Normal && event.type() == WSMessage::MouseDown)
+                move_to_front_and_make_active(window);
             event_window = &window;
             if (!window.global_cursor_tracking()) {
                 // FIXME: Should we just alter the coordinates of the existing MouseEvent and pass it through?

+ 1 - 1
Servers/WindowServer/WSWindowManager.h

@@ -49,7 +49,7 @@ public:
     WSWindow* highlight_window() { return m_highlight_window.ptr(); }
     void set_highlight_window(WSWindow*);
 
-    void move_to_front(WSWindow&);
+    void move_to_front_and_make_active(WSWindow&);
 
     void invalidate_cursor();
     void draw_cursor();

+ 2 - 4
Servers/WindowServer/WSWindowSwitcher.cpp

@@ -34,10 +34,8 @@ void WSWindowSwitcher::on_key_event(const WSKeyEvent& event)
 {
     if (event.type() == WSMessage::KeyUp) {
         if (event.key() == Key_Logo) {
-            if (auto* window = selected_window()) {
-                WSWindowManager::the().set_active_window(window);
-                WSWindowManager::the().move_to_front(*window);
-            }
+            if (auto* window = selected_window())
+                WSWindowManager::the().move_to_front_and_make_active(*window);
             WSWindowManager::the().set_highlight_window(nullptr);
             hide();
         }