mirror of
https://github.com/stenzek/duckstation.git
synced 2026-02-04 05:04:33 +00:00
Qt: Get rid of nested event loops in achievement login
This commit is contained in:
@@ -688,9 +688,7 @@ void Achievements::UpdateSettings(const Settings& old_config)
|
||||
if (g_settings.achievements_hardcore_mode != old_config.achievements_hardcore_mode)
|
||||
{
|
||||
// Enables have to wait for reset, disables can go through immediately.
|
||||
if (g_settings.achievements_hardcore_mode)
|
||||
DisplayHardcoreDeferredMessage();
|
||||
else
|
||||
if (!g_settings.achievements_hardcore_mode)
|
||||
DisableHardcoreMode(true, true);
|
||||
}
|
||||
|
||||
@@ -1701,8 +1699,8 @@ void Achievements::OnHardcoreModeChanged(bool enabled, bool display_message, boo
|
||||
if (System::IsValid() && display_message)
|
||||
{
|
||||
Host::AddIconOSDMessage(OSDMessageType::Info, "AchievementsHardcoreModeChanged", RA_LOGO_ICON_NAME,
|
||||
enabled ? TRANSLATE_STR("Achievements", "Hardcore Mode Enabled") :
|
||||
TRANSLATE_STR("Achievements", "Hardcore Mode Disabled"),
|
||||
enabled ? TRANSLATE_STR("Achievements", "Hardcore mode enabled.") :
|
||||
TRANSLATE_STR("Achievements", "Hardcore mode disabled."),
|
||||
enabled ? TRANSLATE_STR("Achievements", "Restrictions are now active.") :
|
||||
TRANSLATE_STR("Achievements", "Restrictions are no longer active."));
|
||||
}
|
||||
|
||||
@@ -80,45 +80,81 @@ void AchievementLoginDialog::processLoginResult(bool result, const QString& mess
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Host::GetBaseBoolSettingValue("Cheevos", "Enabled", false) &&
|
||||
QtUtils::MessageBoxQuestion(
|
||||
this, tr("Enable Achievements"),
|
||||
tr("Achievement tracking is not currently enabled. Your login will have no effect until "
|
||||
"after tracking is enabled.\n\nDo you want to enable tracking now?")) == QMessageBox::Yes)
|
||||
// don't ask to enable etc if we are just reauthenticating
|
||||
if (m_reason == Achievements::LoginRequestReason::TokenInvalid)
|
||||
{
|
||||
accept();
|
||||
return;
|
||||
}
|
||||
|
||||
askToEnableAchievementsAndAccept();
|
||||
}
|
||||
|
||||
void AchievementLoginDialog::askToEnableAchievementsAndAccept()
|
||||
{
|
||||
if (Host::GetBaseBoolSettingValue("Cheevos", "Enabled", false))
|
||||
{
|
||||
askToEnableHardcoreModeAndAccept();
|
||||
return;
|
||||
}
|
||||
|
||||
QMessageBox* const msgbox =
|
||||
QtUtils::NewMessageBox(this, QMessageBox::Question, tr("Enable Achievements"),
|
||||
tr("Achievement tracking is not currently enabled. Your login will have no effect until "
|
||||
"after tracking is enabled.\n\nDo you want to enable tracking now?"),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton);
|
||||
msgbox->connect(msgbox, &QMessageBox::accepted, this, [this]() {
|
||||
Host::SetBaseBoolSettingValue("Cheevos", "Enabled", true);
|
||||
Host::CommitBaseSettingChanges();
|
||||
g_emu_thread->applySettings();
|
||||
askToEnableHardcoreModeAndAccept();
|
||||
});
|
||||
msgbox->connect(msgbox, &QMessageBox::rejected, this, &AchievementLoginDialog::accept);
|
||||
msgbox->open();
|
||||
}
|
||||
|
||||
void AchievementLoginDialog::askToEnableHardcoreModeAndAccept()
|
||||
{
|
||||
if (Host::GetBaseBoolSettingValue("Cheevos", "ChallengeMode", false))
|
||||
{
|
||||
askToResetGameAndAccept();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Host::GetBaseBoolSettingValue("Cheevos", "ChallengeMode", false) &&
|
||||
QtUtils::MessageBoxQuestion(
|
||||
this, tr("Enable Hardcore Mode"),
|
||||
tr("Hardcore mode is not currently enabled. Enabling hardcore mode allows you to set times, scores, and "
|
||||
"participate in game-specific leaderboards.\n\nHowever, hardcore mode also prevents the usage of save "
|
||||
"states, cheats and slowdown functionality.\n\nDo you want to enable hardcore mode?")) == QMessageBox::Yes)
|
||||
{
|
||||
QMessageBox* const msgbox = QtUtils::NewMessageBox(
|
||||
this, QMessageBox::Question, tr("Enable Hardcore Mode"),
|
||||
tr("Hardcore mode is not currently enabled. Enabling hardcore mode allows you to set times, scores, and "
|
||||
"participate in game-specific leaderboards.\n\nHowever, hardcore mode also prevents the usage of save "
|
||||
"states, cheats and slowdown functionality.\n\nDo you want to enable hardcore mode?"),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton);
|
||||
msgbox->connect(msgbox, &QMessageBox::accepted, this, [this]() {
|
||||
Host::SetBaseBoolSettingValue("Cheevos", "ChallengeMode", true);
|
||||
Host::CommitBaseSettingChanges();
|
||||
g_emu_thread->applySettings();
|
||||
askToResetGameAndAccept();
|
||||
});
|
||||
msgbox->connect(msgbox, &QMessageBox::rejected, this, &AchievementLoginDialog::accept);
|
||||
msgbox->open();
|
||||
}
|
||||
|
||||
bool has_active_game;
|
||||
{
|
||||
auto lock = Achievements::GetLock();
|
||||
has_active_game = Achievements::HasActiveGame();
|
||||
}
|
||||
|
||||
if (has_active_game &&
|
||||
QtUtils::MessageBoxCritical(
|
||||
this, tr("Reset System"),
|
||||
tr("Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now?")) ==
|
||||
QMessageBox::Yes)
|
||||
{
|
||||
g_emu_thread->resetSystem(true);
|
||||
}
|
||||
void AchievementLoginDialog::askToResetGameAndAccept()
|
||||
{
|
||||
if (!QtHost::IsSystemValid())
|
||||
{
|
||||
accept();
|
||||
return;
|
||||
}
|
||||
|
||||
accept();
|
||||
QMessageBox* const msgbox = QtUtils::NewMessageBox(
|
||||
this, QMessageBox::Question, tr("Reset System"),
|
||||
tr("Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now?"),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton);
|
||||
msgbox->connect(msgbox, &QMessageBox::accepted, this, [this]() {
|
||||
g_emu_thread->resetSystem(true);
|
||||
accept();
|
||||
});
|
||||
msgbox->connect(msgbox, &QMessageBox::rejected, this, &AchievementLoginDialog::accept);
|
||||
msgbox->open();
|
||||
}
|
||||
|
||||
void AchievementLoginDialog::connectUi()
|
||||
|
||||
@@ -27,6 +27,10 @@ private:
|
||||
void cancelClicked();
|
||||
void processLoginResult(bool result, const QString& message);
|
||||
|
||||
void askToEnableAchievementsAndAccept();
|
||||
void askToEnableHardcoreModeAndAccept();
|
||||
void askToResetGameAndAccept();
|
||||
|
||||
Ui::AchievementLoginDialog m_ui;
|
||||
QPushButton* m_login;
|
||||
Achievements::LoginRequestReason m_reason;
|
||||
|
||||
@@ -179,15 +179,12 @@ void AchievementSettingsWidget::onHardcoreModeStateChanged()
|
||||
return;
|
||||
}
|
||||
|
||||
if (QtUtils::MessageBoxQuestion(
|
||||
this, tr("Reset System"),
|
||||
tr("Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now?")) !=
|
||||
QMessageBox::Yes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
g_emu_thread->resetSystem(true);
|
||||
QMessageBox* const msgbox = QtUtils::NewMessageBox(
|
||||
this, QMessageBox::Question, tr("Reset System"),
|
||||
tr("Hardcore mode will not be enabled until the system is reset. Do you want to reset the system now?"),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton);
|
||||
msgbox->connect(msgbox, &QMessageBox::accepted, this, []() { g_emu_thread->resetSystem(true); });
|
||||
msgbox->open();
|
||||
}
|
||||
|
||||
void AchievementSettingsWidget::onAchievementsNotificationDurationSliderChanged()
|
||||
|
||||
Reference in New Issue
Block a user