X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fqtuiapplication.cpp;fp=src%2Fqtui%2Fqtuiapplication.cpp;h=03f887b4147895ecb72fdf171ad0f4cc142b0005;hp=47e3a140b4cd86baa5874c8bfa8fb76e7c63b976;hb=72473527f99cbe68dcfcb4ca17f828bd3775bba7;hpb=ee3e3d298a1208d06e3a35a8aea6bcc42ce3aa5c diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp index 47e3a140..03f887b4 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -29,7 +29,6 @@ #endif #include "chatviewsettings.h" -#include "client.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!")}; } - Client::init(QtUi::instance()); + _client.reset(new Client(std::unique_ptr(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())); - - 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(); + }; }