diff --git a/modules/Mpris.qml b/modules/Mpris.qml index 17f7c7f..7d1b299 100644 --- a/modules/Mpris.qml +++ b/modules/Mpris.qml @@ -13,21 +13,6 @@ M.BarSection { readonly property MprisPlayer player: Mpris.players.values[0] ?? null readonly property bool playing: player?.playbackState === MprisPlaybackState.Playing - property string _cachedArt: "" - property string _artTrack: "" - - // Cache art URL at root level so it's captured even when panel is hidden - readonly property string _artUrl: player?.trackArtUrl ?? "" - readonly property string _currentTrack: player?.trackTitle ?? "" - on_ArtUrlChanged: if (_artUrl) _cachedArt = _artUrl - on_CurrentTrackChanged: if (_currentTrack !== _artTrack) { _artTrack = _currentTrack; _cachedArt = _artUrl || "" } - - // Preload art while panel is hidden — ensures QML image cache has the pixels - Image { - visible: false - source: root._cachedArt - asynchronous: true - } required property var bar @@ -155,7 +140,7 @@ M.BarSection { // Album art Item { width: parent.width - height: _artImg._hasArt ? 140 : 60 + height: _artImg.status === Image.Ready ? 140 : 60 clip: true Rectangle { @@ -167,16 +152,16 @@ M.BarSection { id: _artImg anchors.fill: parent fillMode: Image.PreserveAspectCrop - visible: _hasArt + visible: status === Image.Ready asynchronous: true - source: root._cachedArt - property bool _hasArt: false - onStatusChanged: if (status === Image.Ready) _hasArt = true - Connections { - target: root - function on_CachedArtChanged() { if (!root._cachedArt) _artImg._hasArt = false } - } + property string _lastGoodSource: "" + property string _lastTrack: "" + readonly property string _artUrl: root.player?.trackArtUrl ?? "" + readonly property string _track: root.player?.trackTitle ?? "" + on_ArtUrlChanged: if (_artUrl) _lastGoodSource = _artUrl + on_TrackChanged: if (_track !== _lastTrack) { _lastTrack = _track; _lastGoodSource = _artUrl || "" } + source: _lastGoodSource } Rectangle {