X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=7d22ac6f89f1fc486cfdf794fa8b26bbf17b4724;hp=d426e4e7781c7343333315c5b7addfc0534e71eb;hb=5931bed270b86e110480561a2bf665dc59747280;hpb=6579cd49c867ce3fb6c99127851a881ea82d1b1b diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index d426e4e7..7d22ac6f 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -65,6 +65,8 @@ #include "global.h" #include "qtuistyle.h" +#include "desktopnotifications.h" + MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), @@ -80,7 +82,12 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) timer(new QTimer(this)), channelListDlg(new ChannelListDlg(this)), settingsDlg(new SettingsDlg(this)), - debugConsole(new DebugConsole(this)) + debugConsole(new DebugConsole(this)), + desktopNotifications(new org::freedesktop::Notifications( + "org.freedesktop.Notifications", + "/org/freedesktop/Notifications", + QDBusConnection::sessionBus(), this)), + notificationId(0) { UiSettings uiSettings; loadTranslation(uiSettings.value("Locale", QLocale::system()).value()); @@ -101,6 +108,14 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) installEventFilter(new JumpKeyHandler(this)); + UiSettings uiSettings; + QString style = uiSettings.value("Style", QString("")).toString(); + if(style != "") { + QApplication::setStyle(style); + } + + connect(desktopNotifications, SIGNAL(NotificationClosed(uint, uint)), this, SLOT(desktopNotificationClosed(uint, uint))); + connect(desktopNotifications, SIGNAL(ActionInvoked(uint, const QString&)), this, SLOT(desktopNotificationInvoked(uint, const QString&))); } void MainWin::init() { @@ -415,7 +430,7 @@ void MainWin::connectedToCore() { connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigAdded(int)), this, SLOT(addBufferView(int))); connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigDeleted(int)), this, SLOT(removeBufferView(int))); connect(Client::bufferViewManager(), SIGNAL(initDone()), this, SLOT(loadLayout())); - + foreach(BufferInfo id, Client::allBufferInfos()) { Client::backlogManager()->requestBacklog(id.bufferId(), 500, -1); } @@ -594,10 +609,13 @@ void MainWin::receiveMessage(const Message &msg) { UiSettings uiSettings; #ifndef SPUTDEV - if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) { + bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool(); + bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool(); + if(displayBubble || displayDesktop) { // FIXME don't invoke style engine for this! QString text = QtUi::style()->styleString(Message::mircToInternal(msg.contents())).plainText; - displayTrayIconMessage(title, text); + if (displayBubble) displayTrayIconMessage(title, text); + if (displayDesktop) sendDesktopNotification(title, text); } #endif if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) { @@ -613,6 +631,59 @@ bool MainWin::event(QEvent *event) { return QMainWindow::event(event); } + +/* +Using the notification-daemon from Freedesktop's Galago project +http://www.galago-project.org/specs/notification/0.9/x408.html#command-notify +*/ +void MainWin::sendDesktopNotification(const QString &title, const QString &message) +{ + QStringList actions; + QMap hints; + UiSettings uiSettings; + + hints["x"] = uiSettings.value("NotificationDesktopHintX", QVariant(0)).toInt(); // Standard hint: x location for the popup to show up + hints["y"] = uiSettings.value("NotificationDesktopHintY", QVariant(0)).toInt(); // Standard hint: y location for the popup to show up + + actions << "click" << "Click Me!"; + + QDBusReply reply = desktopNotifications->Notify( + "Quassel", // Application name + notificationId, // ID of previous notification to replace + "", // Icon to display + title, // Summary / Header of the message to display + QString("%1: %2:\n%3").arg(QTime::currentTime().toString()).arg(title).arg(message), // Body of the message to display + actions, // Actions from which the user may choose + hints, // Hints to the server displaying the message + uiSettings.value("NotificationDesktopTimeout", QVariant(5000)).toInt() // Timeout in milliseconds + ); + + if (!reply.isValid()) + { + /* ERROR */ + qDebug() << "Error on sending notification..."; + return; + } + + notificationId = reply.value(); + + qDebug() << "ID: " << notificationId << " Time: " << QTime::currentTime().toString(); +} + + +void MainWin::desktopNotificationClosed(uint id, uint reason) +{ + qDebug() << "OID: " << notificationId << " ID: " << id << " Reason: " << reason << " Time: " << QTime::currentTime().toString(); + notificationId = 0; +} + + +void MainWin::desktopNotificationInvoked(uint id, const QString & action) +{ + qDebug() << "OID: " << notificationId << " ID: " << id << " Action: " << action << " Time: " << QTime::currentTime().toString(); +} + + void MainWin::displayTrayIconMessage(const QString &title, const QString &message) { systray->showMessage(title, message); }