From 6c37b6640c11d7b342315f908d1c805940b60d8f Mon Sep 17 00:00:00 2001 From: Damocles Date: Wed, 15 Apr 2026 20:02:46 +0200 Subject: [PATCH 1/2] perf: consolidate notif timeStr timers into one global tick; fix osd open-on-start --- modules/Backlight.qml | 5 ++++- modules/NotifItem.qml | 28 ++++++++-------------------- modules/NotifService.qml | 9 +++++++++ modules/Volume.qml | 9 +++++++-- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/modules/Backlight.qml b/modules/Backlight.qml index 0973603..8d7c5d3 100644 --- a/modules/Backlight.qml +++ b/modules/Backlight.qml @@ -12,9 +12,12 @@ M.BarSection { property int percent: 0 property bool _osdActive: false + property bool _ready: false readonly property bool _showPanel: root._hovered || hoverPanel.panelHovered || _osdActive - onPercentChanged: if (percent > 0) + Component.onCompleted: _ready = true + + onPercentChanged: if (_ready && percent > 0) _flashPanel() function _flashPanel() { diff --git a/modules/NotifItem.qml b/modules/NotifItem.qml index e24941f..1f5199f 100644 --- a/modules/NotifItem.qml +++ b/modules/NotifItem.qml @@ -29,29 +29,17 @@ QtObject { } } - // Relative time string - property string timeStr: "now" - readonly property Timer _timeStrTimer: Timer { - running: root.state !== "dismissed" - repeat: true - interval: 5000 - onTriggered: root._updateTimeStr() - } - - function _updateTimeStr() { - const diff = Date.now() - time; + // Relative time string — recomputed whenever NotifService._now ticks (single global 5s timer) + readonly property string timeStr: { + const diff = M.NotifService._now - time; const m = Math.floor(diff / 60000); - if (m < 1) { - timeStr = "now"; - return; - } + if (m < 1) + return "now"; const h = Math.floor(m / 60); - if (h < 1) { - timeStr = m + "m"; - return; - } + if (h < 1) + return m + "m"; const d = Math.floor(h / 24); - timeStr = d > 0 ? d + "d" : h + "h"; + return d > 0 ? d + "d" : h + "h"; } function beginDismiss() { diff --git a/modules/NotifService.qml b/modules/NotifService.qml index b266f94..0591eae 100644 --- a/modules/NotifService.qml +++ b/modules/NotifService.qml @@ -124,6 +124,15 @@ QtObject { } // Persistence + // Single global tick for all NotifItem.timeStr bindings — replaces per-item 5s timers + property real _now: Date.now() + property Timer _nowTimer: Timer { + running: root.count > 0 + repeat: true + interval: 5000 + onTriggered: root._now = Date.now() + } + property Timer _saveTimer: Timer { interval: 1000 onTriggered: { diff --git a/modules/Volume.qml b/modules/Volume.qml index b091a43..2aa5524 100644 --- a/modules/Volume.qml +++ b/modules/Volume.qml @@ -39,11 +39,16 @@ M.BarSection { } property bool _osdActive: false + property bool _ready: false readonly property bool _anyHover: root._hovered || hoverPanel.panelHovered readonly property bool _showPanel: _anyHover || _osdActive - onVolumeChanged: _flashPanel() - onMutedChanged: _flashPanel() + Component.onCompleted: _ready = true + + onVolumeChanged: if (_ready) + _flashPanel() + onMutedChanged: if (_ready) + _flashPanel() function _flashPanel() { _osdActive = true; From bc9eda464cd378b0454b9eb8a6df8e51e75bade1 Mon Sep 17 00:00:00 2001 From: Damocles Date: Wed, 15 Apr 2026 20:03:57 +0200 Subject: [PATCH 2/2] fix: preserve core row count when grace timer clears cpuCores --- modules/SystemStats.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/SystemStats.qml b/modules/SystemStats.qml index 372a103..a9fe320 100644 --- a/modules/SystemStats.qml +++ b/modules/SystemStats.qml @@ -21,7 +21,11 @@ QtObject { property var _coreGraceTimer: Timer { interval: 30000 - onTriggered: root.cpuCores = [] + onTriggered: root.cpuCores = root.cpuCores.map(() => ({ + "usage": 0, + "freq_ghz": 0, + "history": [] + })) } property var cpuCoreMaxFreq: [] property var cpuCoreTypes: []