This could / should / I just wish it does / who the hell knows / whatever / <insert...
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 20 Jan 2009 00:03:31 +0000 (01:03 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 20 Jan 2009 00:03:31 +0000 (01:03 +0100)
I can't test it on mac os.

src/qtui/mainwin.cpp
src/qtui/qtuiapplication.cpp
src/qtui/qtuiapplication.h

index 78f8d38..dbcbd85 100644 (file)
@@ -683,7 +683,9 @@ void MainWin::showShortcutsDlg() {
 
 void MainWin::closeEvent(QCloseEvent *event) {
   QtUiSettings s;
-  if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
+  QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
+  Q_ASSERT(app);
+  if(!app->aboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) {
     toggleVisibility();
     event->ignore();
   } else {
index b6f9ca3..33829e8 100644 (file)
 #include "qtui.h"
 #include "sessionsettings.h"
 
-
-// void myMessageOutput(QtMsgType type, const char *msg) {
-//   Client::debugLog() << "Debug:" <<  msg << '\n';
-//   return;
-// //   switch (type) {
-// //   case QtDebugMsg:
-// //     break;
-// //   case QtWarningMsg:
-// //     fprintf(stderr, "Warning: %s\n", msg);
-// //     break;
-// //   case QtCriticalMsg:
-// //     fprintf(stderr, "Critical: %s\n", msg);
-// //     break;
-// //   case QtFatalMsg:
-// //     fprintf(stderr, "Fatal: %s\n", msg);
-// //     abort();
-// //   }
-// }
-
 QtUiApplication::QtUiApplication(int &argc, char **argv)
 #ifdef HAVE_KDE
-  : KApplication(), Quassel() {
-  Q_UNUSED(argc); Q_UNUSED(argv);
+  : KApplication(),
 #else
-  : QApplication(argc, argv), Quassel() {
+  : QApplication(argc, argv),
+#endif
+    Quassel(),
+    _aboutToQuit(false)
+{
+#ifdef HAVE_KDE
+  Q_UNUSED(argc)
+  Q_UNUSED(argv)
 #endif
 
   setRunMode(Quassel::ClientOnly);
@@ -77,6 +64,10 @@ QtUiApplication::~QtUiApplication() {
   Client::destroy();
 }
 
+void QtUiApplication::commitData(QSessionManager &manager) {
+  _aboutToQuit = true;
+}
+
 void QtUiApplication::saveState(QSessionManager & manager) {
   //qDebug() << QString("saving session state to id %1").arg(manager.sessionId());
   AccountId activeCore = Client::currentCoreAccount();
index d4f8774..69a9086 100644 (file)
@@ -42,19 +42,25 @@ class QtUiApplication : public QApplication, public Quassel {
 
   Q_OBJECT
 
- public:
+public:
   QtUiApplication(int &, char **);
   ~QtUiApplication();
   virtual bool init();
 
   void resumeSessionIfPossible();
-  virtual void saveState(QSessionManager & manager);
+  virtual void commitData(QSessionManager &manager);
+  virtual void saveState(QSessionManager &manager);
+
+  inline bool aboutToQuit() const { return _aboutToQuit; }
 
 signals:
   void saveStateToSession(const QString &sessionId);
   void saveStateToSessionSettings(SessionSettings &s); // FIXME refs in signals won't probably work
   void resumeFromSession(const QString sessionId);
   void resumeFromSessionSettings(SessionSettings &s);
+
+private:
+  bool _aboutToQuit;
 };
 
 #endif