diff --git a/shell/applets/CpuApplet.qml b/shell/applets/CpuApplet.qml index 2068cce..70e43d9 100644 --- a/shell/applets/CpuApplet.qml +++ b/shell/applets/CpuApplet.qml @@ -12,6 +12,19 @@ Column { property bool active: true + property bool _coreActive: false + onActiveChanged: { + if (active && !_coreActive) { + _coreActive = true; + S.SystemStats.coreConsumers++; + } else if (!active && _coreActive) { + _coreActive = false; + S.SystemStats.coreConsumers--; + } + } + Component.onDestruction: if (_coreActive) + S.SystemStats.coreConsumers-- + // Per-core rows Repeater { model: root.cores.length diff --git a/shell/dock/AppletDock.qml b/shell/dock/AppletDock.qml index a9f2285..d1a788a 100644 --- a/shell/dock/AppletDock.qml +++ b/shell/dock/AppletDock.qml @@ -374,6 +374,7 @@ PanelWindow { players: S.MprisService.players playing: S.MprisService.playing accentColor: root._accent + cachedArt: S.MprisService.cachedArt playerIdx: S.MprisService.playerIdx onPlayerSwitched: idx => S.MprisService.switchPlayer(idx) } diff --git a/shell/modules/CpuModule.qml b/shell/modules/CpuModule.qml index 9b89514..dcc3099 100644 --- a/shell/modules/CpuModule.qml +++ b/shell/modules/CpuModule.qml @@ -27,18 +27,6 @@ M.BarModule { readonly property var _coreMaxFreq: S.SystemStats.cpuCoreMaxFreq readonly property var _coreTypes: S.SystemStats.cpuCoreTypes - property bool _coreConsumerActive: false - - on_ShowPanelChanged: { - if (_showPanel && !_coreConsumerActive) { - _coreConsumerActive = true; - S.SystemStats.coreConsumers++; - } else if (!_showPanel && _coreConsumerActive) { - _coreConsumerActive = false; - S.SystemStats.coreConsumers--; - } - } - property M.ProcessList _procs: M.ProcessList { sortBy: "cpu" active: root._showPanel diff --git a/shell/modules/MprisModule.qml b/shell/modules/MprisModule.qml index 7c9d60b..0ad0673 100644 --- a/shell/modules/MprisModule.qml +++ b/shell/modules/MprisModule.qml @@ -22,7 +22,7 @@ M.BarModule { players: root._players playing: root.playing accentColor: root.accentColor - cachedArt: root._cachedArt + cachedArt: S.MprisService.cachedArt cavaBars: root._cavaBars playerIdx: S.MprisService.playerIdx onPlayerSwitched: idx => { @@ -35,25 +35,6 @@ M.BarModule { readonly property var _players: S.MprisService.players readonly property MprisPlayer player: S.MprisService.player readonly property bool playing: S.MprisService.playing - property string _cachedArt: "" - property string _artTrack: "" - - 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 - Image { - visible: false - source: root._cachedArt - asynchronous: true - } - // Cava visualizer - 16 bars, raw output mode property var _cavaBars: Array(16).fill(0) property bool _cavaActive: false diff --git a/shell/services/MprisService.qml b/shell/services/MprisService.qml index 5cb628f..d8533b5 100644 --- a/shell/services/MprisService.qml +++ b/shell/services/MprisService.qml @@ -118,6 +118,18 @@ QtObject { _selectedIdentity = players[chosen].identity ?? ""; } + // Album art caching - persists across panel/dock collapse + property string cachedArt: "" + property string _artTrack: "" + 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 || ""; + } + function switchPlayer(idx) { playerIdx = idx; if (players[idx])