projects
/
quassel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
qtui: Fix quit sequence and lifetime issues
[quassel.git]
/
src
/
qtui
/
qtuiapplication.cpp
diff --git
a/src/qtui/qtuiapplication.cpp
b/src/qtui/qtuiapplication.cpp
index
47e3a14
..
03f887b
100644
(file)
--- a/
src/qtui/qtuiapplication.cpp
+++ b/
src/qtui/qtuiapplication.cpp
@@
-29,7
+29,6
@@
#endif
#include "chatviewsettings.h"
#endif
#include "chatviewsettings.h"
-#include "client.h"
#include "cliparser.h"
#include "mainwin.h"
#include "qtui.h"
#include "cliparser.h"
#include "mainwin.h"
#include "qtui.h"
@@
-110,28
+109,32
@@
void QtUiApplication::init()
throw ExitException{EXIT_FAILURE, tr("Could not load or upgrade client settings!")};
}
throw ExitException{EXIT_FAILURE, tr("Could not load or upgrade client settings!")};
}
- Client::init(QtUi::instance());
+ _client.reset(new Client(std::unique_ptr<QtUi>(new QtUi()))); // TODO C++14: std::make_unique
// Init UI only after the event loop has started
// TODO Qt5: Make this a lambda
QTimer::singleShot(0, this, SLOT(initUi()));
// Init UI only after the event loop has started
// TODO Qt5: Make this a lambda
QTimer::singleShot(0, this, SLOT(initUi()));
-
- Quassel::registerQuitHandler([]() {
- QtUi::mainWindow()->quit();
- });
}
}
-
QtUiApplication::~QtUiApplication
()
+
void QtUiApplication::initUi
()
{
{
- Client::destroy();
+ QtUi::instance()->init();
+
+ // Needs to happen after UI init, so the MainWin quit handler is registered first
+ Quassel::registerQuitHandler(quitHandler());
+
+ resumeSessionIfPossible();
}
}
-
void QtUiApplication::initUi
()
+
Quassel::QuitHandler QtUiApplication::quitHandler
()
{
{
- QtUi::instance()->init();
- resumeSessionIfPossible();
+ // Wait until the Client instance is destroyed before quitting the event loop
+ return [this]() {
+ connect(_client.get(), SIGNAL(destroyed()), QCoreApplication::instance(), SLOT(quit()));
+ _client.release()->deleteLater();
+ };
}
}