From f91b43b29d76330f6550f0088ecc35b263a3dcc8 Mon Sep 17 00:00:00 2001 From: bbedward Date: Wed, 26 Aug 2026 12:16:28 -0400 Subject: [PATCH] shellcore: skip surface recovery while only a placeholder screen exists related #3057 --- quickshell/ShellCore.qml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/quickshell/ShellCore.qml b/quickshell/ShellCore.qml index 7649f70f9..88d7ffb0b 100644 --- a/quickshell/ShellCore.qml +++ b/quickshell/ShellCore.qml @@ -236,6 +236,10 @@ Item { } function refreshScreenSurfaces() { + if (!_hasRealScreen()) { + log.info("Surface refresh skipped: no real screen"); + return; + } log.info("Refreshing layer surfaces, screens:", Quickshell.screens.length, Quickshell.screens.map(s => s.name).join(",")); SurfaceRecovery.refreshAll(); surfaceRefreshVerifyTimer.restart(); @@ -289,6 +293,14 @@ Item { repeat: false property int pass: 0 onTriggered: { + // Rebuilding against a placeholder-only screen list feeds a dangling screen to the per-screen delegate models and segfaults (#3057); onScreensChanged reschedules once outputs return. + if (!root._hasRealScreen()) { + log.info("Surface recovery skipped: no real screen"); + pass = 0; + interval = 800; + return; + } + pass++; log.info("Surface recovery pass", pass, "screens:", Quickshell.screens.length, Quickshell.screens.map(s => s.name).join(","));