X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fdesktopnotificationbackend.cpp;h=dedade7017fbfc91335ddc396363409e72287954;hp=a703f6af2d70a5f341762d82808e2e0de4f408b2;hb=42ff4d2a759746ccd65440a0dfc2e233e0b777ed;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/qtui/desktopnotificationbackend.cpp b/src/qtui/desktopnotificationbackend.cpp index a703f6af..dedade70 100644 --- a/src/qtui/desktopnotificationbackend.cpp +++ b/src/qtui/desktopnotificationbackend.cpp @@ -27,17 +27,22 @@ #include "networkmodel.h" DesktopNotificationBackend::DesktopNotificationBackend(QObject *parent) - : AbstractNotificationBackend(parent) + : AbstractNotificationBackend(parent), + _lastDbusId(0) { _dbusInterface = new org::freedesktop::Notifications( "org.freedesktop.Notifications", "/org/freedesktop/Notifications", QDBusConnection::sessionBus(), this); + if(!_dbusInterface->isValid()) { + qWarning() << "DBus notification service not available!"; + return; + } + QStringList desktopCapabilities = _dbusInterface->GetCapabilities(); _daemonSupportsMarkup = desktopCapabilities.contains("body-markup"); - _lastDbusId = 0; connect(_dbusInterface, SIGNAL(NotificationClosed(uint, uint)), SLOT(desktopNotificationClosed(uint, uint))); connect(_dbusInterface, SIGNAL(ActionInvoked(uint, const QString &)), SLOT(desktopNotificationInvoked(uint, const QString&))); @@ -88,7 +93,7 @@ void DesktopNotificationBackend::useTimeoutChanged(const QVariant &v) { } void DesktopNotificationBackend::notify(const Notification &n) { - if(_enabled) { + if(_enabled && _dbusInterface->isValid() && (n.type == Highlight || n.type == PrivMsg)) { QStringList actions; QMap hints; @@ -99,7 +104,7 @@ void DesktopNotificationBackend::notify(const Notification &n) { uint oldId = _queueNotifications ? 0 : _lastDbusId; - // actions << "click" << "Click Me!"; + actions << "activate" << "View"; QString title = Client::networkModel()->networkName(n.bufferId) + " - " + Client::networkModel()->bufferName(n.bufferId); QString message = QString("<%1> %2").arg(n.sender, n.message); @@ -147,7 +152,14 @@ void DesktopNotificationBackend::desktopNotificationClosed(uint id, uint reason) void DesktopNotificationBackend::desktopNotificationInvoked(uint id, const QString & action) { - Q_UNUSED(id); Q_UNUSED(action); + Q_UNUSED(action); + foreach(uint ourid, _idMap.keys()) { + if(_idMap.value(ourid) != id) + continue; + emit activated(ourid); + return; + } + emit activated(); }