From 1d120f94bf3edf0c30f18e50cf9cd8b02bec3412 Mon Sep 17 00:00:00 2001 From: Mario Mohar <76663003+Mario-Mohar@users.noreply.github.com> Date: Thu, 8 Oct 2026 17:33:25 +0200 Subject: [PATCH] fix(wallpaper): keep rendering until the scrolling image has decoded (#3725) In scroll fill mode the parallax layer decodes its own copy of the wallpaper (parallaxImage, asynchronous). renderActive only waited for currentWallpaper and nextWallpaper, so after a wallpaper change it could drop to false and let updatesEnabled run out after the three settle frames while parallaxImage was still loading. The window then kept showing the black backing until something else, like a workspace switch, started rendering again. Count parallaxImage loading as active too. When it turns Ready, renderActive flips back and onRenderActiveChanged invalidates, so the finished image gets its settle frames. Fixes #3702. Diagnosis and fix by @clethbridgedaniel in the issue. --- quickshell/Modules/WallpaperBackground.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickshell/Modules/WallpaperBackground.qml b/quickshell/Modules/WallpaperBackground.qml index 44a2c4a24..89be66c64 100644 --- a/quickshell/Modules/WallpaperBackground.qml +++ b/quickshell/Modules/WallpaperBackground.qml @@ -160,7 +160,7 @@ Variants { readonly property var backingWindow: Window.window readonly property bool showsBackdrop: !source || isColorSource || currentWallpaper.status === Image.Error readonly property bool backdropBusy: showsBackdrop && !(backdropLoader.item?.ready ?? false) - readonly property bool renderActive: backdropBusy || effectActive || overviewBlurActive || pendingWallpaper !== "" || _deferredSource !== "" || changePending || _freezeWaitFrames > 0 || frameAnim.running || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading + readonly property bool renderActive: backdropBusy || effectActive || overviewBlurActive || pendingWallpaper !== "" || _deferredSource !== "" || changePending || _freezeWaitFrames > 0 || frameAnim.running || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading || parallaxImage.status === Image.Loading property int _settleFrames: 3 function invalidate() {