From 212b0e6aed3349f072c5b9c4e71d450aebba12db Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 8 Jan 2026 15:30:44 +1000 Subject: [PATCH] Qt: Display profile icon in achievement settings --- .../achievementsettingswidget.cpp | 31 ++++-- .../achievementsettingswidget.ui | 96 +++++++++++-------- 2 files changed, 80 insertions(+), 47 deletions(-) diff --git a/src/duckstation-qt/achievementsettingswidget.cpp b/src/duckstation-qt/achievementsettingswidget.cpp index 73449a9ba..341873838 100644 --- a/src/duckstation-qt/achievementsettingswidget.cpp +++ b/src/duckstation-qt/achievementsettingswidget.cpp @@ -104,7 +104,7 @@ AchievementSettingsWidget::AchievementSettingsWidget(SettingsWindow* dialog, QWi { connect(m_ui.loginButton, &QPushButton::clicked, this, &AchievementSettingsWidget::onLoginLogoutPressed); connect(m_ui.viewProfile, &QPushButton::clicked, this, &AchievementSettingsWidget::onViewProfilePressed); - connect(m_ui.refreshProgress, &QPushButton::clicked, g_main_window, &MainWindow::refreshAchievementProgress); + connect(g_core_thread, &CoreThread::achievementsLoginSuccess, this, &AchievementSettingsWidget::updateLoginState); updateLoginState(); } else @@ -159,8 +159,6 @@ void AchievementSettingsWidget::updateEnableState() m_ui.encoreMode->setEnabled(enabled); m_ui.spectatorMode->setEnabled(enabled); m_ui.unofficialAchievements->setEnabled(enabled); - if (!m_dialog->isPerGameSettings()) - m_ui.refreshProgress->setEnabled(enabled && m_ui.viewProfile->isEnabled()); } void AchievementSettingsWidget::onHardcoreModeStateChanged() @@ -204,7 +202,29 @@ void AchievementSettingsWidget::onLeaderboardsNotificationDurationSliderChanged( void AchievementSettingsWidget::updateLoginState() { - const std::string username(Core::GetBaseStringSettingValue("Cheevos", "Username")); + std::string username; + std::string badge_path; + + { + const auto lock = Achievements::GetLock(); + if (Achievements::IsLoggedIn()) + { + if (const char* username_ptr = Achievements::GetLoggedInUserName()) + username = username_ptr; + + badge_path = Achievements::GetLoggedInUserBadgePath(); + } + else + { + username = Core::GetBaseStringSettingValue("Cheevos", "Username"); + } + } + + if (badge_path.empty()) + badge_path = QtHost::GetResourcePath("images/ra-generic-user.png", true); + + m_ui.userBadge->setPixmap(QPixmap(QString::fromStdString(badge_path))); + const bool logged_in = !username.empty(); if (logged_in) @@ -214,7 +234,7 @@ void AchievementSettingsWidget::updateLoginState() const QString login_timestamp = QtHost::FormatNumber(Host::NumberFormatType::ShortDateTime, static_cast(login_unix_timestamp)); m_ui.loginStatus->setText( - tr("Username: %1\nLogin token generated on %2.").arg(QString::fromStdString(username)).arg(login_timestamp)); + tr("Logged in as %1\nToken generated at %2").arg(QString::fromStdString(username)).arg(login_timestamp)); m_ui.loginButton->setText(tr("Logout")); } else @@ -224,7 +244,6 @@ void AchievementSettingsWidget::updateLoginState() } m_ui.viewProfile->setEnabled(logged_in); - m_ui.refreshProgress->setEnabled(logged_in && Core::GetBaseBoolSettingValue("Cheevos", "Enabled", false)); } void AchievementSettingsWidget::onLoginLogoutPressed() diff --git a/src/duckstation-qt/achievementsettingswidget.ui b/src/duckstation-qt/achievementsettingswidget.ui index 0cd04680d..be3aa481a 100644 --- a/src/duckstation-qt/achievementsettingswidget.ui +++ b/src/duckstation-qt/achievementsettingswidget.ui @@ -23,6 +23,61 @@ 0 + + + + + 10 + + + + + + 0 + 0 + + + + + 32 + 32 + + + + + 32 + 32 + + + + true + + + + + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop + + + + + + + View Profile... + + + + + + + Login... + + + + + + @@ -232,47 +287,6 @@ - - - - Account - - - - - - Username: -Login token generated at: - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop - - - - - - - Refresh Progress - - - - - - - View Profile... - - - - - - - Login... - - - - - -