diff --git a/quickshell/DMSShell.qml b/quickshell/DMSShell.qml index 94698343c..90b85cd4c 100644 --- a/quickshell/DMSShell.qml +++ b/quickshell/DMSShell.qml @@ -213,7 +213,7 @@ Item { } Component.onCompleted: { - dockRecreateDebounce.start(); + dockEnabled = true; loginSoundTimer.start(); osdStartupTimer.start(); diff --git a/quickshell/Modules/BlurredWallpaperBackground.qml b/quickshell/Modules/BlurredWallpaperBackground.qml index d403e7df1..8fe67894e 100644 --- a/quickshell/Modules/BlurredWallpaperBackground.qml +++ b/quickshell/Modules/BlurredWallpaperBackground.qml @@ -33,6 +33,8 @@ Variants { color: "transparent" + visible: root.contentReady && !root.surfaceBounce + updatesEnabled: root.renderActive || root._settleFrames > 0 mask: Region { @@ -56,6 +58,8 @@ Variants { property string source: SessionData.getMonitorWallpaper(modelData.name) || "" property bool isColorSource: source.startsWith("#") + property bool contentReady: false + property bool surfaceBounce: false Connections { target: SessionData @@ -94,6 +98,9 @@ Variants { Component.onCompleted: { isInitialized = true; + if (!source || isColorSource) { + contentReady = true; + } } property bool isInitialized: false @@ -136,9 +143,9 @@ Variants { interval: 0 repeat: false onTriggered: { - blurWallpaperWindow.visible = false; + root.surfaceBounce = true; Qt.callLater(() => { - blurWallpaperWindow.visible = true; + root.surfaceBounce = false; }); } } @@ -246,6 +253,8 @@ Variants { transitionAnimation.stop(); root.transitionProgress = 0.0; root.effectActive = false; + if (!newSource) + root.contentReady = true; currentWallpaper.source = newSource; nextWallpaper.source = ""; } @@ -318,6 +327,9 @@ Variants { if (status === Image.Error) { log.warn("failed to load active wallpaper for", modelData.name + ":", source); } + if (status === Image.Ready || status === Image.Error) { + root.contentReady = true; + } } } diff --git a/quickshell/Modules/Dock/Dock.qml b/quickshell/Modules/Dock/Dock.qml index d623f7745..deb1fd68c 100644 --- a/quickshell/Modules/Dock/Dock.qml +++ b/quickshell/Modules/Dock/Dock.qml @@ -340,7 +340,19 @@ Variants { return ConnectedModeState.dockRetractActiveForSide(dock._dockScreenName, dock.connectedBarSide); } + property bool startupRevealDone: false + + Timer { + id: startupRevealTimer + interval: 200 + running: true + onTriggered: dock.startupRevealDone = true + } + property bool reveal: { + if (!startupRevealDone) + return false; + if (_modalRetractActive) return false; @@ -628,6 +640,7 @@ Variants { id: dockContainer anchors.fill: parent clip: false + opacity: dock.startupRevealDone ? 1 : 0 transform: Translate { id: dockSlide diff --git a/quickshell/Modules/Plugins/DesktopPluginWrapper.qml b/quickshell/Modules/Plugins/DesktopPluginWrapper.qml index 7ddf16e5a..47032c324 100644 --- a/quickshell/Modules/Plugins/DesktopPluginWrapper.qml +++ b/quickshell/Modules/Plugins/DesktopPluginWrapper.qml @@ -359,6 +359,17 @@ Item { anchors.fill: parent active: root.widgetEnabled && root.activeComponent !== null sourceComponent: root.activeComponent + opacity: 0 + + NumberAnimation { + id: revealFade + target: contentLoader + property: "opacity" + from: 0 + to: 1 + duration: Theme.mediumDuration + easing.type: Theme.standardEasing + } function reloadComponent() { active = false; @@ -384,6 +395,8 @@ Item { if (!item) return; + revealFade.restart(); + if (item.pluginService !== undefined) { item.pluginService = root.isInstance ? instanceScopedPluginService : root.pluginService; } diff --git a/quickshell/Modules/WallpaperBackground.qml b/quickshell/Modules/WallpaperBackground.qml index 0f38f71fa..e755a2480 100644 --- a/quickshell/Modules/WallpaperBackground.qml +++ b/quickshell/Modules/WallpaperBackground.qml @@ -37,6 +37,8 @@ Variants { color: "transparent" + visible: root.contentReady && !root.surfaceBounce + updatesEnabled: root.renderActive || root._settleFrames > 0 mask: Region { @@ -64,6 +66,9 @@ Variants { property string actualTransitionType: transitionType property bool isInitialized: false + property bool contentReady: false + property bool surfaceBounce: false + property string scrollMode: SettingsData.wallpaperFillMode property bool scrollingEnabled: scrollMode === "Scrolling" property int currentWorkspaceIndex: 0 @@ -263,9 +268,9 @@ Variants { interval: 0 repeat: false onTriggered: { - wallpaperWindow.visible = false; + root.surfaceBounce = true; Qt.callLater(() => { - wallpaperWindow.visible = true; + root.surfaceBounce = false; }); } } @@ -506,6 +511,9 @@ Variants { Component.onCompleted: { isInitialized = true; + if (!source || isColorSource) { + contentReady = true; + } if (scrollingEnabled) { updateWorkspaceData(); @@ -574,8 +582,10 @@ Variants { root.effectActive = false; root.screenScale = CompositorService.getScreenScale(modelData); // No status change coming to clear the flag - if (!newSource || currentWallpaper.source.toString() === newSource) + if (!newSource || currentWallpaper.source.toString() === newSource) { root.changePending = false; + root.contentReady = true; + } currentWallpaper.source = newSource; nextWallpaper.source = ""; @@ -746,6 +756,7 @@ Variants { } if (status === Image.Ready || status === Image.Error) { root.changePending = false; + root.contentReady = true; } }