diff --git a/libnotificationmanager/notification.h b/libnotificationmanager/notification.h --- a/libnotificationmanager/notification.h +++ b/libnotificationmanager/notification.h @@ -101,6 +101,8 @@ Notifications::Urgency urgency() const; void setUrgency(Notifications::Urgency urgency); + bool userActionFeedback() const; + int timeout() const; void setTimeout(int timeout); diff --git a/libnotificationmanager/notification.cpp b/libnotificationmanager/notification.cpp --- a/libnotificationmanager/notification.cpp +++ b/libnotificationmanager/notification.cpp @@ -380,6 +380,12 @@ } } + userActionFeedback = hints.value(QStringLiteral("x-kde-user-action-feedback")).toBool(); + if (userActionFeedback) { + // A confirmation of an explicit user interaction is assumed to have been seen by the user. + read = true; + } + urls = QUrl::fromStringList(hints.value(QStringLiteral("x-kde-urls")).toStringList()); // Underscored hints was in use in version 1.1 of the spec but has been @@ -652,6 +658,11 @@ return d->urgency; } +bool Notification::userActionFeedback() const +{ + return d->userActionFeedback; +} + int Notification::timeout() const { return d->timeout; diff --git a/libnotificationmanager/notification_p.h b/libnotificationmanager/notification_p.h --- a/libnotificationmanager/notification_p.h +++ b/libnotificationmanager/notification_p.h @@ -90,6 +90,7 @@ QList urls; + bool userActionFeedback = false; Notifications::Urgency urgency = Notifications::NormalUrgency; int timeout = -1; diff --git a/libnotificationmanager/notificationfilterproxymodel.cpp b/libnotificationmanager/notificationfilterproxymodel.cpp --- a/libnotificationmanager/notificationfilterproxymodel.cpp +++ b/libnotificationmanager/notificationfilterproxymodel.cpp @@ -178,6 +178,11 @@ } } + const bool userActionFeedback = sourceIdx.data(Notifications::UserActionFeedbackRole).toBool(); + if (userActionFeedback) { + return true; + } + bool ok; const auto urgency = static_cast(sourceIdx.data(Notifications::UrgencyRole).toInt(&ok)); if (ok) { diff --git a/libnotificationmanager/notifications.h b/libnotificationmanager/notifications.h --- a/libnotificationmanager/notifications.h +++ b/libnotificationmanager/notifications.h @@ -257,7 +257,9 @@ ExpiredRole, ///< The notification timed out and closed. Actions on it cannot be invoked anymore. DismissedRole, ///< The notification got temporarily hidden by the user but could still be interacted with. - ReadRole ///< Whether the notification got read by the user. If true, the notification isn't considered unread even if created after lastRead. @since 5.17 + ReadRole, ///< Whether the notification got read by the user. If true, the notification isn't considered unread even if created after lastRead. @since 5.17 + + UserActionFeedbackRole, ///< Whether this notification is a response/confirmation to an explicit user action. @since 5.18 }; Q_ENUM(Roles) diff --git a/libnotificationmanager/notificationsmodel.cpp b/libnotificationmanager/notificationsmodel.cpp --- a/libnotificationmanager/notificationsmodel.cpp +++ b/libnotificationmanager/notificationsmodel.cpp @@ -300,6 +300,7 @@ case Notifications::UrlsRole: return QVariant::fromValue(notification.urls()); case Notifications::UrgencyRole: return static_cast(notification.urgency()); + case Notifications::UserActionFeedbackRole: return notification.userActionFeedback(); case Notifications::TimeoutRole: return notification.timeout();