X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Flegacysystemtray.cpp;h=230b19df6aeaeb7ca5323a89cc8924880d966fd4;hp=9969800003af923570d2936bb8e74c5baea4cd9a;hb=d61e228c1d7bccaa117c7559fd8ca1975c6637cc;hpb=4476cfb22f36ad9ba96e4978c3bcce1c2f6b5a04 diff --git a/src/qtui/legacysystemtray.cpp b/src/qtui/legacysystemtray.cpp index 99698000..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,11 +42,13 @@ LegacySystemTray::LegacySystemTray(QWidget *parent) SLOT(on_activated(QSystemTrayIcon::ActivationReason))); #endif connect(_trayIcon, SIGNAL(messageClicked()), - SIGNAL(messageClicked())); + 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() { @@ -59,13 +62,24 @@ void LegacySystemTray::init() { 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(); @@ -76,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 { @@ -98,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(); @@ -124,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 */