summary refs log tree commit diff
path: root/src/notifications/ManagerLinux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/notifications/ManagerLinux.cpp')
-rw-r--r--src/notifications/ManagerLinux.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp

index b9eca1a8..b5e9a6a4 100644 --- a/src/notifications/ManagerLinux.cpp +++ b/src/notifications/ManagerLinux.cpp
@@ -28,6 +28,12 @@ NotificationsManager::NotificationsManager(QObject *parent) "NotificationClosed", this, SLOT(notificationClosed(uint, uint))); + QDBusConnection::sessionBus().connect("org.freedesktop.Notifications", + "/org/freedesktop/Notifications", + "org.freedesktop.Notifications", + "NotificationReplied", + this, + SLOT(notificationReplied(uint, QString))); } void @@ -56,14 +62,19 @@ NotificationsManager::showNotification(const QString summary, hints["image-data"] = image; hints["sound-name"] = "message-new-instant"; QList<QVariant> argumentList; - argumentList << "nheko"; // app_name - argumentList << (uint)0; // replace_id - argumentList << ""; // app_icon - argumentList << summary; // summary - argumentList << text; // body - argumentList << (QStringList("default") << "reply"); // actions - argumentList << hints; // hints - argumentList << (int)-1; // timeout in ms + argumentList << "nheko"; // app_name + argumentList << (uint)0; // replace_id + argumentList << ""; // app_icon + argumentList << summary; // summary + argumentList << text; // body + // The list of actions has always the action name and then a localized version of that + // action. Currently we just use an empty string for that. + // TODO(Nico): Look into what to actually put there. + argumentList << (QStringList("default") << "" + << "inline-reply" + << ""); // actions + argumentList << hints; // hints + argumentList << (int)-1; // timeout in ms static QDBusInterface notifyApp("org.freedesktop.Notifications", "/org/freedesktop/Notifications", @@ -121,9 +132,20 @@ NotificationsManager::removeNotification(const QString &roomId, const QString &e void NotificationsManager::actionInvoked(uint id, QString action) { - if (action == "default" && notificationIds.contains(id)) { + if (notificationIds.contains(id)) { + roomEventId idEntry = notificationIds[id]; + if (action == "default") { + emit notificationClicked(idEntry.roomId, idEntry.eventId); + } + } +} + +void +NotificationsManager::notificationReplied(uint id, QString reply) +{ + if (notificationIds.contains(id)) { roomEventId idEntry = notificationIds[id]; - emit notificationClicked(idEntry.roomId, idEntry.eventId); + emit sendNotificationReply(idEntry.roomId, idEntry.eventId, reply); } }