From bb44aa0fbee16f5e46bc65d624b2ee01107188fd Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 3 May 2026 01:46:54 +1000 Subject: [PATCH] fix: transparency blur rule debouncing Trigger on initial change + shorten cooldown to 30 Also wait for colour anim to finish before triggering when opacity increases --- services/Colours.qml | 48 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/services/Colours.qml b/services/Colours.qml index 922b51db..301f2e7f 100644 --- a/services/Colours.qml +++ b/services/Colours.qml @@ -25,6 +25,9 @@ Singleton { readonly property Transparency transparency: Transparency {} readonly property alias wallLuminance: analyser.luminance + property bool cooldownPending + property real lastBaseTransparency + function getLuminance(c: color): real { if (c.r == 0 && c.g == 0 && c.b == 0) return 0; @@ -84,7 +87,16 @@ Singleton { Hypr.extras.batchMessage([str.arg("blur").arg(transparency.enabled ? 1 : 0), str.arg("ignore_alpha").arg(transparency.base - 0.03)]); } - Component.onCompleted: debounceTimer.triggered() + function requestReloadHyprRules(): void { + if (cooldownTimer.running) { + root.cooldownPending = true; + } else { + root.reloadHyprRules(); + cooldownTimer.restart(); + } + } + + Component.onCompleted: root.requestReloadHyprRules() Connections { function onConfigReloaded(): void { @@ -108,10 +120,23 @@ Singleton { } Timer { - id: debounceTimer + id: cooldownTimer - interval: 300 - onTriggered: root.reloadHyprRules() + interval: 30 + onTriggered: { + if (root.cooldownPending) { + root.cooldownPending = false; + root.reloadHyprRules(); + restart(); + } + } + } + + Timer { + id: cAnimCompleteTimer + + interval: Tokens.anim.durations.expressiveSlowEffects + onTriggered: root.requestReloadHyprRules() } component Transparency: QtObject { @@ -119,8 +144,19 @@ Singleton { readonly property real base: Math.max(0, Math.min(1, Tokens.transparency.base - (root.light ? 0.1 : 0))) readonly property real layers: Tokens.transparency.layers - onEnabledChanged: debounceTimer.restart() - onBaseChanged: debounceTimer.restart() + onEnabledChanged: { + if (enabled) + root.requestReloadHyprRules(); + else + cAnimCompleteTimer.start(); + } + onBaseChanged: { + if (root.lastBaseTransparency > base) + root.requestReloadHyprRules(); + else + cAnimCompleteTimer.start(); + root.lastBaseTransparency = base; + } } component M3TPalette: QtObject {