maybe clicking the tray icon toggles minimize to tray again. maybe it won't. maybe...
[quassel.git] / src / qtui / mainwin.cpp
index 78f8d38..cb33a01 100644 (file)
@@ -509,10 +509,8 @@ void MainWin::setupSystray() {
   }
 
 #ifndef Q_WS_MAC
-  connect(systemTrayIcon(), SIGNAL(activated( QSystemTrayIcon::ActivationReason )),
-          this, SLOT(systrayActivated( QSystemTrayIcon::ActivationReason )));
+  connect(systemTrayIcon(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason)));
 #endif
-
 }
 
 void MainWin::changeEvent(QEvent *event) {
@@ -520,8 +518,8 @@ void MainWin::changeEvent(QEvent *event) {
     if(windowState() & Qt::WindowMinimized) {
       QtUiSettings s;
       if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnMinimize").toBool()) {
-        toggleVisibility();
-        event->ignore();
+       hideToTray();
+       event->accept();
       }
     }
   }
@@ -683,8 +681,10 @@ void MainWin::showShortcutsDlg() {
 
 void MainWin::closeEvent(QCloseEvent *event) {
   QtUiSettings s;
-  if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
-    toggleVisibility();
+  QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
+  Q_ASSERT(app);
+  if(!app->aboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
+    hideToTray();
     event->ignore();
   } else {
     event->accept();
@@ -692,36 +692,31 @@ void MainWin::closeEvent(QCloseEvent *event) {
   }
 }
 
-void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReason) {
+void MainWin::systrayActivated(QSystemTrayIcon::ActivationReason activationReason) {
   if(activationReason == QSystemTrayIcon::Trigger) {
-    toggleVisibility();
+    toggleMinimizedToTray();
   }
 }
 
-void MainWin::toggleVisibility() {
-  if(isHidden() /*|| !isActiveWindow()*/) {
-    show();
-    if(isMinimized()) {
-      if(isMaximized())
-        showMaximized();
-      else
-        showNormal();
-    }
+void MainWin::hideToTray() {
+  if(!systemTrayIcon()->isSystemTrayAvailable()) {
+    qWarning() << Q_FUNC_INFO << "was called with no SystemTray available!";
+    return;
+  }
 
-    raise();
-    activateWindow();
-    // setFocus(); //Qt::ActiveWindowFocusReason
+  clearFocus();
+  hide();
+  systemTrayIcon()->show();
+}
 
+void MainWin::toggleMinimizedToTray() {
+  if(windowState() & Qt::WindowMinimized) {
+    // restore
+    setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
+    show();
+    raise();
   } else {
-    if(systemTrayIcon()->isSystemTrayAvailable ()) {
-      clearFocus();
-      hide();
-      if(!systemTrayIcon()->isVisible()) {
-        systemTrayIcon()->show();
-      }
-    } else {
-      lower();
-    }
+    setWindowState(windowState() & ~Qt::WindowActive | Qt::WindowMinimized);
   }
 }