diff --git a/modules/Modules.qml b/modules/Modules.qml index 3b5f0e9..c385754 100644 --- a/modules/Modules.qml +++ b/modules/Modules.qml @@ -21,8 +21,7 @@ QtObject { }) property var notifications: ({ enable: true, - timeout: 3000, - maxPopups: 4 + timeout: 3000 }) property var mpris: ({ enable: true diff --git a/modules/NotifCenter.qml b/modules/NotifCenter.qml index 1c1e5eb..2507d56 100644 --- a/modules/NotifCenter.qml +++ b/modules/NotifCenter.qml @@ -58,42 +58,12 @@ M.PopupPanel { anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor - onClicked: menuWindow._cascadeDismiss() + onClicked: M.NotifService.dismissAll() } } } } - property var _delegates: [] - - function _cascadeDismiss() { - const dels = _delegates.filter(d => d && d.modelData && !d.modelData.closed); - for (let i = 0; i < dels.length; i++) { - const d = dels[i]; - const delay = i * 60; - Qt.callLater(() => { - _cascadeTimer.createObject(menuWindow, { - _target: d, - _delay: delay - }); - }); - } - } - - property Component _cascadeTimer: Component { - Timer { - property var _target - property int _delay - interval: _delay - running: true - onTriggered: { - if (_target && _target._dismissAnim) - _target._dismissAnim.start(); - destroy(); - } - } - } - // Separator Rectangle { width: menuWindow.panelWidth - 16 @@ -112,23 +82,10 @@ M.PopupPanel { required property int index width: menuWindow.panelWidth - height: _targetHeight * _heightScale + height: notifContent.height + 12 opacity: 0 - clip: true - - readonly property real _targetHeight: notifContent.height + 12 - property real _heightScale: 1 - - Component.onCompleted: { - menuWindow._delegates.push(notifItem); - fadeIn.start(); - } - Component.onDestruction: { - const idx = menuWindow._delegates.indexOf(notifItem); - if (idx >= 0) - menuWindow._delegates.splice(idx, 1); - } + Component.onCompleted: fadeIn.start() NumberAnimation { id: fadeIn target: notifItem @@ -136,6 +93,8 @@ M.PopupPanel { to: 1 duration: 150 easing.type: Easing.OutCubic + // Stagger by index + Component.onCompleted: fadeIn.from = 0 } Rectangle { @@ -283,34 +242,14 @@ M.PopupPanel { } } - SequentialAnimation { + NumberAnimation { id: _dismissAnim - ParallelAnimation { - NumberAnimation { - target: notifItem - property: "x" - to: menuWindow.panelWidth - duration: 200 - easing.type: Easing.InCubic - } - NumberAnimation { - target: notifItem - property: "opacity" - to: 0 - duration: 200 - easing.type: Easing.InCubic - } - } - NumberAnimation { - target: notifItem - property: "_heightScale" - to: 0 - duration: 150 - easing.type: Easing.OutCubic - } - ScriptAction { - script: M.NotifService.dismiss(notifItem.modelData.id) - } + target: notifItem + property: "opacity" + to: 0 + duration: 150 + easing.type: Easing.InCubic + onFinished: M.NotifService.dismiss(notifItem.modelData.id) } MouseArea { diff --git a/modules/NotifPopup.qml b/modules/NotifPopup.qml index 0720c85..09db576 100644 --- a/modules/NotifPopup.qml +++ b/modules/NotifPopup.qml @@ -34,7 +34,7 @@ PanelWindow { property var _knownIds: ({}) Repeater { - model: M.NotifService.popups.slice(0, M.Modules.notifications.maxPopups || 4) + model: M.NotifService.popups.slice(0, 4) delegate: Item { id: popupItem diff --git a/modules/NotifService.qml b/modules/NotifService.qml index 130dbd7..5e408fb 100644 --- a/modules/NotifService.qml +++ b/modules/NotifService.qml @@ -83,15 +83,6 @@ QtObject { root.list = [data, ...root.list]; - // Dismiss excess popups (keep in history, just hide popup) - const max = M.Modules.notifications.maxPopups || 4; - 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; - root._changed(); - } - // Auto-expire popup if (data.popup) { const timeout = notif.expireTimeout > 0 ? notif.expireTimeout : (M.Modules.notifications.timeout || 3000); diff --git a/nix/hm-module.nix b/nix/hm-module.nix index 35a68e4..e7487bb 100644 --- a/nix/hm-module.nix +++ b/nix/hm-module.nix @@ -98,11 +98,6 @@ in default = 3000; description = "Notification popup timeout in milliseconds."; }; - maxPopups = lib.mkOption { - type = lib.types.int; - default = 4; - description = "Maximum number of notification popups shown simultaneously."; - }; }; bluetooth = moduleOpt "bluetooth" (intervalOpt 5000); network = moduleOpt "network" (intervalOpt 5000); diff --git a/shell.qml b/shell.qml index 3fc3674..e4c4f64 100644 --- a/shell.qml +++ b/shell.qml @@ -19,11 +19,8 @@ ShellRoot { screen: scope.modelData } - LazyLoader { - active: (Modules.notifications.maxPopups ?? 4) > 0 - NotifPopup { - screen: scope.modelData - } + NotifPopup { + screen: scope.modelData } LazyLoader {