Make disabling the tray icon animation work again
[quassel.git] / src / qtui / systemtray.cpp
index 9125823..7fb36ce 100644 (file)
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+#include <QApplication>
 #include <QMenu>
 
 #include "systemtray.h"
 
 #include <QMenu>
 
 #include "systemtray.h"
 
+#include "action.h"
 #include "actioncollection.h"
 #include "client.h"
 #include "iconloader.h"
 #include "qtui.h"
 
 #ifdef HAVE_KDE
 #include "actioncollection.h"
 #include "client.h"
 #include "iconloader.h"
 #include "qtui.h"
 
 #ifdef HAVE_KDE
+#  include <KMenu>
 #  include <KWindowInfo>
 #  include <KWindowSystem>
 #endif
 #  include <KWindowInfo>
 #  include <KWindowSystem>
 #endif
@@ -35,7 +38,6 @@ SystemTray::SystemTray(QWidget *parent)
 : QObject(parent),
   _mode(Invalid),
   _state(Passive),
 : QObject(parent),
   _mode(Invalid),
   _state(Passive),
-  _inhibitActivation(false),
   _passiveIcon(DesktopIcon("quassel_inactive")),
   _activeIcon(DesktopIcon("quassel")),
   _needsAttentionIcon(DesktopIcon("quassel_message")),
   _passiveIcon(DesktopIcon("quassel_inactive")),
   _activeIcon(DesktopIcon("quassel")),
   _needsAttentionIcon(DesktopIcon("quassel_message")),
@@ -43,8 +45,6 @@ SystemTray::SystemTray(QWidget *parent)
   _associatedWidget(parent)
 {
   Q_ASSERT(parent);
   _associatedWidget(parent)
 {
   Q_ASSERT(parent);
-
-  qApp->installEventFilter(this);
 }
 
 SystemTray::~SystemTray() {
 }
 
 SystemTray::~SystemTray() {
@@ -55,31 +55,56 @@ QWidget *SystemTray::associatedWidget() const {
   return _associatedWidget;
 }
 
   return _associatedWidget;
 }
 
-void SystemTray::setTrayMenu(QMenu *menu) {
-  if(menu)
-    _trayMenu = menu;
-  else
-    _trayMenu = new QMenu();
-
+void SystemTray::init() {
   ActionCollection *coll = QtUi::actionCollection("General");
   ActionCollection *coll = QtUi::actionCollection("General");
+  _minimizeRestoreAction = new Action(tr("&Minimize"), this, this, SLOT(minimizeRestore()));
+
+#ifdef HAVE_KDE
+  KMenu *kmenu;
+  _trayMenu = kmenu = new KMenu();
+  kmenu->addTitle(qApp->windowIcon(), "Quassel IRC");
+#else
+  _trayMenu = new QMenu(associatedWidget());
+#endif
+
+  _trayMenu->setTitle("Quassel IRC");
+
+#ifndef HAVE_KDE
+  _trayMenu->setAttribute(Qt::WA_Hover);
+#endif
 
   _trayMenu->addAction(coll->action("ConnectCore"));
   _trayMenu->addAction(coll->action("DisconnectCore"));
   _trayMenu->addAction(coll->action("CoreInfo"));
 
   _trayMenu->addAction(coll->action("ConnectCore"));
   _trayMenu->addAction(coll->action("DisconnectCore"));
   _trayMenu->addAction(coll->action("CoreInfo"));
-#ifndef HAVE_KDE
   _trayMenu->addSeparator();
   _trayMenu->addSeparator();
+  _trayMenu->addAction(_minimizeRestoreAction);
   _trayMenu->addAction(coll->action("Quit"));
   _trayMenu->addAction(coll->action("Quit"));
-#endif /* HAVE_KDE */
+
+  connect(_trayMenu, SIGNAL(aboutToShow()), SLOT(trayMenuAboutToShow()));
+
+  NotificationSettings notificationSettings;
+  notificationSettings.initAndNotify("Systray/Animate", this, SLOT(enableAnimationChanged(QVariant)), true);
+}
+
+void SystemTray::trayMenuAboutToShow() {
+  if(GraphicalUi::isMainWidgetVisible())
+    _minimizeRestoreAction->setText(tr("&Minimize"));
+  else
+    _minimizeRestoreAction->setText(tr("&Restore"));
 }
 
 void SystemTray::setMode(Mode mode_) {
   if(mode_ != _mode) {
     _mode = mode_;
 }
 
 void SystemTray::setMode(Mode mode_) {
   if(mode_ != _mode) {
     _mode = mode_;
-    if(_mode == Legacy) {
-      _trayMenu->setWindowFlags(Qt::Popup);
-    } else {
-      _trayMenu->setWindowFlags(Qt::Window);
+#ifdef HAVE_KDE
+    if(_trayMenu) {
+      if(_mode == Legacy) {
+        _trayMenu->setWindowFlags(Qt::Popup);
+      } else {
+        _trayMenu->setWindowFlags(Qt::Window);
+      }
     }
     }
+#endif
   }
 }
 
   }
 }
 
@@ -122,25 +147,23 @@ void SystemTray::setToolTip(const QString &title, const QString &subtitle) {
   emit toolTipChanged(title, subtitle);
 }
 
   emit toolTipChanged(title, subtitle);
 }
 
-void SystemTray::showMessage(const QString &title, const QString &message, MessageIcon icon, int millisecondsTimeoutHint) {
+void SystemTray::showMessage(const QString &title, const QString &message, MessageIcon icon, int millisecondsTimeoutHint, uint id) {
   Q_UNUSED(title)
   Q_UNUSED(message)
   Q_UNUSED(icon)
   Q_UNUSED(millisecondsTimeoutHint)
   Q_UNUSED(title)
   Q_UNUSED(message)
   Q_UNUSED(icon)
   Q_UNUSED(millisecondsTimeoutHint)
+  Q_UNUSED(id)
 }
 
 void SystemTray::activate(SystemTray::ActivationReason reason) {
 }
 
 void SystemTray::activate(SystemTray::ActivationReason reason) {
-
   emit activated(reason);
   emit activated(reason);
+}
 
 
-  if(reason == Trigger && !isActivationInhibited()) {
-    GraphicalUi::toggleMainWidget();
-  }
+void SystemTray::minimizeRestore() {
+  GraphicalUi::toggleMainWidget();
 }
 
 }
 
-bool SystemTray::eventFilter(QObject *obj, QEvent *event) {
-  if(event->type() == QEvent::MouseMove || event->type() == QEvent::MouseButtonRelease) {
-    _inhibitActivation = false;
-  }
-  return QObject::eventFilter(obj, event);
+void SystemTray::enableAnimationChanged(const QVariant &v) {
+  _animationEnabled = v.toBool();
+  emit animationEnabledChanged(v.toBool());
 }
 }