mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 12:07:44 +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:
parent
448b187782
commit
3e70d41c57
3 changed files with 10 additions and 11 deletions
|
@ -168,7 +168,7 @@ void MenuManager::handle_mouse_event(MouseEvent& mouse_event)
|
||||||
bool event_is_inside_current_menu = window->rect().contains(mouse_event.position());
|
bool event_is_inside_current_menu = window->rect().contains(mouse_event.position());
|
||||||
if (event_is_inside_current_menu) {
|
if (event_is_inside_current_menu) {
|
||||||
WindowManager::the().set_hovered_window(window);
|
WindowManager::the().set_hovered_window(window);
|
||||||
WindowManager::the().deliver_mouse_event(*window, mouse_event, true);
|
WindowManager::the().deliver_mouse_event(*window, mouse_event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ void MenuManager::handle_mouse_event(MouseEvent& mouse_event)
|
||||||
if (!menu->menu_window()->rect().contains(mouse_event.position()))
|
if (!menu->menu_window()->rect().contains(mouse_event.position()))
|
||||||
continue;
|
continue;
|
||||||
WindowManager::the().set_hovered_window(menu->menu_window());
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ bool WindowManager::process_ongoing_drag(MouseEvent& event)
|
||||||
if (auto* window = hovered_window()) {
|
if (auto* window = hovered_window()) {
|
||||||
event.set_drag(true);
|
event.set_drag(true);
|
||||||
event.set_mime_data(*m_dnd_mime_data);
|
event.set_mime_data(*m_dnd_mime_data);
|
||||||
deliver_mouse_event(*window, event, false);
|
deliver_mouse_event(*window, event);
|
||||||
} else {
|
} else {
|
||||||
set_accepts_drag(false);
|
set_accepts_drag(false);
|
||||||
}
|
}
|
||||||
|
@ -1171,11 +1171,11 @@ void WindowManager::process_event_for_doubleclick(Window& window, MouseEvent& ev
|
||||||
metadata.last_position = event.position();
|
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());
|
auto translated_event = event.translated(-window.position());
|
||||||
window.dispatch_event(translated_event);
|
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);
|
process_event_for_doubleclick(window, translated_event);
|
||||||
if (translated_event.type() == Event::MouseDoubleClick)
|
if (translated_event.type() == Event::MouseDoubleClick)
|
||||||
window.dispatch_event(translated_event);
|
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
|
// This prevents e.g. moving on one window out of the bounds starting
|
||||||
// a move in that other unrelated window, and other silly shenanigans.
|
// 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)
|
if (event.type() == Event::MouseUp && event.buttons() == 0)
|
||||||
set_automatic_cursor_tracking_window(nullptr);
|
set_automatic_cursor_tracking_window(nullptr);
|
||||||
|
@ -1278,9 +1278,8 @@ void WindowManager::process_mouse_event_for_window(HitTestResult& result, MouseE
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!window.is_automatic_cursor_tracking()) {
|
if (!window.is_automatic_cursor_tracking())
|
||||||
deliver_mouse_event(window, event, true);
|
deliver_mouse_event(window, event);
|
||||||
}
|
|
||||||
|
|
||||||
if (event.type() == Event::MouseDown)
|
if (event.type() == Event::MouseDown)
|
||||||
set_automatic_cursor_tracking_window(&window);
|
set_automatic_cursor_tracking_window(&window);
|
||||||
|
@ -1306,7 +1305,7 @@ void WindowManager::process_mouse_event(MouseEvent& event)
|
||||||
// in the next step.
|
// in the next step.
|
||||||
for_each_visible_window_from_front_to_back([&](Window& window) {
|
for_each_visible_window_from_front_to_back([&](Window& window) {
|
||||||
if (window.is_automatic_cursor_tracking() && &window != automatic_cursor_tracking_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;
|
return IterationDecision::Continue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ public:
|
||||||
bool is_theme_overridden() { return m_theme_overridden; }
|
bool is_theme_overridden() { return m_theme_overridden; }
|
||||||
|
|
||||||
bool set_hovered_window(Window*);
|
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>);
|
void did_popup_a_menu(Badge<Menu>);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue