core: Allow clean shutdown of the core
[quassel.git] / src / qtui / systemtray.h
index d07edf1..c5fee19 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <QObject>
 #include <QString>
+#include <QTimer>
 
 class Action;
 class QMenu;
@@ -61,6 +62,12 @@ public:
         MiddleClick
     };
 
+    enum class AttentionBehavior {
+        DoNothing,
+        ChangeColor,
+        Blink
+    };
+
     explicit SystemTray(QWidget *parent);
     ~SystemTray() override;
 
@@ -86,11 +93,11 @@ signals:
     void modeChanged(Mode mode);
     void stateChanged(State state);
     void visibilityChanged(bool isVisible);
+    void iconsChanged();
+    void currentIconNameChanged();
+    void toolTipChanged(const QString &title, const QString &subtitle);
 
     void activated(SystemTray::ActivationReason);
-    void iconChanged(const QIcon &icon);
-    void animationEnabledChanged(bool);
-    void toolTipChanged(const QString &title, const QString &subtitle);
     void messageClicked(uint notificationId);
     void messageClosed(uint notificationId);
 
@@ -99,28 +106,36 @@ protected slots:
 
 protected:
     void setMode(Mode mode);
-    bool animationEnabled() const;
 
     QString toolTipTitle() const;
     QString toolTipSubTitle() const;
     QMenu *trayMenu() const;
 
     QString iconName(State state) const;
+    QString currentIconName() const;
+    QString currentAttentionIconName() const;
 
 private slots:
     void minimizeRestore();
     void trayMenuAboutToShow();
-    void enableAnimationChanged(const QVariant &);
     void invertTrayIconChanged(const QVariant &);
+    void enableChangeColorChanged(const QVariant &);
+    void enableBlinkChanged(const QVariant &);
+
+    void onBlinkTimeout();
 
 private:
     bool _isVisible{false};
     Mode _mode{Mode::Invalid};
     State _state{State::Passive};
-    bool _animationEnabled{true};
     bool _trayIconInverted{false};
+    AttentionBehavior _attentionBehavior{AttentionBehavior::ChangeColor};
+
+    QTimer _blinkTimer;
+    bool _blinkState{false};
 
-    QString _toolTipTitle, _toolTipSubTitle;
+    QString _toolTipTitle;
+    QString _toolTipSubTitle;
 
     QMenu *_trayMenu{nullptr};
     QWidget *_associatedWidget{nullptr};