X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fdesktopnotificationbackend.cpp;h=dedade7017fbfc91335ddc396363409e72287954;hb=32dee9bed2840534e41764a6ba759d425837b8a2;hp=e959f528e72e38f29b2fc431c3333fa0e16ae715;hpb=7d252c0e8aa2728d9a57130c7aae8923c5321542;p=quassel.git diff --git a/src/qtui/desktopnotificationbackend.cpp b/src/qtui/desktopnotificationbackend.cpp index e959f528..dedade70 100644 --- a/src/qtui/desktopnotificationbackend.cpp +++ b/src/qtui/desktopnotificationbackend.cpp @@ -1,5 +1,5 @@ /*************************************************************************** -* Copyright (C) 2005-08 by the Quassel Project * +* Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -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,15 @@ 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(); } SettingsPage *DesktopNotificationBackend::createConfigWidget() const {