From a915dd7b27bae54520ef0a96d04a4c65399fb560 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 25 Jan 2019 03:07:55 +0100 Subject: [PATCH] WindowServer: Retain window backing stores while blitting them. --- WindowServer/WSWindowManager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WindowServer/WSWindowManager.cpp b/WindowServer/WSWindowManager.cpp index 3f069d0cea..418e2d46d7 100644 --- a/WindowServer/WSWindowManager.cpp +++ b/WindowServer/WSWindowManager.cpp @@ -336,7 +336,8 @@ void WSWindowManager::compose() } for (auto* window = m_windows_in_order.head(); window; window = window->next()) { WSWindowLocker locker(*window); - if (!window->backing()) + RetainPtr backing = window->backing(); + if (!backing) continue; if (!any_dirty_rect_intersects_window(*window)) continue; @@ -350,7 +351,7 @@ void WSWindowManager::compose() dirty_rect_in_window_coordinates.set_y(dirty_rect_in_window_coordinates.y() - window->y()); auto dst = window->position(); dst.move_by(dirty_rect_in_window_coordinates.location()); - m_back_painter->blit(dst, *window->backing(), dirty_rect_in_window_coordinates); + m_back_painter->blit(dst, *backing, dirty_rect_in_window_coordinates); m_back_painter->clear_clip_rect(); } m_back_painter->clear_clip_rect();