From 37c4a4536e39b81f2cfe4d61d63abe1499130f18 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 2 Feb 2023 20:08:11 +0200 Subject: [PATCH] scene: Sync Window::readyForPainting() to window item visibility If a window is made ready for painting with some delay, the item won't schedule an update. To fix that, sync the item visibility state with Window::readyForPainting(). When the item visibility changes, a repaint will be scheduled. BUG: 464955 --- src/scene/windowitem.cpp | 3 +++ src/scene/workspacescene.cpp | 8 ++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/scene/windowitem.cpp b/src/scene/windowitem.cpp index b926dd1c5e..f29186c705 100644 --- a/src/scene/windowitem.cpp +++ b/src/scene/windowitem.cpp @@ -126,6 +126,9 @@ void WindowItem::handleWindowClosed(Window *original, Deleted *deleted) bool WindowItem::computeVisibility() const { + if (!m_window->readyForPainting()) { + return false; + } if (waylandServer() && waylandServer()->isScreenLocked()) { return m_window->isLockScreen() || m_window->isInputMethod() || m_window->isLockScreenOverlay(); } diff --git a/src/scene/workspacescene.cpp b/src/scene/workspacescene.cpp index 085db4b246..2536a29b47 100644 --- a/src/scene/workspacescene.cpp +++ b/src/scene/workspacescene.cpp @@ -443,13 +443,9 @@ void WorkspaceScene::createStackingOrder() // window should not get focus before it's displayed, handle unredirected windows properly and // so on. for (Window *window : std::as_const(windows)) { - if (!window->readyForPainting()) { - continue; + if (window->windowItem()->isVisible()) { + stacking_order.append(window->windowItem()); } - if (!window->windowItem()->isVisible()) { - continue; - } - stacking_order.append(window->windowItem()); } }