qtui: Use icon names in tray implementations
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 12 Jun 2018 20:00:01 +0000 (22:00 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 15 Jun 2018 23:30:32 +0000 (01:30 +0200)
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
src/qtui/legacysystemtray.h
src/qtui/statusnotifieritem.cpp
src/qtui/systemtray.cpp
src/qtui/systemtray.h

index 2166c4e..9308798 100644 (file)
@@ -65,7 +65,7 @@ void LegacySystemTray::init()
 
 void LegacySystemTray::syncLegacyIcon()
 {
 
 void LegacySystemTray::syncLegacyIcon()
 {
-    _trayIcon->setIcon(stateIcon());
+    updateIcon();
 
 #if defined Q_OS_MAC || defined Q_OS_WIN
     QString tooltip = QString("%1").arg(toolTipTitle());
 
 #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;
         }
     }
             _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;
 }
 
 
 void LegacySystemTray::on_blinkTimeout()
 {
     _blinkState = !_blinkState;
-    _trayIcon->setIcon(stateIcon());
+    updateIcon();
 }
 
 
 }
 
 
index 63af68a..c4af3df 100644 (file)
@@ -29,7 +29,6 @@
 #  include <QSystemTrayIcon>
 #endif
 
 #  include <QSystemTrayIcon>
 #endif
 
-#include <QIcon>
 #include <QTimer>
 
 #include "systemtray.h"
 #include <QTimer>
 
 #include "systemtray.h"
@@ -45,7 +44,6 @@ public:
 
     virtual bool isVisible() const;
     virtual inline bool isSystemTrayAvailable() const;
 
     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);
 
 public slots:
     virtual void setState(State state);
@@ -58,6 +56,9 @@ protected slots:
 protected:
     virtual void setMode(Mode mode);
 
 protected:
     virtual void setMode(Mode mode);
 
+private:
+    void updateIcon();
+
 private slots:
     void on_blinkTimeout();
     void on_activated(QSystemTrayIcon::ActivationReason);
 private slots:
     void on_blinkTimeout();
     void on_activated(QSystemTrayIcon::ActivationReason);
index e23b7d8..0965eef 100644 (file)
@@ -184,7 +184,7 @@ void StatusNotifierItem::refreshIcons()
         QDir baseDir{_iconThemePath + "/hicolor"};
         baseDir.removeRecursively();
         for (auto &&trayState : { State::Active, State::Passive, State::NeedsAttention }) {
         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());
             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
 {
 
 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
 {
 }
 
 
 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
 {
 }
 
 
 QString StatusNotifierItem::toolTipIconName() const
 {
-    return QString("quassel");
+    return "quassel";
 }
 
 
 }
 
 
index 36b7047..2bc3654 100644 (file)
@@ -36,9 +36,6 @@
 
 SystemTray::SystemTray(QWidget *parent)
     : QObject(parent),
 
 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);
     _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) {
 {
     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 {};
 }
 
 
 }
 
 
index b27d81c..f49f7cf 100644 (file)
@@ -20,7 +20,8 @@
 
 #pragma once
 
 
 #pragma once
 
-#include <QIcon>
+#include <QObject>
+#include <QString>
 
 class Action;
 class QMenu;
 
 class Action;
 class QMenu;
@@ -95,14 +96,13 @@ protected slots:
 protected:
     virtual void setMode(Mode mode);
     bool shouldBeVisible() const;
 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;
 
     QString toolTipTitle() const;
     QString toolTipSubTitle() const;
     QMenu *trayMenu() const;
 
-    bool animationEnabled() const;
+    QString iconName(State state) const;
 
 private slots:
     void minimizeRestore();
 
 private slots:
     void minimizeRestore();
@@ -116,7 +116,6 @@ private:
     bool _animationEnabled{true};
 
     QString _toolTipTitle, _toolTipSubTitle;
     bool _animationEnabled{true};
 
     QString _toolTipTitle, _toolTipSubTitle;
-    QIcon _passiveIcon, _activeIcon, _needsAttentionIcon;
 
     QMenu *_trayMenu{nullptr};
     QWidget *_associatedWidget{nullptr};
 
     QMenu *_trayMenu{nullptr};
     QWidget *_associatedWidget{nullptr};