diff --git a/src/notificationhandler.cpp b/src/notificationhandler.cpp --- a/src/notificationhandler.cpp +++ b/src/notificationhandler.cpp @@ -21,6 +21,7 @@ #include "transfer.h" #include +#include #include #include @@ -54,7 +55,7 @@ if (message.isEmpty()) { - KNotification::event(QLatin1String("message"), eventTitle, QString(QStringLiteral("<%1>")).arg(fromNick), QPixmap(), m_mainWindow); + auto msg = KNotification::event(QLatin1String("message"), eventTitle, QStringLiteral("<%1>").arg(fromNick), QPixmap(), m_mainWindow); if (osd) { @@ -98,9 +99,10 @@ QString eventTitle = i18nc("Notification title; see Event/nick in konversation.notifyrc", "Your nick was mentioned by %1 in %2", fromNick, chatWin->getName()); + KNotification* msg; if (message.isEmpty()) { - KNotification::event(QLatin1String("nick"), eventTitle, QString(QStringLiteral("<%1>")).arg(fromNick), QPixmap(), m_mainWindow); + msg = KNotification::event(QLatin1String("nick"), eventTitle, QString(QStringLiteral("<%1>")).arg(fromNick), QPixmap(), m_mainWindow); if (osd) { @@ -114,7 +116,7 @@ QString cleanedMessage = removeIrcMarkup(message); QString forKNotify = cleanedMessage.toHtmlEscaped(); - KNotification::event(QLatin1String("nick"), eventTitle, QString(QStringLiteral("<%1> %2")).arg(fromNick).arg(forKNotify), QPixmap(), m_mainWindow); + msg = KNotification::event(QLatin1String("nick"), eventTitle, QString(QStringLiteral("<%1> %2")).arg(fromNick).arg(forKNotify), QPixmap(), m_mainWindow); if (osd) { @@ -124,6 +126,9 @@ } } + msg->setDefaultAction(i18n("Open")); + connect(msg, static_cast(&KNotification::activated), chatWin, &ChatWindow::activateView); + startTrayNotification(chatWin); } @@ -141,9 +146,10 @@ QString eventTitle = i18nc("Notification title; see Event/message in konversation.notifyrc", "New query message from %1", chatWin->getName()); + KNotification* msg; if (message.isEmpty()) // TODO document how this can happen, seems nonsensical { - KNotification::event(QLatin1String("queryMessage"), eventTitle, QString(QStringLiteral("<%1>")).arg(fromNick), QPixmap(), m_mainWindow); + msg = KNotification::event(QLatin1String("queryMessage"), eventTitle, QString(QStringLiteral("<%1>")).arg(fromNick), QPixmap(), m_mainWindow); if (osd) { @@ -157,7 +163,7 @@ QString cleanedMessage = removeIrcMarkup(message); QString forKNotify = cleanedMessage.toHtmlEscaped(); - KNotification::event(QLatin1String("queryMessage"), eventTitle, QString(QStringLiteral("<%1> %2")).arg(fromNick).arg(forKNotify), QPixmap(), m_mainWindow); + msg = KNotification::event(QLatin1String("queryMessage"), eventTitle, QString(QStringLiteral("<%1> %2")).arg(fromNick).arg(forKNotify), QPixmap(), m_mainWindow); if (osd) { @@ -167,6 +173,9 @@ } } + msg->setDefaultAction(i18n("Open")); + connect(msg, static_cast(&KNotification::activated), chatWin, &ChatWindow::activateView); + startTrayNotification(chatWin); } diff --git a/src/viewer/chatwindow.h b/src/viewer/chatwindow.h --- a/src/viewer/chatwindow.h +++ b/src/viewer/chatwindow.h @@ -139,6 +139,7 @@ void setMargin(int margin) { layout()->setMargin(margin); } void setSpacing(int spacing) { layout()->setSpacing(spacing); } + void activateView(); Q_SIGNALS: void nameChanged(ChatWindow* view, const QString& newName); @@ -153,6 +154,7 @@ void clearStatusBarTempText(); void closing(ChatWindow* myself); + void showView(ChatWindow* myself); public Q_SLOTS: void updateAppearance(); diff --git a/src/viewer/chatwindow.cpp b/src/viewer/chatwindow.cpp --- a/src/viewer/chatwindow.cpp +++ b/src/viewer/chatwindow.cpp @@ -745,4 +745,14 @@ } } +void ChatWindow::activateView() +{ + for(QWidget* widget = this; widget; widget = widget->parentWidget()) { + if (widget->window()) { + widget->show(); + widget->activateWindow(); + widget->raise(); + } + } +} diff --git a/src/viewer/viewcontainer.cpp b/src/viewer/viewcontainer.cpp --- a/src/viewer/viewcontainer.cpp +++ b/src/viewer/viewcontainer.cpp @@ -1429,6 +1429,7 @@ connect(view, SIGNAL(setStatusBarTempText(QString)), this, SIGNAL(setStatusBarTempText(QString))); connect(view, SIGNAL(clearStatusBarTempText()), this, SIGNAL(clearStatusBarTempText())); connect(view, SIGNAL(closing(ChatWindow*)), this, SLOT(cleanupAfterClose(ChatWindow*))); + connect(view, SIGNAL(showView(ChatWindow*)), this, SLOT(showView(ChatWindow*))); switch (view->getType()) {