* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#include "core.h"
#include "coreapplication.h"
-
CoreApplication::CoreApplication(int &argc, char **argv)
: QCoreApplication(argc, argv)
{
-#ifdef Q_OS_MAC
- Quassel::disableCrashHandler();
-#endif /* Q_OS_MAC */
-
Quassel::setRunMode(Quassel::CoreOnly);
+ Quassel::registerQuitHandler([this]() {
+ connect(_core.get(), SIGNAL(shutdownComplete()), this, SLOT(onShutdownComplete()));
+ _core->shutdown();
+ });
}
-CoreApplication::~CoreApplication()
+void CoreApplication::init()
{
- _core.reset();
- Quassel::destroy();
+ if (!Quassel::init()) {
+ throw ExitException{EXIT_FAILURE, tr("Could not initialize Quassel!")};
+ }
+
+ _core.reset(new Core{}); // FIXME C++14: std::make_unique
+ _core->init();
}
-bool CoreApplication::init()
+void CoreApplication::onShutdownComplete()
{
- if (Quassel::init()) {
- _core.reset(new Core{}); // FIXME C++14: std::make_unique
- return _core->init();
- }
- return false;
+ connect(_core.get(), SIGNAL(destroyed()), QCoreApplication::instance(), SLOT(quit()));
+ _core.release()->deleteLater();
}