Qt: Show dialog on startup for settings version mismatch

For the QMessageBox to appear, error reporting is performed again after
main window creation.
This commit is contained in:
Albert Liu 2020-10-07 20:43:50 -07:00
parent 9d2687e7d4
commit 94d7d4cead
5 changed files with 28 additions and 2 deletions

View file

@ -55,6 +55,8 @@ int main(int argc, char* argv[])
window->startupUpdateCheck(); window->startupUpdateCheck();
} }
window->reportSettingsVersionMismatchString();
int result = app.exec(); int result = app.exec();
window.reset(); window.reset();

View file

@ -1088,6 +1088,13 @@ void MainWindow::startupUpdateCheck()
checkForUpdates(false); checkForUpdates(false);
} }
void MainWindow::reportSettingsVersionMismatchString()
{
const QString mismatch_str = QString::fromStdString(m_host_interface->GetSettingsVersionMismatchString());
if (!mismatch_str.isEmpty())
reportError(mismatch_str);
}
void MainWindow::updateDebugMenuVisibility() void MainWindow::updateDebugMenuVisibility()
{ {
const bool visible = m_host_interface->GetBoolSettingValue("Main", "ShowDebugMenu", false); const bool visible = m_host_interface->GetBoolSettingValue("Main", "ShowDebugMenu", false);

View file

@ -30,6 +30,10 @@ public:
/// Performs update check if enabled in settings. /// Performs update check if enabled in settings.
void startupUpdateCheck(); void startupUpdateCheck();
/// Reports m_host_interface's settings version mismatch string. Does nothing if string is empty (no settings version
/// mismatch detected).
void reportSettingsVersionMismatchString();
public Q_SLOTS: public Q_SLOTS:
/// Updates debug menu visibility (hides if disabled). /// Updates debug menu visibility (hides if disabled).
void updateDebugMenuVisibility(); void updateDebugMenuVisibility();

View file

@ -1995,8 +1995,10 @@ void CommonHostInterface::CheckSettings(SettingsInterface& si)
if (settings_version == SETTINGS_VERSION) if (settings_version == SETTINGS_VERSION)
return; return;
ReportFormattedError("Settings version %d does not match expected version %d, resetting", settings_version, m_settings_version_mismatch_str = StringUtil::StdStringFromFormat(
SETTINGS_VERSION); "Settings version %d does not match expected version %d, resetting", settings_version, SETTINGS_VERSION);
ReportError(m_settings_version_mismatch_str.c_str());
si.Clear(); si.Clear();
si.SetIntValue("Main", "SettingsVersion", SETTINGS_VERSION); si.SetIntValue("Main", "SettingsVersion", SETTINGS_VERSION);
SetDefaultSettings(si); SetDefaultSettings(si);
@ -2101,6 +2103,11 @@ void CommonHostInterface::CheckForSettingsChanges(const Settings& old_settings)
UpdateInputMap(); UpdateInputMap();
} }
const std::string& CommonHostInterface::GetSettingsVersionMismatchString() const
{
return m_settings_version_mismatch_str;
}
void CommonHostInterface::SetTimerResolutionIncreased(bool enabled) void CommonHostInterface::SetTimerResolutionIncreased(bool enabled)
{ {
if (m_timer_resolution_increased == enabled) if (m_timer_resolution_increased == enabled)

View file

@ -174,6 +174,10 @@ public:
/// Reloads post processing shaders with the current configuration. /// Reloads post processing shaders with the current configuration.
void ReloadPostProcessingShaders(); void ReloadPostProcessingShaders();
/// Returns an empty string if no settings version mismatch was detected, non-empty otherwise. Should not be called
/// before CheckSettings(SettingsInterface& si).
const std::string& GetSettingsVersionMismatchString() const;
protected: protected:
enum : u32 enum : u32
{ {
@ -371,6 +375,8 @@ private:
// running in batch mode? i.e. exit after stopping emulation // running in batch mode? i.e. exit after stopping emulation
bool m_batch_mode = false; bool m_batch_mode = false;
std::string m_settings_version_mismatch_str;
#ifdef WITH_DISCORD_PRESENCE #ifdef WITH_DISCORD_PRESENCE
// discord rich presence // discord rich presence
bool m_discord_presence_enabled = false; bool m_discord_presence_enabled = false;