diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index cf44ae00..349f8fde 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -1640,3 +1640,11 @@ ChatPage::isRoomActive(const QString &room_id)
return QGuiApplication::focusWindow() && QGuiApplication::focusWindow()->isActive() &&
MainWindow::instance()->windowForRoom(room_id) == QGuiApplication::focusWindow();
}
+
+#if defined (Q_OS_LINUX)
+void
+ChatPage::removeAllNotifications()
+{
+ notificationsManager->closeAllNotifications();
+}
+#endif
diff --git a/src/ChatPage.h b/src/ChatPage.h
index 0ac39faa..e6375be8 100644
--- a/src/ChatPage.h
+++ b/src/ChatPage.h
@@ -84,6 +84,10 @@ public:
return pushrules;
}
+#if defined(Q_OS_LINUX)
+ void removeAllNotifications();
+#endif
+
public slots:
bool handleMatrixUri(QString uri);
bool handleMatrixUri(const QUrl &uri);
diff --git a/src/TrayIcon.cpp b/src/TrayIcon.cpp
index 1e33ac8d..76ccb8fc 100644
--- a/src/TrayIcon.cpp
+++ b/src/TrayIcon.cpp
@@ -15,6 +15,9 @@
#include "TrayIcon.h"
+#if defined(Q_OS_LINUX)
+#include "ChatPage.h"
+#endif
#if defined(Q_OS_MAC)
#include <QtMacExtras>
#endif
@@ -119,7 +122,12 @@ TrayIcon::TrayIcon(const QString &filename, QWindow *parent)
quitAction_ = new QAction(tr("Quit"), this);
connect(viewAction_, &QAction::triggered, parent, &QWindow::show);
- connect(quitAction_, &QAction::triggered, this, QApplication::quit);
+ connect(quitAction_, &QAction::triggered, this, [=] {
+#if defined(Q_OS_LINUX)
+ ChatPage::instance()->removeAllNotifications();
+#endif
+ QApplication::quit();
+ });
menu->addAction(viewAction_);
menu->addAction(quitAction_);
diff --git a/src/notifications/Manager.h b/src/notifications/Manager.h
index bf7af29b..70a03345 100644
--- a/src/notifications/Manager.h
+++ b/src/notifications/Manager.h
@@ -55,6 +55,9 @@ public slots:
#if defined(NHEKO_DBUS_SYS)
public:
void closeNotifications(QString roomId);
+#if defined(Q_OS_LINUX)
+ void closeAllNotifications();
+#endif
private:
QDBusInterface dbus;
diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp
index 294df4db..c694d88f 100644
--- a/src/notifications/ManagerLinux.cpp
+++ b/src/notifications/ManagerLinux.cpp
@@ -271,3 +271,12 @@ NotificationsManager::notificationClosed(uint id, uint reason)
Q_UNUSED(reason);
notificationIds.remove(id);
}
+
+void
+NotificationsManager::closeAllNotifications()
+{
+ for (auto id : notificationIds.keys()) {
+ closeNotification(id);
+ notificationIds.remove(id);
+ }
+}
|