From 8b952b387041341f556edcf0bb34576a2fc88568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 6 Nov 2016 21:58:54 +0100 Subject: NOISSUE Refactor and sanitize MultiMC startup/shutdown * Always create main window. * Properly handle netowrk manager - it was created twice, leading to potential crashes. --- application/MultiMC.cpp | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'application/MultiMC.cpp') diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index 40a11a26..c6ac2b63 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -286,12 +286,17 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) auto inst = instances()->getInstanceById(m_instanceIdToLaunch); if(inst) { - minecraftlist(); + // minimized main window + showMainWindow(true); launch(inst, true, nullptr); return; } } - showMainWindow(); + if(!m_mainWindow) + { + // normal main window + showMainWindow(false); + } } MultiMC::~MultiMC() @@ -340,9 +345,6 @@ void MultiMC::initNetwork() // init the http meta cache ENV.initHttpMetaCache(); - // create the global network manager - ENV.m_qnam.reset(new QNetworkAccessManager(this)); - // init proxy settings { QString proxyTypeStr = settings()->get("ProxyType").toString(); @@ -1052,7 +1054,6 @@ void MultiMC::onExit() { // m_instances->saveGroupList(); } - ENV.destroy(); if(logFile) { logFile->flush(); @@ -1126,6 +1127,12 @@ void MultiMC::controllerSucceeded() } } extras.controller.reset(); + // quit when there are no more windows. + if(m_openWindows == 0) + { + m_status = Status::Succeeded; + quit(); + } } void MultiMC::controllerFailed(const QString& error) @@ -1139,9 +1146,15 @@ void MultiMC::controllerFailed(const QString& error) // on failure, do... nothing extras.controller.reset(); + // quit when there are no more windows. + if(m_openWindows == 0) + { + m_status = Status::Failed; + quit(); + } } -MainWindow * MultiMC::showMainWindow() +MainWindow* MultiMC::showMainWindow(bool minimized) { if(m_mainWindow) { @@ -1154,9 +1167,18 @@ MainWindow * MultiMC::showMainWindow() m_mainWindow = new MainWindow(); m_mainWindow->restoreState(QByteArray::fromBase64(MMC->settings()->get("MainWindowState").toByteArray())); m_mainWindow->restoreGeometry(QByteArray::fromBase64(MMC->settings()->get("MainWindowGeometry").toByteArray())); - m_mainWindow->show(); + if(minimized) + { + m_mainWindow->showMinimized(); + } + else + { + m_mainWindow->show(); + } + m_mainWindow->checkSetDefaultJava(); m_mainWindow->checkInstancePathForProblems(); + m_openWindows++; } return m_mainWindow; } @@ -1177,13 +1199,13 @@ InstanceWindow *MultiMC::showInstanceWindow(InstancePtr instance, QString page) else { window = new InstanceWindow(instance); + m_openWindows ++; connect(window, &InstanceWindow::isClosing, this, &MultiMC::on_windowClose); } if(!page.isEmpty()) { window->selectPage(page); } - m_openWindows ++; if(extras.controller) { extras.controller->setParentWidget(window); -- cgit v1.2.3