From 6ae27224b0dcc860b882bebff3149828d874c832 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Thu, 12 Nov 2020 03:15:14 -0500 Subject: fixed a bunch of instance and command line stuff - clear instance manager overrides when restarting, or switching instances after starting MO with moshortcut://instance: won't do anything - clear overrides when the last selected instance can't be opened; MO would keep trying to open shortcuts even after selecting a different instance - command line was cleared too early, before the first run, so shortcuts were broken - the instance manager dialog can be opened without an instance loaded if the last selected instance doesn't exist, createNew() would throw because it tried to access the global Settings - fixed some problems with parts of MO wanting to restart and others expecting flow to continue - fixed create instance dialog using settings pointer to decide whether to restart; it restarts when it's the first created instance, which is not always the case even if the settings are null, so just check whether there are instances --- src/moapplication.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/moapplication.cpp') diff --git a/src/moapplication.cpp b/src/moapplication.cpp index 9139acbb..e7ac3926 100644 --- a/src/moapplication.cpp +++ b/src/moapplication.cpp @@ -170,12 +170,13 @@ int MOApplication::run(MOMultiProcess& multiProcess) { try { - // resets things when MO is "restarted" - resetForRestart(); - tt.stop(); + const auto r = doOneRun(multiProcess); + if (r == RestartExitCode) { + // resets things when MO is "restarted" + resetForRestart(); continue; } @@ -396,6 +397,10 @@ std::optional MOApplication::getCurrentInstance() if (!currentInstance) { + // clear any overrides that might have been given on the command line + m.clearOverrides(); + m_cl.clear(); + currentInstance = selectInstance(); } else @@ -403,6 +408,10 @@ std::optional MOApplication::getCurrentInstance() if (!QDir(currentInstance->directory()).exists()) { // the previously used instance doesn't exist anymore + // clear any overrides that might have been given on the command line + m.clearOverrides(); + m_cl.clear(); + if (m.hasAnyInstances()) { MOShared::criticalOnTop(QObject::tr( "Instance at '%1' not found. Select another instance.") @@ -466,6 +475,9 @@ void MOApplication::resetForRestart() // don't reprocess command line m_cl.clear(); + + // clear instance and profile overrides + InstanceManager::singleton().clearOverrides(); } bool MOApplication::setStyleFile(const QString& styleName) -- cgit v1.3.1