fix restore via systray icon ignoring first click
[quassel.git] / src / qtui / mainwin.cpp
index 4c39b12..8e11a29 100644 (file)
@@ -684,7 +684,7 @@ void MainWin::closeEvent(QCloseEvent *event) {
   QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
   Q_ASSERT(app);
   if(!app->aboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
-    hideToTray();
+    toggleMinimizedToTray();
     event->ignore();
   } else {
     event->accept();
@@ -694,7 +694,7 @@ void MainWin::closeEvent(QCloseEvent *event) {
 
 void MainWin::systrayActivated(QSystemTrayIcon::ActivationReason activationReason) {
   if(activationReason == QSystemTrayIcon::Trigger) {
-    restoreFromTray();
+    toggleMinimizedToTray();
   }
 }
 
@@ -709,10 +709,16 @@ void MainWin::hideToTray() {
   systemTrayIcon()->show();
 }
 
-void MainWin::restoreFromTray() {
-  setWindowState(windowState() & ~Qt::WindowMinimized | Qt::WindowActive);
-  show();
-  raise();
+void MainWin::toggleMinimizedToTray() {
+  if(windowState() & Qt::WindowMinimized) {
+    // restore
+    setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
+    show();
+    raise();
+  } else {
+    setWindowState((windowState() & ~Qt::WindowActive) | Qt::WindowMinimized);
+    hideToTray();
+  }
 }
 
 void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {