diff --git a/modules/NotifCenter.qml b/modules/NotifCenter.qml index c96de2d..d81261f 100644 --- a/modules/NotifCenter.qml +++ b/modules/NotifCenter.qml @@ -133,7 +133,7 @@ M.PopupPanel { // Notification list Repeater { - model: M.NotifService.list.slice(0, 20) + model: M.NotifService.active.slice(0, 20) delegate: Item { id: notifItem diff --git a/modules/NotifService.qml b/modules/NotifService.qml index 38a45d6..62f197c 100644 --- a/modules/NotifService.qml +++ b/modules/NotifService.qml @@ -12,23 +12,26 @@ QtObject { property var list: [] property bool dnd: false - readonly property var popups: list.filter(n => n.popup) - readonly property int count: list.length + readonly property var active: list.filter(n => !n.closed) + readonly property var popups: list.filter(n => n.popup && !n.closed) + readonly property int count: active.length function dismiss(notifId) { - const idx = list.findIndex(n => n.id === notifId); - if (idx >= 0) { - const n = list[idx]; + const n = list.find(n => n.id === notifId); + if (n) { + n.popup = false; + n.closed = true; n.notification?.dismiss(); - list.splice(idx, 1); _changed(); } } function dismissAll() { - for (const n of list.slice()) + for (const n of list.slice()) { + n.popup = false; + n.closed = true; n.notification?.dismiss(); - list = []; + } _changed(); } @@ -82,7 +85,7 @@ QtObject { // Dismiss excess popups (keep in history, just hide popup) const max = M.Modules.notifications.maxPopups || 4; - const currentPopups = root.list.filter(n => n.popup); + const currentPopups = root.list.filter(n => n.popup && !n.closed); if (currentPopups.length > max) { for (let i = max; i < currentPopups.length; i++) currentPopups[i].popup = false; @@ -120,7 +123,7 @@ QtObject { property Timer _saveTimer: Timer { interval: 1000 onTriggered: { - const data = root.list.map(n => ({ + const data = root.active.map(n => ({ id: n.id, summary: n.summary, body: n.body, @@ -139,10 +142,7 @@ QtObject { onLoaded: { try { const data = JSON.parse(text()); - for (let i = 0; i < data.length; i++) { - const n = data[i]; - // Prefix persisted IDs to avoid collision with live D-Bus IDs - n.id = "p_" + (n.id ?? i) + "_" + n.time; + for (const n of data) { n.popup = false; n.closed = false; n.notification = null;