Improve systray activation behavior; more refactoring
[quassel.git] / src / qtui / systemtray.h
index b2b0afb..d610c48 100644 (file)
 
 #include "icon.h"
 
+#ifdef Q_WS_WIN
+#  include <windows.h>
+#endif
+
 class QMenu;
 
 class SystemTray : public QObject {
   Q_OBJECT
+  Q_ENUMS(State Mode MessageIcon ActivationReason)
 
 public:
   enum State {
@@ -58,7 +63,7 @@ public:
     MiddleClick
   };
 
-  SystemTray(QObject *parent = 0);
+  explicit SystemTray(QWidget *parent);
   virtual ~SystemTray();
   virtual void init() {}
 
@@ -68,13 +73,18 @@ public:
 
   void setAlert(bool alerted);
   inline void setInhibitActivation();
+  inline virtual bool isVisible() const { return false; }
   inline bool isActivationInhibited() const;
 
+  QWidget *associatedWidget() const;
+
 public slots:
   virtual void setState(State);
   virtual void setVisible(bool visible = true);
   virtual void setToolTip(const QString &title, const QString &subtitle);
   virtual void showMessage(const QString &title, const QString &message, MessageIcon icon = Information, int millisecondsTimeoutHint = 10000);
+  void toggleMainWidget();
+  void hideMainWidget();
 
 signals:
   void activated(SystemTray::ActivationReason);
@@ -82,6 +92,11 @@ signals:
   void toolTipChanged(const QString &title, const QString &subtitle);
   void messageClicked();
 
+protected slots:
+  virtual void activate(SystemTray::ActivationReason = Trigger);
+
+  void minimizeRestore(bool restore);
+
 protected:
   virtual void setMode(Mode mode);
   inline Mode mode() const;
@@ -98,6 +113,8 @@ protected:
 private slots:
 
 private:
+  bool checkVisibility(bool performToggle = true);
+
   Mode _mode;
   State _state;
 
@@ -107,6 +124,12 @@ private:
   Icon _passiveIcon, _activeIcon, _needsAttentionIcon;
 
   QMenu *_trayMenu;
+  QWidget *_associatedWidget;
+
+#ifdef Q_WS_WIN
+    DWORD _dwTickCount;
+#endif
+
 };
 
 // inlines