1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 10:37:45 +00:00

WindowServer: Don't include frame when determining hovered window

We only consider a window "hovered" if its *content area* is hovered.
This commit is contained in:
Andreas Kling 2021-06-18 17:38:21 +02:00
parent 1537172a6b
commit 82f1ac7390
3 changed files with 9 additions and 3 deletions

View file

@ -1149,7 +1149,7 @@ void WindowManager::event(Core::Event& event)
m_previous_event_was_super_keydown = false; m_previous_event_was_super_keydown = false;
process_mouse_event(mouse_event); 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; return;
} }

View file

@ -38,11 +38,13 @@ void WindowStack::move_to_front(Window& window)
m_windows.append(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); auto result = hit_test(position);
if (!result.has_value()) if (!result.has_value())
return nullptr; return nullptr;
if (include_window_frame == IncludeWindowFrame::No && result->is_frame_hit)
return nullptr;
return result->window; return result->window;
} }

View file

@ -20,7 +20,11 @@ public:
void remove(Window&); void remove(Window&);
void move_to_front(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<typename Callback> template<typename Callback>
IterationDecision for_each_visible_window_from_back_to_front(Callback); IterationDecision for_each_visible_window_from_back_to_front(Callback);