X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Flegacysystemtray.cpp;h=3fa6f1fe41dc5f84a894f4a7a8793888520e0911;hp=16700d60788db10c161b4e0b7c302ca8235a8e82;hb=HEAD;hpb=b65b9f7615165e8700a44d59b7275a55558dd45b diff --git a/src/qtui/legacysystemtray.cpp b/src/qtui/legacysystemtray.cpp index 16700d60..43d5496b 100644 --- a/src/qtui/legacysystemtray.cpp +++ b/src/qtui/legacysystemtray.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This file is free software; you can redistribute it and/or modify * @@ -20,156 +20,90 @@ #ifndef QT_NO_SYSTEMTRAYICON -#include "legacysystemtray.h" -#include "mainwin.h" -#include "qtui.h" - -LegacySystemTray::LegacySystemTray(QWidget *parent) - : SystemTray(parent), - _blinkState(false), - _lastMessageId(0) -{ -#ifndef HAVE_KDE4 - _trayIcon = new QSystemTrayIcon(associatedWidget()); -#else - _trayIcon = new KSystemTrayIcon(associatedWidget()); - // We don't want to trigger a minimize if a highlight is pending, so we brutally remove the internal connection for that - disconnect(_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - _trayIcon, SLOT(activateOrHide(QSystemTrayIcon::ActivationReason))); -#endif -#ifndef Q_OS_MAC - connect(_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - SLOT(on_activated(QSystemTrayIcon::ActivationReason))); -#endif - connect(_trayIcon, 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())); -} +# include "legacysystemtray.h" +# include "icon.h" +# include "mainwin.h" +# include "qtui.h" -void LegacySystemTray::init() +LegacySystemTray::LegacySystemTray(QWidget* parent) + : SystemTray(parent) + , _trayIcon{new QSystemTrayIcon(associatedWidget())} { - if (mode() == Invalid) // derived class hasn't set a mode itself - setMode(Legacy); - - SystemTray::init(); +# ifndef Q_OS_MAC + connect(_trayIcon, &QSystemTrayIcon::activated, this, &LegacySystemTray::onActivated); +# endif + connect(_trayIcon, &QSystemTrayIcon::messageClicked, this, &LegacySystemTray::onMessageClicked); _trayIcon->setContextMenu(trayMenu()); -} + _trayIcon->setVisible(false); + setMode(Mode::Legacy); -void LegacySystemTray::syncLegacyIcon() -{ - _trayIcon->setIcon(stateIcon()); - -#if defined Q_OS_MAC || defined Q_OS_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 + connect(this, &SystemTray::visibilityChanged, this, &LegacySystemTray::onVisibilityChanged); + connect(this, &SystemTray::modeChanged, this, &LegacySystemTray::onModeChanged); + connect(this, &SystemTray::toolTipChanged, this, &LegacySystemTray::updateToolTip); + connect(this, &SystemTray::iconsChanged, this, &LegacySystemTray::updateIcon); + connect(this, &SystemTray::currentIconNameChanged, this, &LegacySystemTray::updateIcon); - _trayIcon->setToolTip(tooltip); + updateIcon(); + updateToolTip(); } - -void LegacySystemTray::setVisible(bool visible) +bool LegacySystemTray::isSystemTrayAvailable() const { - SystemTray::setVisible(visible); - if (mode() == Legacy) { - if (shouldBeVisible()) - _trayIcon->show(); - else - _trayIcon->hide(); - } + return mode() == Mode::Legacy ? QSystemTrayIcon::isSystemTrayAvailable() : SystemTray::isSystemTrayAvailable(); } - -bool LegacySystemTray::isVisible() const +void LegacySystemTray::onVisibilityChanged(bool isVisible) { if (mode() == Legacy) { - return _trayIcon->isVisible(); + _trayIcon->setVisible(isVisible); } - return SystemTray::isVisible(); } - -void LegacySystemTray::setMode(Mode mode_) +void LegacySystemTray::onModeChanged(Mode mode) { - if (mode_ == mode()) - return; - - SystemTray::setMode(mode_); - - if (mode() == Legacy) { - syncLegacyIcon(); - if (shouldBeVisible()) - _trayIcon->show(); - else - _trayIcon->hide(); - if (state() == NeedsAttention) - _blinkTimer.start(); + if (mode == Mode::Legacy) { + _trayIcon->setVisible(isVisible()); } else { _trayIcon->hide(); - _blinkTimer.stop(); } } - -void LegacySystemTray::setState(State state_) +void LegacySystemTray::updateIcon() { - State oldstate = state(); - SystemTray::setState(state_); - if (oldstate != state()) { - if (state() == NeedsAttention && mode() == Legacy && animationEnabled()) - _blinkTimer.start(); - else { - _blinkTimer.stop(); - _blinkState = false; - } - } - if (mode() == Legacy) - _trayIcon->setIcon(stateIcon()); + QString iconName = (state() == NeedsAttention) ? currentAttentionIconName() : currentIconName(); + _trayIcon->setIcon(icon::get(iconName, QString{":/icons/hicolor/24x24/status/%1.svg"}.arg(iconName))); } - -QIcon LegacySystemTray::stateIcon() const +void LegacySystemTray::updateToolTip() { - if (mode() == Legacy && state() == NeedsAttention && !_blinkState) - return SystemTray::stateIcon(Active); - return SystemTray::stateIcon(); -} - +# if defined Q_OS_MAC || defined Q_OS_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 -void LegacySystemTray::on_blinkTimeout() -{ - _blinkState = !_blinkState; - _trayIcon->setIcon(stateIcon()); + _trayIcon->setToolTip(tooltip); } - -void LegacySystemTray::on_activated(QSystemTrayIcon::ActivationReason reason) +void LegacySystemTray::onActivated(QSystemTrayIcon::ActivationReason reason) { activate((SystemTray::ActivationReason)reason); } - -void LegacySystemTray::on_messageClicked() +void LegacySystemTray::onMessageClicked() { emit messageClicked(_lastMessageId); } - -void LegacySystemTray::showMessage(const QString &title, const QString &message, SystemTray::MessageIcon icon, int msTimeout, uint id) +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 @@ -177,16 +111,14 @@ void LegacySystemTray::showMessage(const QString &title, const QString &message, _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 +# ifdef Q_WS_X11 showMessage("", "", NoIcon, 1); -#endif +# endif } - #endif /* QT_NO_SYSTEMTRAYICON */