From 7626f9e0bbf6f642797b8055e3b51d226c9b00c7 Mon Sep 17 00:00:00 2001 From: Tom Date: Fri, 19 Mar 2021 21:26:17 -0600 Subject: [PATCH] LibGUI: Process pending window updates after handling input events Since input events may trigger window portions to be invalidated, rather than making a round trip to WindowServer to get paint events we can simply fake an immediate paint event and update the window contents more quickly. Improves #5881 --- Userland/Libraries/LibGUI/Window.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp index 90810cd8ed1..b375ac5d808 100644 --- a/Userland/Libraries/LibGUI/Window.cpp +++ b/Userland/Libraries/LibGUI/Window.cpp @@ -363,8 +363,12 @@ void Window::handle_mouse_event(MouseEvent& event) if (event.buttons() != 0 && !m_automatic_cursor_tracking_widget) m_automatic_cursor_tracking_widget = *result.widget; if (result.widget != m_global_cursor_tracking_widget.ptr()) - return result.widget->dispatch_event(*local_event, this); - return; + result.widget->dispatch_event(*local_event, this); + + if (!m_pending_paint_event_rects.is_empty()) { + MultiPaintEvent paint_event(move(m_pending_paint_event_rects), size()); + handle_multi_paint_event(paint_event); + } } void Window::handle_multi_paint_event(MultiPaintEvent& event)