From 45a30b4dfa2d1edce4a4dbe789f8678077880592 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 20 Apr 2019 15:19:02 +0200 Subject: [PATCH] LibGUI: Bundle up update() invalidations and send them on next event loop. --- LibGUI/GWindow.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/LibGUI/GWindow.cpp b/LibGUI/GWindow.cpp index 505338f7d6..d3d38a73a7 100644 --- a/LibGUI/GWindow.cpp +++ b/LibGUI/GWindow.cpp @@ -206,7 +206,6 @@ void GWindow::event(CEvent& event) if (event.type() == GEvent::Paint) { if (!m_window_id) return; - m_pending_paint_event_rects.clear(); if (!m_main_widget) return; auto& paint_event = static_cast(event); @@ -300,13 +299,20 @@ void GWindow::update(const Rect& a_rect) return; } } - m_pending_paint_event_rects.append(a_rect); - WSAPI_ClientMessage request; - request.type = WSAPI_ClientMessage::Type::InvalidateRect; - request.window_id = m_window_id; - request.window.rect = a_rect; - GEventLoop::current().post_message_to_server(request); + if (m_pending_paint_event_rects.is_empty()) { + deferred_invoke([this] (auto&) { + for (auto& rect : m_pending_paint_event_rects) { + WSAPI_ClientMessage request; + request.type = WSAPI_ClientMessage::Type::InvalidateRect; + request.window_id = m_window_id; + request.window.rect = rect; + GEventLoop::current().post_message_to_server(request); + } + m_pending_paint_event_rects.clear_with_capacity(); + }); + } + m_pending_paint_event_rects.append(a_rect); } void GWindow::set_main_widget(GWidget* widget)