diff --git a/shell/applets/BluetoothApplet.qml b/shell/applets/BluetoothApplet.qml index bc6c4cc..89ff63b 100644 --- a/shell/applets/BluetoothApplet.qml +++ b/shell/applets/BluetoothApplet.qml @@ -5,9 +5,6 @@ Column { id: root required property color accentColor - property bool active: true - onActiveChanged: if (active) - S.BluetoothService.refresh() Repeater { model: S.BluetoothService.devices diff --git a/shell/applets/CpuApplet.qml b/shell/applets/CpuApplet.qml index 70e43d9..2068cce 100644 --- a/shell/applets/CpuApplet.qml +++ b/shell/applets/CpuApplet.qml @@ -12,19 +12,6 @@ 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/applets/NetworkApplet.qml b/shell/applets/NetworkApplet.qml index 749d950..2344e7d 100644 --- a/shell/applets/NetworkApplet.qml +++ b/shell/applets/NetworkApplet.qml @@ -5,9 +5,6 @@ Column { id: root required property color accentColor - property bool active: true - onActiveChanged: if (active) - S.NetworkService.refresh() Repeater { model: S.NetworkService.networks diff --git a/shell/dock/AppletDock.qml b/shell/dock/AppletDock.qml index c38bbbb..a9f2285 100644 --- a/shell/dock/AppletDock.qml +++ b/shell/dock/AppletDock.qml @@ -251,7 +251,7 @@ PanelWindow { devices: S.SystemStats.tempDevices accentColor: root._accent deviceFilter: S.Modules.temperature.device || "" - active: parent.expanded + active: parent.parent.expanded } } @@ -296,7 +296,6 @@ PanelWindow { C.NetworkApplet { width: parent.width accentColor: root._accent - active: parent.expanded } } @@ -311,7 +310,6 @@ PanelWindow { C.BluetoothApplet { width: parent.width accentColor: root._accent - active: parent.expanded } } @@ -376,7 +374,6 @@ 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/dock/DockCard.qml b/shell/dock/DockCard.qml index d946cd1..5a496b9 100644 --- a/shell/dock/DockCard.qml +++ b/shell/dock/DockCard.qml @@ -89,10 +89,9 @@ Rectangle { } } - // Content area - expanded propagated so children can bind `active: parent.expanded` + // Content area Column { id: _contentColumn - property bool expanded: root.expanded anchors.top: _header.bottom anchors.topMargin: 4 width: parent.width diff --git a/shell/modules/BluetoothModule.qml b/shell/modules/BluetoothModule.qml index 5d0ea98..347a614 100644 --- a/shell/modules/BluetoothModule.qml +++ b/shell/modules/BluetoothModule.qml @@ -54,6 +54,9 @@ M.BarModule { } } + on_ShowPanelChanged: if (_showPanel) + S.BluetoothService.refresh() + Connections { target: S.BluetoothService function onDevicesChanged() { diff --git a/shell/modules/CpuModule.qml b/shell/modules/CpuModule.qml index dcc3099..9b89514 100644 --- a/shell/modules/CpuModule.qml +++ b/shell/modules/CpuModule.qml @@ -27,6 +27,18 @@ 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 0ad0673..7c9d60b 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: S.MprisService.cachedArt + cachedArt: root._cachedArt cavaBars: root._cavaBars playerIdx: S.MprisService.playerIdx onPlayerSwitched: idx => { @@ -35,6 +35,25 @@ 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/modules/NetworkModule.qml b/shell/modules/NetworkModule.qml index 2aa9dac..b434888 100644 --- a/shell/modules/NetworkModule.qml +++ b/shell/modules/NetworkModule.qml @@ -56,6 +56,9 @@ M.BarModule { readonly property string state: S.NetworkService.state + on_ShowPanelChanged: if (_showPanel) + S.NetworkService.refresh() + Connections { target: S.NetworkService function onNetworksChanged() { diff --git a/shell/services/MprisService.qml b/shell/services/MprisService.qml index d8533b5..5cb628f 100644 --- a/shell/services/MprisService.qml +++ b/shell/services/MprisService.qml @@ -118,18 +118,6 @@ 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]) diff --git a/test/qmllint-baseline.txt b/test/qmllint-baseline.txt index 708aa1d..83b42c3 100644 --- a/test/qmllint-baseline.txt +++ b/test/qmllint-baseline.txt @@ -18,6 +18,7 @@ shell/applets/PowerApplet.qml: Unqualified access [unqualified] shell/applets/TemperatureApplet.qml: Unqualified access [unqualified] shell/applets/VolumeApplet.qml: Unqualified access [unqualified] shell/dock/AppletDock.qml: Could not find property "top". [missing-property] +shell/dock/AppletDock.qml: Member "expanded" not found on type "QQuickItem" [missing-property] shell/dock/AppletDock.qml: Type margins is used but it is not resolved [unresolved-type] shell/dock/AppletDock.qml: Type PanelWindow is not creatable. [uncreatable-type] shell/dock/AppletDock.qml: unknown grouped property scope margins. [unqualified]