From 2e86b65bf9dbaeda52c678c4e296a64c6afe59c0 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin <stenzek@gmail.com> Date: Wed, 21 Apr 2021 01:58:49 +1000 Subject: [PATCH] Qt/AchievementLoginDialog: Make login fully asynchronous --- src/duckstation-qt/achievementlogindialog.cpp | 24 +++++++++---------- src/duckstation-qt/achievementlogindialog.h | 1 + 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/duckstation-qt/achievementlogindialog.cpp b/src/duckstation-qt/achievementlogindialog.cpp index 34f8b9436..c768786c3 100644 --- a/src/duckstation-qt/achievementlogindialog.cpp +++ b/src/duckstation-qt/achievementlogindialog.cpp @@ -20,15 +20,20 @@ void AchievementLoginDialog::loginClicked() // TODO: Make cancellable. m_ui.status->setText(tr("Logging in...")); enableUI(false); - qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - bool result; - QtHostInterface::GetInstance()->executeOnEmulationThread( - [username, password, &result]() { - result = Cheevos::Login(username.toStdString().c_str(), password.toStdString().c_str()); - }, - true); + QtHostInterface::GetInstance()->executeOnEmulationThread([this, username, password]() { + const bool result = Cheevos::Login(username.toStdString().c_str(), password.toStdString().c_str()); + QMetaObject::invokeMethod(this, "processLoginResult", Qt::QueuedConnection, Q_ARG(bool, result)); + }); +} +void AchievementLoginDialog::cancelClicked() +{ + done(1); +} + +void AchievementLoginDialog::processLoginResult(bool result) +{ if (!result) { QMessageBox::critical(this, tr("Login Error"), @@ -41,11 +46,6 @@ void AchievementLoginDialog::loginClicked() done(0); } -void AchievementLoginDialog::cancelClicked() -{ - done(1); -} - void AchievementLoginDialog::connectUi() { connect(m_ui.login, &QPushButton::clicked, this, &AchievementLoginDialog::loginClicked); diff --git a/src/duckstation-qt/achievementlogindialog.h b/src/duckstation-qt/achievementlogindialog.h index 8d251fd1a..cd980c650 100644 --- a/src/duckstation-qt/achievementlogindialog.h +++ b/src/duckstation-qt/achievementlogindialog.h @@ -13,6 +13,7 @@ public: private Q_SLOTS: void loginClicked(); void cancelClicked(); + void processLoginResult(bool result); private: void connectUi();