service/notifications: make notifications Retainable

This commit is contained in:
outfoxxed 2024-07-12 21:25:46 -07:00
parent 609834d8f2
commit e23923d9a2
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
3 changed files with 19 additions and 2 deletions

View file

@ -39,6 +39,11 @@ QString NotificationAction::identifier() const { return this->mIdentifier; }
QString NotificationAction::text() const { return this->mText; }
void NotificationAction::invoke() {
if (this->notification->isRetained()) {
qCritical() << "Cannot invoke destroyed notification" << this;
return;
}
NotificationServer::instance()->ActionInvoked(this->notification->id(), this->mIdentifier);
if (!this->notification->isResident()) {
@ -57,6 +62,11 @@ void Notification::expire() { this->close(NotificationCloseReason::Expired); }
void Notification::dismiss() { this->close(NotificationCloseReason::Dismissed); }
void Notification::close(NotificationCloseReason::Enum reason) {
if (this->isRetained()) {
qCritical() << "Cannot close destroyed notification" << this;
return;
}
this->mCloseReason = reason;
if (reason != 0) {

View file

@ -8,6 +8,8 @@
#include <qqmlintegration.h>
#include <qtmetamacros.h>
#include "../../core/retainable.hpp"
namespace qs::service::notifications {
class NotificationImage;
@ -50,7 +52,12 @@ public:
class NotificationAction;
///! A notification emitted by a NotificationServer.
class Notification: public QObject {
/// A notification emitted by a NotificationServer.
/// > [!INFO] This type is [Retainable](/docs/types/quickshell/retainable). It
/// > can be retained after destruction if necessary.
class Notification
: public QObject
, public Retainable {
Q_OBJECT;
/// Id of the notification as given to the client.
Q_PROPERTY(quint32 id READ id CONSTANT);

View file

@ -105,7 +105,7 @@ void NotificationServer::deleteNotification(
this->idMap.remove(notification->id());
emit this->NotificationClosed(notification->id(), reason);
delete notification;
notification->retainedDestroy();
}
void NotificationServer::tryRegister() {