X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Findicatornotificationbackend.cpp;h=41fce5cbdb50fe54b0466194965dd0d2fe84316b;hp=0637004ac17136f7571a346bf484e8b422f3a8af;hb=3efffa2c3f687b21c8040e9a7ee3830e8f539abf;hpb=7156691fecfbc44a67d0ec6055d2e892a7eb42de diff --git a/src/qtui/indicatornotificationbackend.cpp b/src/qtui/indicatornotificationbackend.cpp index 0637004a..41fce5cb 100644 --- a/src/qtui/indicatornotificationbackend.cpp +++ b/src/qtui/indicatornotificationbackend.cpp @@ -21,13 +21,18 @@ #include "indicatornotificationbackend.h" #include -#include +#include +#include "client.h" #include "clientsettings.h" #include "mainwin.h" +#include "networkmodel.h" #include "qtui.h" -class Indicator : public QIndicate::IndicatorMessage { +#define STR(x) #x +#define XSTR(x) STR(x) + +class Indicator : public QIndicate::Indicator { public: uint lastNotificationId; }; @@ -36,13 +41,18 @@ IndicatorNotificationBackend::IndicatorNotificationBackend(QObject *parent) : AbstractNotificationBackend(parent) { NotificationSettings notificationSettings; - _enabled = notificationSettings.value("Indicator/Enabled", true).toBool(); + _enabled = notificationSettings.value("Indicator/Enabled", false).toBool(); notificationSettings.notify("Indicator/Enabled", this, SLOT(enabledChanged(const QVariant &))); _server = QIndicate::Server::defaultInstance(); - _server->setType("message.im"); - _server->setDesktopFile(DESKTOP_FILE); + _server->setType("message.irc"); + QString desktopFile = QString("%1/%2.desktop") + .arg(XSTR(XDG_APPS_INSTALL_DIR)) + .arg(QCoreApplication::applicationFilePath().section('/', -1)); + _server->setDesktopFile(desktopFile); + connect(_server, SIGNAL(serverDisplay()), QtUi::mainWindow(), SLOT(forceActivated())); + if (_enabled) { _server->show(); } @@ -59,15 +69,37 @@ void IndicatorNotificationBackend::notify(const Notification ¬ification) { if (notification.type != Highlight && notification.type != PrivMsg) { return; } - Indicator *indicator = _indicatorHash.value(notification.bufferId); + BufferId bufferId = notification.bufferId; + Indicator *indicator = _indicatorHash.value(bufferId); if(!indicator) { indicator = new Indicator; - _indicatorHash.insert(notification.bufferId, indicator); + _indicatorHash.insert(bufferId, indicator); + connect(indicator, SIGNAL(display(QIndicate::Indicator*)), + SLOT(indicatorDisplayed(QIndicate::Indicator*))); } indicator->lastNotificationId = notification.notificationId; - indicator->setProperty("sender", notification.sender); - indicator->setProperty("time", QTime::currentTime()); - qDebug() << "FIXME icon"; + + BufferInfo::Type type = Client::networkModel()->bufferType(bufferId); + QString name; + if (type == BufferInfo::QueryBuffer) { + name = notification.sender; + } else { + name = QString("%1 (%2)") + .arg(Client::networkModel()->bufferName(bufferId)) + .arg(notification.sender); + } + indicator->setNameProperty(name); + + indicator->setTimeProperty(QDateTime::currentDateTime()); + + QModelIndex index = Client::networkModel()->bufferIndex(bufferId); + QVariant icon = QtUi::style()->bufferViewItemData(index, Qt::DecorationRole); + if (icon.canConvert()) { + QImage image = icon.value().toImage(); + indicator->setIconProperty(image); + } + + indicator->setDrawAttentionProperty(true); indicator->show(); } @@ -103,6 +135,11 @@ void IndicatorNotificationBackend::enabledChanged(const QVariant &v) { } } +void IndicatorNotificationBackend::indicatorDisplayed(QIndicate::Indicator *_indicator) { + Indicator *indicator = static_cast(_indicator); + emit activated(indicator->lastNotificationId); +} + SettingsPage *IndicatorNotificationBackend::createConfigWidget() const { return new ConfigWidget(); }