diff --git a/autotests/integration/effects/wobbly_shade_test.cpp b/autotests/integration/effects/wobbly_shade_test.cpp index c8575710b4..93cb92f8b5 100644 --- a/autotests/integration/effects/wobbly_shade_test.cpp +++ b/autotests/integration/effects/wobbly_shade_test.cpp @@ -119,8 +119,8 @@ void WobblyWindowsShadeTest::testShadeMove() QVERIFY(!window->isShade()); QVERIFY(window->isActive()); - QSignalSpy windowShownSpy(window, &Window::windowShown); - QVERIFY(windowShownSpy.wait()); + QSignalSpy readyForPaintingChangedSpy(window, &Window::readyForPaintingChanged); + QVERIFY(readyForPaintingChangedSpy.wait()); // now shade the window workspace()->slotWindowShade(); diff --git a/src/scene/windowitem.cpp b/src/scene/windowitem.cpp index 380abd651b..ec1ce942bd 100644 --- a/src/scene/windowitem.cpp +++ b/src/scene/windowitem.cpp @@ -39,6 +39,9 @@ WindowItem::WindowItem(Window *window, Scene *scene, Item *parent) if (waylandServer()) { connect(waylandServer(), &WaylandServer::lockStateChanged, this, &WindowItem::updateVisibility); } + if (!window->readyForPainting()) { + connect(window, &Window::readyForPaintingChanged, this, &WindowItem::updateVisibility); + } connect(window, &Window::lockScreenOverlayChanged, this, &WindowItem::updateVisibility); connect(window, &Window::minimizedChanged, this, &WindowItem::updateVisibility); connect(window, &Window::hiddenChanged, this, &WindowItem::updateVisibility); diff --git a/src/wayland_server.cpp b/src/wayland_server.cpp index a81a50405f..637842eafe 100644 --- a/src/wayland_server.cpp +++ b/src/wayland_server.cpp @@ -209,7 +209,9 @@ void WaylandServer::registerWindow(Window *window) if (window->readyForPainting()) { Q_EMIT windowAdded(window); } else { - connect(window, &Window::windowShown, this, &WaylandServer::windowAdded, Qt::SingleShotConnection); + connect(window, &Window::readyForPaintingChanged, this, [this, window]() { + Q_EMIT windowAdded(window); + }); } m_windows << window; } diff --git a/src/window.cpp b/src/window.cpp index a1e3dce125..17e48ff59a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -229,7 +229,7 @@ void Window::setReadyForPainting() { if (!ready_for_painting) { ready_for_painting = true; - Q_EMIT windowShown(this); + Q_EMIT readyForPaintingChanged(); } } diff --git a/src/window.h b/src/window.h index 57e32ad7f5..396f12d4ae 100644 --- a/src/window.h +++ b/src/window.h @@ -1434,6 +1434,7 @@ Q_SIGNALS: void hiddenChanged(); void hiddenByShowDesktopChanged(); void lockScreenOverlayChanged(); + void readyForPaintingChanged(); protected: Window();