From 895d8ab4699f1b50bf03532c967a91f5ecb62a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 24 Oct 2015 00:57:54 +0200 Subject: GH-1300 call application quit when direct launch instance quits --- application/LaunchInteraction.cpp | 18 ++++++++++++++++-- application/LaunchInteraction.h | 6 +++--- application/MainWindow.cpp | 2 +- application/main.cpp | 6 +++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/application/LaunchInteraction.cpp b/application/LaunchInteraction.cpp index 497e43ea..4033d87c 100644 --- a/application/LaunchInteraction.cpp +++ b/application/LaunchInteraction.cpp @@ -16,11 +16,11 @@ #include #include -LaunchController::LaunchController(QObject *parent) : QObject(parent) +LaunchController::LaunchController(QObject *parent) : Task(parent) { } -void LaunchController::launch() +void LaunchController::executeTask() { login(); } @@ -29,7 +29,10 @@ void LaunchController::launch() void LaunchController::login() { if (!m_instance) + { + emitFailed(tr("No instance specified")); return; + } JavaCommon::checkJVMArgs(m_instance->settings()->get("JvmArgs").toString(), m_parentWidget); @@ -70,7 +73,10 @@ void LaunchController::login() // if no account is selected, we bail if (!account.get()) + { + emitFailed(tr("No account selected for launch")); return; + } // we try empty password first :) QString password; @@ -92,7 +98,9 @@ void LaunchController::login() // is still logged in. ProgressDialog progDialog(m_parentWidget); if (m_online) + { progDialog.setSkipButton(true, tr("Play Offline")); + } progDialog.execWithTask(task.get()); if (!task->successful()) { @@ -110,6 +118,7 @@ void LaunchController::login() { qCritical() << "Received undetermined session status during login. Bye."; tryagain = false; + emitFailed(tr("Received undetermined session status during login.")); break; } case AuthSession::RequiresPassword: @@ -169,9 +178,11 @@ void LaunchController::login() { launchInstance(); tryagain = false; + return; } } } + emitFailed(tr("Failed to launch.")); } void LaunchController::launchInstance() @@ -182,12 +193,14 @@ void LaunchController::launchInstance() if(!m_instance->reload()) { QMessageBox::critical(m_parentWidget, tr("Error"), tr("Couldn't load the instance profile.")); + emitFailed(tr("Couldn't load the instance profile.")); return; } m_launcher = m_instance->createLaunchTask(m_session); if (!m_launcher) { + emitFailed(tr("Couldn't instantiate a launcher.")); return; } @@ -254,4 +267,5 @@ void LaunchController::instanceEnded() { m_parentWidget->show(); } + emitSucceeded(); } diff --git a/application/LaunchInteraction.h b/application/LaunchInteraction.h index d64c3f6a..b0932e9b 100644 --- a/application/LaunchInteraction.h +++ b/application/LaunchInteraction.h @@ -4,10 +4,12 @@ #include class ConsoleWindow; -class LaunchController: public QObject +class LaunchController: public Task { Q_OBJECT public: + virtual void executeTask(); + LaunchController(QObject * parent = nullptr); virtual ~LaunchController(){}; @@ -28,8 +30,6 @@ public: m_parentWidget = widget; } - void launch(); - private: void login(); void launchInstance(); diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index 8d6f88ae..d2bddd00 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -1498,7 +1498,7 @@ void MainWindow::launch(InstancePtr instance, bool online, BaseProfilerFactory * m_launchController->setOnline(online); m_launchController->setParentWidget(this); m_launchController->setProfiler(profiler); - m_launchController->launch(); + m_launchController->start(); } void MainWindow::taskEnd() diff --git a/application/main.cpp b/application/main.cpp index c134facb..a8951d33 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -21,7 +21,11 @@ int launchInstance(MultiMC &app, InstancePtr inst) LaunchController launchController; launchController.setInstance(inst); launchController.setOnline(true); - launchController.launch(); + QMetaObject::invokeMethod(&launchController, "start", Qt::QueuedConnection); + app.connect(&launchController, &Task::finished, [&app]() + { + app.quit(); + }); return app.exec(); } -- cgit v1.2.3