From 1a9450ecc5eeb5f987ceac790be84dcced02f028 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Tue, 12 Jun 2018 22:00:01 +0200 Subject: [PATCH] qtui: Use icon names in tray implementations Instead of keeping QIcon instances in the base class, have a central place to define the icon names for each state, and use that in the implementations. --- src/qtui/legacysystemtray.cpp | 18 ++++++++++-------- src/qtui/legacysystemtray.h | 5 +++-- src/qtui/statusnotifieritem.cpp | 24 ++++++++++++++---------- src/qtui/systemtray.cpp | 25 ++++++++----------------- src/qtui/systemtray.h | 9 ++++----- 5 files changed, 39 insertions(+), 42 deletions(-) diff --git a/src/qtui/legacysystemtray.cpp b/src/qtui/legacysystemtray.cpp index 2166c4ee..9308798e 100644 --- a/src/qtui/legacysystemtray.cpp +++ b/src/qtui/legacysystemtray.cpp @@ -65,7 +65,7 @@ void LegacySystemTray::init() void LegacySystemTray::syncLegacyIcon() { - _trayIcon->setIcon(stateIcon()); + updateIcon(); #if defined Q_OS_MAC || defined Q_OS_WIN QString tooltip = QString("%1").arg(toolTipTitle()); @@ -137,23 +137,25 @@ void LegacySystemTray::setState(State state_) _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(); } diff --git a/src/qtui/legacysystemtray.h b/src/qtui/legacysystemtray.h index 63af68ad..c4af3df8 100644 --- a/src/qtui/legacysystemtray.h +++ b/src/qtui/legacysystemtray.h @@ -29,7 +29,6 @@ # include #endif -#include #include #include "systemtray.h" @@ -45,7 +44,6 @@ public: 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); @@ -58,6 +56,9 @@ protected slots: protected: virtual void setMode(Mode mode); +private: + void updateIcon(); + private slots: void on_blinkTimeout(); void on_activated(QSystemTrayIcon::ActivationReason); diff --git a/src/qtui/statusnotifieritem.cpp b/src/qtui/statusnotifieritem.cpp index e23b7d80..0965eeff 100644 --- a/src/qtui/statusnotifieritem.cpp +++ b/src/qtui/statusnotifieritem.cpp @@ -184,7 +184,7 @@ void StatusNotifierItem::refreshIcons() 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()); @@ -278,25 +278,29 @@ QString StatusNotifierItem::title() const 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"; } diff --git a/src/qtui/systemtray.cpp b/src/qtui/systemtray.cpp index 36b70479..2bc36541 100644 --- a/src/qtui/systemtray.cpp +++ b/src/qtui/systemtray.cpp @@ -36,9 +36,6 @@ 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); @@ -152,23 +149,17 @@ void SystemTray::setState(State state) } -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 {}; } diff --git a/src/qtui/systemtray.h b/src/qtui/systemtray.h index b27d81ca..f49f7cfb 100644 --- a/src/qtui/systemtray.h +++ b/src/qtui/systemtray.h @@ -20,7 +20,8 @@ #pragma once -#include +#include +#include class Action; class QMenu; @@ -95,14 +96,13 @@ protected slots: 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(); @@ -116,7 +116,6 @@ private: bool _animationEnabled{true}; QString _toolTipTitle, _toolTipSubTitle; - QIcon _passiveIcon, _activeIcon, _needsAttentionIcon; QMenu *_trayMenu{nullptr}; QWidget *_associatedWidget{nullptr}; -- 2.20.1