summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--application/MainWindow.cpp21
-rw-r--r--application/MultiMC.cpp10
-rw-r--r--application/MultiMC.h6
3 files changed, 32 insertions, 5 deletions
diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp
index bf9da0dc..70a0fbf1 100644
--- a/application/MainWindow.cpp
+++ b/application/MainWindow.cpp
@@ -1356,12 +1356,27 @@ void MainWindow::on_actionViewSelectedInstFolder_triggered()
void MainWindow::closeEvent(QCloseEvent *event)
{
- // Save the window state and geometry.
+ if(MMC->numRunningInstances())
+ {
+ auto resBtn = QMessageBox::question(
+ this,
+ tr("Do you want to close MultiMC?"),
+ tr("<p>You still have instances running.</p><p>Closing MultiMC will result in inaccurate time tracking and no Minecraft crash handling.</p><p>Are you sure?</p>"),
+ QMessageBox::No | QMessageBox::Yes,
+ QMessageBox::Yes
+ );
+ if (resBtn != QMessageBox::Yes)
+ {
+ event->ignore();
+ return;
+ }
+ }
+ // no running instances or user said yes.
+ event->accept();
+ // Save the window state and geometry.
MMC->settings()->set("MainWindowState", saveState().toBase64());
MMC->settings()->set("MainWindowGeometry", saveGeometry().toBase64());
-
- QMainWindow::closeEvent(event);
QApplication::exit();
}
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp
index c6ac2b63..3c637077 100644
--- a/application/MultiMC.cpp
+++ b/application/MultiMC.cpp
@@ -1104,6 +1104,7 @@ void MultiMC::launch(InstancePtr instance, bool online, BaseProfilerFactory *pro
connect(controller.get(), &LaunchController::succeeded, this, &MultiMC::controllerSucceeded);
connect(controller.get(), &LaunchController::failed, this, &MultiMC::controllerFailed);
controller->start();
+ m_runningInstances ++;
}
else if (instance->isRunning())
{
@@ -1118,6 +1119,7 @@ void MultiMC::controllerSucceeded()
return;
auto id = controller->id();
auto & extras = m_instanceExtras[id];
+
// on success, do...
if (controller->instance()->settings()->get("AutoCloseConsole").toBool())
{
@@ -1127,8 +1129,10 @@ void MultiMC::controllerSucceeded()
}
}
extras.controller.reset();
+ m_runningInstances --;
+
// quit when there are no more windows.
- if(m_openWindows == 0)
+ if(m_openWindows == 0 && m_runningInstances == 0)
{
m_status = Status::Succeeded;
quit();
@@ -1146,8 +1150,10 @@ void MultiMC::controllerFailed(const QString& error)
// on failure, do... nothing
extras.controller.reset();
+ m_runningInstances --;
+
// quit when there are no more windows.
- if(m_openWindows == 0)
+ if(m_openWindows == 0 && m_runningInstances == 0)
{
m_status = Status::Failed;
quit();
diff --git a/application/MultiMC.h b/application/MultiMC.h
index 7f45e873..b4087ef3 100644
--- a/application/MultiMC.h
+++ b/application/MultiMC.h
@@ -144,6 +144,11 @@ public:
InstanceWindow *showInstanceWindow(InstancePtr instance, QString page = QString());
MainWindow *showMainWindow(bool minimized = false);
+ size_t numRunningInstances()
+ {
+ return m_runningInstances;
+ }
+
public slots:
void launch(InstancePtr instance, bool online = true, BaseProfilerFactory *profiler = nullptr);
@@ -208,6 +213,7 @@ private:
};
std::map<QString, InstanceXtras> m_instanceExtras;
size_t m_openWindows = 0;
+ size_t m_runningInstances = 0;
// main window, if any
MainWindow * m_mainWindow = nullptr;