1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:57:45 +00:00

WindowServer: Make deliver_mouse_event() perform coordinate translation

Instead of expecting callers to provide a window-relative position,
just take care of it inside deliver_mouse_event() instead.
This commit is contained in:
Andreas Kling 2021-06-18 13:59:31 +02:00
parent 300711d013
commit 5d73e16edf
3 changed files with 12 additions and 17 deletions

View file

@ -754,10 +754,9 @@ bool WindowManager::process_ongoing_drag(MouseEvent& event, Window*& hovered_win
if (!window.rect().contains(event.position()))
return IterationDecision::Continue;
hovered_window = &window;
auto translated_event = event.translated(-window.position());
translated_event.set_drag(true);
translated_event.set_mime_data(*m_dnd_mime_data);
deliver_mouse_event(window, translated_event, false);
event.set_drag(true);
event.set_mime_data(*m_dnd_mime_data);
deliver_mouse_event(window, event, false);
return IterationDecision::Break;
});
}
@ -911,11 +910,12 @@ void WindowManager::process_event_for_doubleclick(Window& window, MouseEvent& ev
void WindowManager::deliver_mouse_event(Window& window, MouseEvent& event, bool process_double_click)
{
window.dispatch_event(event);
auto translated_event = event.translated(-window.position());
window.dispatch_event(translated_event);
if (process_double_click && event.type() == Event::MouseUp) {
process_event_for_doubleclick(window, event);
if (event.type() == Event::MouseDoubleClick)
window.dispatch_event(event);
window.dispatch_event(translated_event);
}
}
@ -930,8 +930,7 @@ bool WindowManager::process_ongoing_active_input_mouse_event(MouseEvent& event,
//
// This prevents e.g. moving on one window out of the bounds starting
// a move in that other unrelated window, and other silly shenanigans.
auto translated_event = event.translated(-m_active_input_tracking_window->position());
deliver_mouse_event(*m_active_input_tracking_window, translated_event, true);
deliver_mouse_event(*m_active_input_tracking_window, event, true);
if (event.type() == Event::MouseUp && event.buttons() == 0) {
m_active_input_tracking_window = nullptr;
@ -1036,8 +1035,7 @@ void WindowManager::process_mouse_event(MouseEvent& event, Window*& hovered_wind
// We are hitting the window content
hovered_window = &window;
if (!window.global_cursor_tracking() && !window.blocking_modal_window()) {
auto translated_event = event.translated(-window.position());
deliver_mouse_event(window, translated_event, true);
deliver_mouse_event(window, event, true);
received_mouse_event = &window;
if (event.type() == Event::MouseDown) {
m_active_input_tracking_window = window;
@ -1068,8 +1066,7 @@ void WindowManager::process_mouse_event(MouseEvent& event, Window*& hovered_wind
continue;
if (!window.global_cursor_tracking() || !window.is_visible() || window.is_minimized() || window.blocking_modal_window())
continue;
auto translated_event = event.translated(-window.position());
deliver_mouse_event(window, translated_event, false);
deliver_mouse_event(window, event, false);
}
if (event_window_with_frame != m_resize_candidate.ptr())