... and now even when Quassel is QApplication::quit()
[quassel.git] / src / qtui / mainwin.cpp
index 7ed3f58..e9bb551 100644 (file)
@@ -36,6 +36,7 @@
 #include "inputwidget.h"
 #include "verticaldock.h"
 #include "uisettings.h"
+#include "qtuisettings.h"
 
 #include "selectionmodelsynchronizer.h"
 #include "mappedselectionmodel.h"
@@ -43,6 +44,7 @@
 #include "settingspages/fontssettingspage.h"
 #include "settingspages/identitiessettingspage.h"
 #include "settingspages/networkssettingspage.h"
+#include "settingspages/generalsettingspage.h"
 
 #include "debugconsole.h"
 
@@ -58,7 +60,7 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) : QMainWindow(parent), gui(_gui) {
 }
 
 void MainWin::init() {
-  UiSettings s;
+  QtUiSettings s;
   resize(s.value("MainWinSize").toSize());
 
   Client::signalProxy()->attachSignal(this, SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant)));
@@ -88,6 +90,7 @@ void MainWin::init() {
   setupTopicWidget();
   setupSystray();
 
+  
   setupSettingsDlg();
 
   // restore mainwin state
@@ -107,12 +110,16 @@ void MainWin::init() {
 }
 
 MainWin::~MainWin() {
-
+  QtUiSettings s;
+  s.setValue("MainWinSize", size());
+  s.setValue("MainWinPos", pos());
+  s.setValue("MainWinState", saveState());
 }
 
 void MainWin::setupMenus() {
   connect(ui.actionConnectCore, SIGNAL(triggered()), this, SLOT(showCoreConnectionDlg()));
   connect(ui.actionDisconnectCore, SIGNAL(triggered()), Client::instance(), SLOT(disconnectFromCore()));
+  connect(ui.actionQuit, SIGNAL(triggered()), QCoreApplication::instance(), SLOT(quit()));
   //connect(ui.actionNetworkList, SIGNAL(triggered()), this, SLOT(showServerList()));
   connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg()));
   connect(ui.actionDebug_Console, SIGNAL(triggered()), this, SLOT(showDebugConsole()));
@@ -160,7 +167,8 @@ void MainWin::setupSettingsDlg() {
   settingsDlg->registerSettingsPage(new FontsSettingsPage(settingsDlg));
   settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg));
   settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg));
-
+  settingsDlg->registerSettingsPage(new GeneralSettingsPage(settingsDlg));
+  
 #ifdef SPUTDEV
   connect(settingsDlg, SIGNAL(finished(int)), QApplication::instance(), SLOT(quit()));  // FIXME
 #endif
@@ -245,7 +253,7 @@ void MainWin::setupSystray() {
   QString toolTip("left click to minimize the quassel client to tray");
   systray->setToolTip(toolTip);
 
-  QMenu *systrayMenu = new QMenu(this);
+  systrayMenu = new QMenu(this);
   systrayMenu->addAction(ui.actionAboutQuassel);
   systrayMenu->addSeparator();
   systrayMenu->addAction(ui.actionConnectCore);
@@ -254,11 +262,28 @@ void MainWin::setupSystray() {
   systrayMenu->addAction(ui.actionQuit);
 
   systray->setContextMenu(systrayMenu);
-  // systray->setContextMenuPolicy();
 
-  systray->show();
+  QtUiSettings s;
+  if(s.value("UseSystemTrayIcon").toBool()) {
+    systray->show();
+  }
+  
+  #ifndef Q_WS_MAC
   connect(systray, SIGNAL(activated( QSystemTrayIcon::ActivationReason )),
           this, SLOT(systrayActivated( QSystemTrayIcon::ActivationReason )));
+  #endif
+
+}
+
+void MainWin::changeEvent(QEvent *event) {
+  if(event->type() == QEvent::WindowStateChange) {
+    if(windowState() & Qt::WindowMinimized) {
+      QtUiSettings s;
+      if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnMinimize").toBool()) {
+        toggleVisibility();
+      }
+    }
+  }
 }
 
 void MainWin::connectedToCore() {
@@ -310,35 +335,36 @@ void MainWin::showDebugConsole() {
   debugConsole->show();
 }
 
-void MainWin::closeEvent(QCloseEvent *event)
-{
-  //if (userReallyWantsToQuit()) {
-    UiSettings s;
-    s.setValue("MainWinSize", size());
-    s.setValue("MainWinPos", pos());
-    s.setValue("MainWinState", saveState());
+void MainWin::closeEvent(QCloseEvent *event) {
+  QtUiSettings s;
+  if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
+    toggleVisibility();
+    event->ignore();
+  } else {
     event->accept();
-  //} else {
-    //event->ignore();
-  //}
+  }
 }
 
 void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReason) {
   if (activationReason == QSystemTrayIcon::Trigger) {
-    if(isHidden()) {
-      show();
-      if(isMinimized()) {
-        if(isMaximized()) {
-          showMaximized();
-        } else {
-          showNormal();
-        }
+    toggleVisibility();
+  }
+}
+
+void MainWin::toggleVisibility() {
+  if(isHidden()) {
+    show();
+    if(isMinimized()) {
+      if(isMaximized()) {
+        showMaximized();
+      } else {
+        showNormal();
       }
-      raise();
-      activateWindow();
-    } else {
-      hide();
     }
+    raise();
+    activateWindow();
+  } else {
+   hide();
   }
 }