diff options
author | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2021-09-10 21:58:57 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-09-10 22:09:23 +0200 |
commit | 7684e4f7269b698947569b830f943f4dc10f7630 (patch) | |
tree | 6eb8dfdb90ac57bc37cb46587ee97a313fbc6476 | |
parent | 61f573fa67267de4277001dc7969dbccbf0821d4 (diff) | |
download | serenity-7684e4f7269b698947569b830f943f4dc10f7630.zip |
WindowServer: Fix 'sticky' mouse after resize
This fixes #9933 and some dead code I accidentally left over.
Thanks, @Maato!
-rw-r--r-- | Userland/Services/WindowServer/Window.cpp | 5 | ||||
-rw-r--r-- | Userland/Services/WindowServer/Window.h | 3 | ||||
-rw-r--r-- | Userland/Services/WindowServer/WindowManager.cpp | 10 |
3 files changed, 10 insertions, 8 deletions
diff --git a/Userland/Services/WindowServer/Window.cpp b/Userland/Services/WindowServer/Window.cpp index 60c52b3bf6..aa066301b8 100644 --- a/Userland/Services/WindowServer/Window.cpp +++ b/Userland/Services/WindowServer/Window.cpp @@ -597,11 +597,6 @@ void Window::handle_keydown_event(const KeyEvent& event) m_client->async_key_down(m_window_id, (u32)event.code_point(), (u32)event.key(), event.modifiers(), (u32)event.scancode()); } -void Window::set_global_cursor_tracking_enabled(bool enabled) -{ - m_global_cursor_tracking_enabled = enabled; -} - void Window::set_visible(bool b) { if (m_visible == b) diff --git a/Userland/Services/WindowServer/Window.h b/Userland/Services/WindowServer/Window.h index edf8669095..e3f66e9e70 100644 --- a/Userland/Services/WindowServer/Window.h +++ b/Userland/Services/WindowServer/Window.h @@ -242,7 +242,7 @@ public: void set_global_cursor_tracking_enabled(bool); void set_automatic_cursor_tracking_enabled(bool enabled) { m_automatic_cursor_tracking_enabled = enabled; } - bool global_cursor_tracking() const { return m_global_cursor_tracking_enabled || m_automatic_cursor_tracking_enabled; } + bool is_automatic_cursor_tracking() const { return m_automatic_cursor_tracking_enabled; } bool has_alpha_channel() const { return m_has_alpha_channel; } void set_has_alpha_channel(bool value); @@ -409,7 +409,6 @@ private: Gfx::DisjointRectSet m_transparency_wallpaper_rects; HashMap<Window*, Gfx::DisjointRectSet> m_affected_transparency_rects; WindowType m_type { WindowType::Normal }; - bool m_global_cursor_tracking_enabled { false }; bool m_automatic_cursor_tracking_enabled { false }; bool m_visible { true }; bool m_has_alpha_channel { false }; diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index a49ef0c3cb..c91c943526 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -1182,7 +1182,7 @@ void WindowManager::process_mouse_event_for_window(HitTestResult& result, MouseE return; } - if (!window.global_cursor_tracking()) { + if (!window.is_automatic_cursor_tracking()) { deliver_mouse_event(window, event, true); } @@ -1206,6 +1206,14 @@ void WindowManager::process_mouse_event(MouseEvent& event) conn.async_track_mouse_move(event.position()); } }); + // The active input tracking window is excluded here because we're sending the event to it + // in the next step. + auto& window_stack = current_window_stack(); + for_each_visible_window_from_front_to_back([&](Window& window) { + if (window.is_automatic_cursor_tracking() && &window != window_stack.active_input_tracking_window()) + deliver_mouse_event(window, event, false); + return IterationDecision::Continue; + }); // 3. If there's an active input tracking window, all mouse events go there. // Tracking ends after all mouse buttons have been released. |