From cbf00d133a375f1a9bcb98cc1e7445501bc324fd Mon Sep 17 00:00:00 2001 From: bbedward Date: Fri, 20 Mar 2026 09:22:27 -0400 Subject: [PATCH] wallpaper: tweak binding again for updatesEnabled --- .../Modules/BlurredWallpaperBackground.qml | 12 ++++-- quickshell/Modules/WallpaperBackground.qml | 41 ++++++++++++++++--- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/quickshell/Modules/BlurredWallpaperBackground.qml b/quickshell/Modules/BlurredWallpaperBackground.qml index 4732a368..c07cb4eb 100644 --- a/quickshell/Modules/BlurredWallpaperBackground.qml +++ b/quickshell/Modules/BlurredWallpaperBackground.qml @@ -100,10 +100,10 @@ Variants { Connections { target: currentWallpaper function onStatusChanged() { - if (currentWallpaper.status === Image.Ready) { - root._renderSettling = true; - renderSettleTimer.restart(); - } + if (currentWallpaper.status !== Image.Ready && currentWallpaper.status !== Image.Error) + return; + root._renderSettling = true; + renderSettleTimer.restart(); } } @@ -206,6 +206,7 @@ Variants { visible: false opacity: 1 asynchronous: true + retainWhileLoading: true smooth: true cache: true sourceSize: Qt.size(root.textureWidth, root.textureHeight) @@ -218,6 +219,7 @@ Variants { visible: false opacity: 0 asynchronous: true + retainWhileLoading: true smooth: true cache: true sourceSize: Qt.size(root.textureWidth, root.textureHeight) @@ -300,6 +302,8 @@ Variants { root.useNextForEffect = false; nextWallpaper.source = ""; root.transitionProgress = 0.0; + root._renderSettling = true; + renderSettleTimer.restart(); root.effectActive = false; } } diff --git a/quickshell/Modules/WallpaperBackground.qml b/quickshell/Modules/WallpaperBackground.qml index 924f79e6..01f135b0 100644 --- a/quickshell/Modules/WallpaperBackground.qml +++ b/quickshell/Modules/WallpaperBackground.qml @@ -84,17 +84,19 @@ Variants { readonly property bool transitioning: transitionAnimation.running property bool effectActive: false property bool _renderSettling: true + property bool _overviewBlurSettling: false property bool useNextForEffect: false property string pendingWallpaper: "" property string _deferredSource: "" + readonly property bool overviewBlurActive: CompositorService.isNiri && SettingsData.blurWallpaperOnOverview && NiriService.inOverview && currentWallpaper.source !== "" Connections { target: currentWallpaper function onStatusChanged() { - if (currentWallpaper.status === Image.Ready) { - root._renderSettling = true; - renderSettleTimer.restart(); - } + if (currentWallpaper.status !== Image.Ready && currentWallpaper.status !== Image.Error) + return; + root._renderSettling = true; + renderSettleTimer.restart(); } } @@ -120,6 +122,22 @@ Variants { } } + Connections { + target: NiriService + function onInOverviewChanged() { + root._overviewBlurSettling = true; + overviewBlurSettleTimer.restart(); + } + } + + Connections { + target: SettingsData + function onBlurWallpaperOnOverviewChanged() { + root._overviewBlurSettling = true; + overviewBlurSettleTimer.restart(); + } + } + Connections { target: CompositorService function onRandrDataReady() { @@ -139,6 +157,12 @@ Variants { onTriggered: root._renderSettling = false } + Timer { + id: overviewBlurSettleTimer + interval: 150 + onTriggered: root._overviewBlurSettling = false + } + function getFillMode(modeName) { switch (modeName) { case "Stretch": @@ -164,7 +188,7 @@ Variants { Component.onCompleted: { if (typeof wallpaperWindow.updatesEnabled !== "undefined") - wallpaperWindow.updatesEnabled = Qt.binding(() => !root.source || root.effectActive || root._renderSettling || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading); + wallpaperWindow.updatesEnabled = Qt.binding(() => !root.source || root.effectActive || root._renderSettling || root.overviewBlurActive || root._overviewBlurSettling || root.pendingWallpaper !== "" || root._deferredSource !== "" || currentWallpaper.status === Image.Loading || nextWallpaper.status === Image.Loading); if (!source) { root._renderSettling = false; @@ -296,6 +320,7 @@ Variants { opacity: 1 layer.enabled: false asynchronous: true + retainWhileLoading: true smooth: true cache: true sourceSize: Qt.size(root.textureWidth, root.textureHeight) @@ -309,6 +334,7 @@ Variants { opacity: 0 layer.enabled: false asynchronous: true + retainWhileLoading: true smooth: true cache: true sourceSize: Qt.size(root.textureWidth, root.textureHeight) @@ -567,6 +593,8 @@ Variants { root.transitionProgress = 0.0; currentWallpaper.layer.enabled = false; nextWallpaper.layer.enabled = false; + root._renderSettling = true; + renderSettleTimer.restart(); root.effectActive = false; if (!root.pendingWallpaper) @@ -578,8 +606,9 @@ Variants { } Loader { + id: overviewBlurLoader anchors.fill: parent - active: CompositorService.isNiri && SettingsData.blurWallpaperOnOverview && NiriService.inOverview && currentWallpaper.source !== "" + active: root.overviewBlurActive sourceComponent: MultiEffect { anchors.fill: parent