diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index 08d980b877..c3e11360f5 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -1149,7 +1149,7 @@ void WindowManager::event(Core::Event& event) m_previous_event_was_super_keydown = false; process_mouse_event(mouse_event); - set_hovered_window(m_window_stack.window_at(mouse_event.position())); + set_hovered_window(m_window_stack.window_at(mouse_event.position(), WindowStack::IncludeWindowFrame::No)); return; } diff --git a/Userland/Services/WindowServer/WindowStack.cpp b/Userland/Services/WindowServer/WindowStack.cpp index fdff6f4bbe..3b914f2b8b 100644 --- a/Userland/Services/WindowServer/WindowStack.cpp +++ b/Userland/Services/WindowServer/WindowStack.cpp @@ -38,11 +38,13 @@ void WindowStack::move_to_front(Window& window) m_windows.append(window); } -Window* WindowStack::window_at(Gfx::IntPoint const& position) const +Window* WindowStack::window_at(Gfx::IntPoint const& position, IncludeWindowFrame include_window_frame) const { auto result = hit_test(position); if (!result.has_value()) return nullptr; + if (include_window_frame == IncludeWindowFrame::No && result->is_frame_hit) + return nullptr; return result->window; } diff --git a/Userland/Services/WindowServer/WindowStack.h b/Userland/Services/WindowServer/WindowStack.h index f11a43ba3f..ccabb8bb6a 100644 --- a/Userland/Services/WindowServer/WindowStack.h +++ b/Userland/Services/WindowServer/WindowStack.h @@ -20,7 +20,11 @@ public: void remove(Window&); void move_to_front(Window&); - Window* window_at(Gfx::IntPoint const&) const; + enum class IncludeWindowFrame { + Yes, + No, + }; + Window* window_at(Gfx::IntPoint const&, IncludeWindowFrame = IncludeWindowFrame::Yes) const; template IterationDecision for_each_visible_window_from_back_to_front(Callback);