diff --git a/src/main.cpp b/src/main.cpp index 3b51d3de19cdec06937b13b6ab5c6805e9ff0e4b..1e59ef86c04610771736a9726b7ff28d1c85b294 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -92,7 +92,7 @@ int main(int argc, char *argv[]) Tglobals *gl = nullptr; QPointer<QApplication> a = nullptr; QQmlApplicationEngine *e = nullptr; - TnootkaQML nooObj; + auto nooObj = new TnootkaQML(); int exitCode; bool firstLoop = true; @@ -101,11 +101,11 @@ int main(int argc, char *argv[]) #if !defined (Q_OS_ANDROID) if (a) delete a; - if (nooObj.resetConfig()) { // delete config file - new Nootka instance will start with first run wizard + if (nooObj->resetConfig()) { // delete config file - new Nootka instance will start with first run wizard QFile f(confFile); f.remove(); } - nooObj.setResetConfig(false); + nooObj->setResetConfig(false); #endif a = new QApplication(argc, argv); Tmtr::init(a); @@ -134,17 +134,17 @@ int main(int argc, char *argv[]) a->setWindowIcon(QIcon(Tpath::img("nootka"))); - Tsound sound; + auto sound = new Tsound(); e = new QQmlApplicationEngine; e->rootContext()->setContextProperty(QStringLiteral("GLOB"), gl); - e->rootContext()->setContextProperty(QStringLiteral("Noo"), &nooObj); - e->rootContext()->setContextProperty(QStringLiteral("SOUND"), &sound); + e->rootContext()->setContextProperty(QStringLiteral("Noo"), nooObj); + e->rootContext()->setContextProperty(QStringLiteral("SOUND"), sound); bool wasFirstRun = gl->isFirstRun; if (gl->isFirstRun) { TmainHelp h; e->rootContext()->setContextProperty(QStringLiteral("HELP"), &h); - nooObj.setQmlEngine(e); + nooObj->setQmlEngine(e); e->load(QUrl(QStringLiteral("qrc:/wizard/Wizard.qml"))); if (firstLoop) { QTextStream o(stdout); @@ -154,14 +154,14 @@ int main(int argc, char *argv[]) delete e; e = new QQmlApplicationEngine; e->rootContext()->setContextProperty(QStringLiteral("GLOB"), gl); - e->rootContext()->setContextProperty(QStringLiteral("Noo"), &nooObj); - e->rootContext()->setContextProperty(QStringLiteral("SOUND"), &sound); + e->rootContext()->setContextProperty(QStringLiteral("Noo"), nooObj); + e->rootContext()->setContextProperty(QStringLiteral("SOUND"), sound); gl->isFirstRun = false; gl->config->setValue(QLatin1String("version"), gl->version); // TODO: storing current version in settings avoids opening 'about' window next launch // but if there will be another window - delete line above } - nooObj.setQmlEngine(e); + nooObj->setQmlEngine(e); qmlRegisterType<TnameItem>("Nootka.Main", 1, 0, "TnameItem"); qmlRegisterType<TmainScoreObject>("Nootka.Main", 1, 0, "TmainScoreObject"); qmlRegisterType<TdialogLoaderObject>("Nootka.Dialogs", 1, 0, "TdialogObject"); @@ -171,10 +171,10 @@ int main(int argc, char *argv[]) #if defined (Q_OS_ANDROID) QString androidArg = Tandroid::getRunArgument(); if (!androidArg.isEmpty()) - nooObj.openFile(androidArg); + nooObj->openFile(androidArg); #else if (argc > 1) - nooObj.openFile(QString::fromLocal8Bit(argv[argc - 1])); + nooObj->openFile(QString::fromLocal8Bit(argv[argc - 1])); #endif } if (firstLoop && !wasFirstRun) { @@ -185,7 +185,7 @@ int main(int argc, char *argv[]) o << "\033[01;35m Nootka launch time: " << startElapsed.nsecsElapsed() / 1000000.0 << " [ms]\033[01;00m\n"; #endif } - sound.init(); + sound->init(); if (firstLoop && !wasFirstRun) { // show some dialog when version was changed (news or other info) @@ -198,18 +198,23 @@ int main(int argc, char *argv[]) firstLoop = false; exitCode = a->exec(); + + delete sound; delete e; delete gl; #if defined (Q_OS_ANDROID) - if (nooObj.resetConfig()) { // delete config file - new Nootka instance will start with first run wizard + if (nooObj->resetConfig()) { // delete config file - new Nootka instance will start with first run wizard QFile f(confFile); f.remove(); Tandroid::restartNootka(); // and call Nootka after delay } - nooObj.setResetConfig(false); // do - while loop doesn't work with Android + nooObj->setResetConfig(false); // do - while loop doesn't work with Android qApp->quit(); // HACK: calling QApplication::quick() solves hang on x86 when Qt uses native (usually obsolete) SSL libraries #endif - } while (nooObj.resetConfig()); + } while (nooObj->resetConfig()); + + delete nooObj; + qInstallMessageHandler(0); delete a; return exitCode;