X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Flegacysystemtray.cpp;h=230b19df6aeaeb7ca5323a89cc8924880d966fd4;hb=37112539ef48c17968eb2d55fb8fc76b20329040;hp=18bf02c46046519e0e02779931037e5dade2b8b9;hpb=d452877910888c25d40590b5fff57eb8197ca9b0;p=quassel.git
diff --git a/src/qtui/legacysystemtray.cpp b/src/qtui/legacysystemtray.cpp
index 18bf02c4..230b19df 100644
--- a/src/qtui/legacysystemtray.cpp
+++ b/src/qtui/legacysystemtray.cpp
@@ -21,12 +21,13 @@
#ifndef QT_NO_SYSTEMTRAYICON
#include "legacysystemtray.h"
+#include "mainwin.h"
#include "qtui.h"
LegacySystemTray::LegacySystemTray(QWidget *parent)
: SystemTray(parent),
_blinkState(false),
- _isVisible(true)
+ _lastMessageId(0)
{
#ifndef HAVE_KDE
_trayIcon = new QSystemTrayIcon(associatedWidget());
@@ -41,14 +42,13 @@ LegacySystemTray::LegacySystemTray(QWidget *parent)
SLOT(on_activated(QSystemTrayIcon::ActivationReason)));
#endif
connect(_trayIcon, SIGNAL(messageClicked()),
- SIGNAL(messageClicked()));
-
- setTrayMenu(_trayIcon->contextMenu());
- _trayIcon->setContextMenu(trayMenu());
+ SLOT(on_messageClicked()));
_blinkTimer.setInterval(500);
_blinkTimer.setSingleShot(false);
connect(&_blinkTimer, SIGNAL(timeout()), SLOT(on_blinkTimeout()));
+
+ connect(this, SIGNAL(toolTipChanged(QString,QString)), SLOT(syncLegacyIcon()));
}
void LegacySystemTray::init() {
@@ -56,17 +56,30 @@ void LegacySystemTray::init() {
setMode(Legacy);
SystemTray::init();
+
+ _trayIcon->setContextMenu(trayMenu());
}
void LegacySystemTray::syncLegacyIcon() {
_trayIcon->setIcon(stateIcon());
- _trayIcon->setToolTip(toolTipTitle());
+
+#if defined Q_WS_MAC || defined Q_WS_WIN
+ QString tooltip = QString("%1").arg(toolTipTitle());
+ if(!toolTipSubTitle().isEmpty())
+ tooltip += QString("\n%1").arg(toolTipSubTitle());
+#else
+ QString tooltip = QString("%1").arg(toolTipTitle());
+ if(!toolTipSubTitle().isEmpty())
+ tooltip += QString("
%1").arg(toolTipSubTitle());
+#endif
+
+ _trayIcon->setToolTip(tooltip);
}
void LegacySystemTray::setVisible(bool visible) {
- _isVisible = visible;
+ SystemTray::setVisible(visible);
if(mode() == Legacy) {
- if(visible)
+ if(shouldBeVisible())
_trayIcon->show();
else
_trayIcon->hide();
@@ -77,16 +90,21 @@ bool LegacySystemTray::isVisible() const {
if(mode() == Legacy) {
return _trayIcon->isVisible();
}
- return false;
+ return SystemTray::isVisible();
}
void LegacySystemTray::setMode(Mode mode_) {
+ if(mode_ == mode())
+ return;
+
SystemTray::setMode(mode_);
if(mode() == Legacy) {
syncLegacyIcon();
- if(_isVisible)
+ if(shouldBeVisible())
_trayIcon->show();
+ else
+ _trayIcon->hide();
if(state() == NeedsAttention)
_blinkTimer.start();
} else {
@@ -99,7 +117,7 @@ void LegacySystemTray::setState(State state_) {
State oldstate = state();
SystemTray::setState(state_);
if(oldstate != state()) {
- if(state() == NeedsAttention && mode() == Legacy)
+ if(state() == NeedsAttention && mode() == Legacy && animationEnabled())
_blinkTimer.start();
else {
_blinkTimer.stop();
@@ -125,8 +143,24 @@ void LegacySystemTray::on_activated(QSystemTrayIcon::ActivationReason reason) {
activate((SystemTray::ActivationReason)reason);
}
-void LegacySystemTray::showMessage(const QString &title, const QString &message, SystemTray::MessageIcon icon, int millisecondsTimeoutHint) {
- _trayIcon->showMessage(title, message, (QSystemTrayIcon::MessageIcon)icon, millisecondsTimeoutHint);
+void LegacySystemTray::on_messageClicked() {
+ emit messageClicked(_lastMessageId);
+}
+
+void LegacySystemTray::showMessage(const QString &title, const QString &message, SystemTray::MessageIcon icon, int msTimeout, uint id) {
+ // fancy stuff later: show messages in order
+ // for now, we just show the last message
+ _lastMessageId = id;
+ _trayIcon->showMessage(title, message, (QSystemTrayIcon::MessageIcon)icon, msTimeout);
+}
+
+void LegacySystemTray::closeMessage(uint notificationId) {
+ Q_UNUSED(notificationId)
+
+ // there really seems to be no sane way to close the bubble... :(
+#ifdef Q_WS_X11
+ showMessage("", "", NoIcon, 1);
+#endif
}
#endif /* QT_NO_SYSTEMTRAYICON */