From: Marcus Eggenberger Date: Tue, 20 Jan 2009 00:03:31 +0000 (+0100) Subject: This could / should / I just wish it does / who the hell knows / whatever / fix the issue where quassel stops kde's logout. (Br # 485). I can't test it on mac os. --- diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 78f8d383..dbcbd853 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -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 qApp; + Q_ASSERT(app); + if(!app->aboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) { toggleVisibility(); event->ignore(); } else { diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp index b6f9ca31..33829e81 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -27,31 +27,18 @@ #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(); diff --git a/src/qtui/qtuiapplication.h b/src/qtui/qtuiapplication.h index d4f8774a..69a90861 100644 --- a/src/qtui/qtuiapplication.h +++ b/src/qtui/qtuiapplication.h @@ -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