diff --git a/src/notifications/manager.h b/src/notifications/manager.h index 5e7888fc6..62219e465 100644 --- a/src/notifications/manager.h +++ b/src/notifications/manager.h @@ -27,6 +27,7 @@ class NotificationsManager : public QObject { private: #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) QDBusInterface dbus; + bool serverSupportsHtml = false; uint showNotification(const QString summary, const QString text, const QImage image); diff --git a/src/notifications/managerlinux.cpp b/src/notifications/managerlinux.cpp index af9f8b94c..68c219231 100644 --- a/src/notifications/managerlinux.cpp +++ b/src/notifications/managerlinux.cpp @@ -5,6 +5,7 @@ #include #include #include +#include NotificationsManager::NotificationsManager(QObject *parent) : QObject(parent), @@ -13,6 +14,15 @@ NotificationsManager::NotificationsManager(QObject *parent) this) { qDBusRegisterMetaType(); + const QDBusReply capabilitiesReply = dbus.call("GetCapabilities"); + + if (capabilitiesReply.isValid()) { + const QStringList capabilities = capabilitiesReply.value(); + serverSupportsHtml = capabilities.contains("body-markup"); + } else { + qWarning() << "Could not get notification server capabilities" << capabilitiesReply.error(); + } + QDBusConnection::sessionBus().connect( "org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications", "ActionInvoked", this, @@ -54,6 +64,8 @@ uint NotificationsManager::showNotification(const QString summary, croppedImage = image; } + const QString body = serverSupportsHtml ? text.toHtmlEscaped() : text; + QVariantMap hints; hints["image-data"] = croppedImage; QList argumentList; @@ -61,7 +73,7 @@ uint NotificationsManager::showNotification(const QString summary, argumentList << uint(0); // replace_id argumentList << ""; // app_icon argumentList << summary; // summary - argumentList << text; // body + argumentList << body; // body argumentList << (QStringList("default") << "reply"); // actions argumentList << hints; // hints argumentList << int(-1); // timeout in ms