1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 14:37:43 +00:00

WindowServer: Always process double clicks for mouse events

This used to be optional and was disabled in two cases:

  - On a mouse move event during dragging; because double clicks are
    only possible on mouse up events, this had no effect.
  - On a mouse event for automatic cursor tracking; this has now gained
    support for double click events.

Since it's always enabled now, we can remove the `bool` argument.
This commit is contained in:
Jelle Raaijmakers 2023-01-18 23:04:19 +01:00 committed by Sam Atkins
parent 448b187782
commit 3e70d41c57
3 changed files with 10 additions and 11 deletions

View file

@ -168,7 +168,7 @@ void MenuManager::handle_mouse_event(MouseEvent& mouse_event)
bool event_is_inside_current_menu = window->rect().contains(mouse_event.position());
if (event_is_inside_current_menu) {
WindowManager::the().set_hovered_window(window);
WindowManager::the().deliver_mouse_event(*window, mouse_event, true);
WindowManager::the().deliver_mouse_event(*window, mouse_event);
return;
}
@ -204,7 +204,7 @@ void MenuManager::handle_mouse_event(MouseEvent& mouse_event)
if (!menu->menu_window()->rect().contains(mouse_event.position()))
continue;
WindowManager::the().set_hovered_window(menu->menu_window());
WindowManager::the().deliver_mouse_event(*menu->menu_window(), mouse_event, true);
WindowManager::the().deliver_mouse_event(*menu->menu_window(), mouse_event);
break;
}
}

View file

@ -1020,7 +1020,7 @@ bool WindowManager::process_ongoing_drag(MouseEvent& event)
if (auto* window = hovered_window()) {
event.set_drag(true);
event.set_mime_data(*m_dnd_mime_data);
deliver_mouse_event(*window, event, false);
deliver_mouse_event(*window, event);
} else {
set_accepts_drag(false);
}
@ -1171,11 +1171,11 @@ void WindowManager::process_event_for_doubleclick(Window& window, MouseEvent& ev
metadata.last_position = event.position();
}
void WindowManager::deliver_mouse_event(Window& window, MouseEvent const& event, bool process_double_click)
void WindowManager::deliver_mouse_event(Window& window, MouseEvent const& event)
{
auto translated_event = event.translated(-window.position());
window.dispatch_event(translated_event);
if (process_double_click && translated_event.type() == Event::MouseUp) {
if (translated_event.type() == Event::MouseUp) {
process_event_for_doubleclick(window, translated_event);
if (translated_event.type() == Event::MouseDoubleClick)
window.dispatch_event(translated_event);
@ -1194,7 +1194,7 @@ bool WindowManager::process_ongoing_active_input_mouse_event(MouseEvent const& e
//
// This prevents e.g. moving on one window out of the bounds starting
// a move in that other unrelated window, and other silly shenanigans.
deliver_mouse_event(*input_tracking_window, event, true);
deliver_mouse_event(*input_tracking_window, event);
if (event.type() == Event::MouseUp && event.buttons() == 0)
set_automatic_cursor_tracking_window(nullptr);
@ -1278,9 +1278,8 @@ void WindowManager::process_mouse_event_for_window(HitTestResult& result, MouseE
return;
}
if (!window.is_automatic_cursor_tracking()) {
deliver_mouse_event(window, event, true);
}
if (!window.is_automatic_cursor_tracking())
deliver_mouse_event(window, event);
if (event.type() == Event::MouseDown)
set_automatic_cursor_tracking_window(&window);
@ -1306,7 +1305,7 @@ void WindowManager::process_mouse_event(MouseEvent& event)
// in the next step.
for_each_visible_window_from_front_to_back([&](Window& window) {
if (window.is_automatic_cursor_tracking() && &window != automatic_cursor_tracking_window())
deliver_mouse_event(window, event, false);
deliver_mouse_event(window, event);
return IterationDecision::Continue;
});

View file

@ -210,7 +210,7 @@ public:
bool is_theme_overridden() { return m_theme_overridden; }
bool set_hovered_window(Window*);
void deliver_mouse_event(Window&, MouseEvent const&, bool process_double_click);
void deliver_mouse_event(Window&, MouseEvent const&);
void did_popup_a_menu(Badge<Menu>);