diff --git a/libnotificationmanager/notifications.cpp b/libnotificationmanager/notifications.cpp --- a/libnotificationmanager/notifications.cpp +++ b/libnotificationmanager/notifications.cpp @@ -647,6 +647,27 @@ void Notifications::expire(const QModelIndex &idx) { + if (idx.data(Notifications::ExpiredRole).toBool()) { + return; + } + + if (Private::isGroup(idx)) { + const QModelIndex groupIdx = Utils::mapToModel(idx, d->groupingModel); + if (!groupIdx.isValid()) { + qCWarning(NOTIFICATIONMANAGER) << "Cannot expire: Failed to find group model index for this item"; + return; + } + + Q_ASSERT(groupIdx.model() == d->groupingModel); + + const int childCount = d->groupingModel->rowCount(groupIdx); + for (int i = childCount - 1; i >= 0; --i) { + const QModelIndex childIdx = d->groupingModel->index(i, 0, groupIdx); + expire(childIdx); + } + return; + } + switch (static_cast(idx.data(Notifications::TypeRole).toInt())) { case Notifications::NotificationType: d->notificationsModel->expire(Private::notificationId(idx));