void LegacySystemTray::syncLegacyIcon()
{
- _trayIcon->setIcon(stateIcon());
+ updateIcon();
#if defined Q_OS_MAC || defined Q_OS_WIN
QString tooltip = QString("%1").arg(toolTipTitle());
_blinkState = false;
}
}
- if (mode() == Legacy)
- _trayIcon->setIcon(stateIcon());
+ updateIcon();
}
-QIcon LegacySystemTray::stateIcon() const
+void LegacySystemTray::updateIcon()
{
- if (mode() == Legacy && state() == NeedsAttention && !_blinkState)
- return SystemTray::stateIcon(Active);
- return SystemTray::stateIcon();
+ if (state() == State::NeedsAttention && !_blinkState) {
+ _trayIcon->setIcon(QIcon::fromTheme(iconName(State::Active)));
+ }
+ else {
+ _trayIcon->setIcon(QIcon::fromTheme(iconName(state())));
+ }
}
void LegacySystemTray::on_blinkTimeout()
{
_blinkState = !_blinkState;
- _trayIcon->setIcon(stateIcon());
+ updateIcon();
}
# include <QSystemTrayIcon>
#endif
-#include <QIcon>
#include <QTimer>
#include "systemtray.h"
virtual bool isVisible() const;
virtual inline bool isSystemTrayAvailable() const;
- virtual QIcon stateIcon() const; // overriden to care about blinkState
public slots:
virtual void setState(State state);
protected:
virtual void setMode(Mode mode);
+private:
+ void updateIcon();
+
private slots:
void on_blinkTimeout();
void on_activated(QSystemTrayIcon::ActivationReason);
QDir baseDir{_iconThemePath + "/hicolor"};
baseDir.removeRecursively();
for (auto &&trayState : { State::Active, State::Passive, State::NeedsAttention }) {
- const QIcon &icon = SystemTray::stateIcon(trayState);
+ QIcon icon = QIcon::fromTheme(SystemTray::iconName(trayState));
if (!icon.name().isEmpty()) {
for (auto &&size : icon.availableSizes()) {
auto pixDir = QString{"%1/%2x%3/status"}.arg(baseDir.absolutePath()).arg(size.width()).arg(size.height());
QString StatusNotifierItem::iconName() const
{
- if (state() == Passive)
- return QString("inactive-quassel");
- else
- return QString("quassel");
+ if (state() == Passive) {
+ return SystemTray::iconName(State::Passive);
+ }
+ else {
+ return SystemTray::iconName(State::Active);
+ }
}
QString StatusNotifierItem::attentionIconName() const
{
- if (animationEnabled())
- return QString("message-quassel");
- else
- return QString("quassel");
+ if (animationEnabled()) {
+ return SystemTray::iconName(State::NeedsAttention);
+ }
+ else {
+ return SystemTray::iconName(State::Active);
+ }
}
QString StatusNotifierItem::toolTipIconName() const
{
- return QString("quassel");
+ return "quassel";
}
SystemTray::SystemTray(QWidget *parent)
: QObject(parent),
- _passiveIcon(QIcon::fromTheme("inactive-quassel", QIcon(":/icons/inactive-quassel.png"))),
- _activeIcon(QIcon::fromTheme("quassel", QIcon(":/icons/quassel.png"))),
- _needsAttentionIcon(QIcon::fromTheme("message-quassel", QIcon(":/icons/message-quassel.png"))),
_associatedWidget(parent)
{
Q_ASSERT(parent);
}
-QIcon SystemTray::stateIcon() const
-{
- return stateIcon(state());
-}
-
-
-QIcon SystemTray::stateIcon(State state) const
+QString SystemTray::iconName(State state) const
{
switch (state) {
- case Passive:
- return _passiveIcon;
- case Active:
- return _activeIcon;
- case NeedsAttention:
- return _needsAttentionIcon;
+ case State::Passive:
+ return "inactive-quassel";
+ case State::Active:
+ return "quassel";
+ case State::NeedsAttention:
+ return "message-quassel";
}
- return QIcon();
+ return {};
}
#pragma once
-#include <QIcon>
+#include <QObject>
+#include <QString>
class Action;
class QMenu;
protected:
virtual void setMode(Mode mode);
bool shouldBeVisible() const;
+ bool animationEnabled() const;
- virtual QIcon stateIcon() const;
- QIcon stateIcon(State state) const;
QString toolTipTitle() const;
QString toolTipSubTitle() const;
QMenu *trayMenu() const;
- bool animationEnabled() const;
+ QString iconName(State state) const;
private slots:
void minimizeRestore();
bool _animationEnabled{true};
QString _toolTipTitle, _toolTipSubTitle;
- QIcon _passiveIcon, _activeIcon, _needsAttentionIcon;
QMenu *_trayMenu{nullptr};
QWidget *_associatedWidget{nullptr};