shellcore: skip surface recovery while only a placeholder screen exists

related #3057
This commit is contained in:
bbedward committed 2026-08-26 14:58:17 -04:00
1 parent 5b8f083fe5
commit f91b43b29d
1 file changed
+12
+12
View File
@@ -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(","));