diff options
| author | crueter <crueter@eden-emu.dev> | 2026-01-30 14:35:05 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-01-30 14:35:05 +0100 |
| commit | 8b55a15808a99ac7e278eff5cc0c3c0fdc46a8c0 (patch) | |
| tree | cd321a5df778c10083deb278ae6211fb88cefa47 /src/yuzu/configuration | |
| parent | a692986bd7d1c1f4363c2d70cceac7b6a23a113a (diff) | |
[desktop] Fix double profile deletion (#3422)
Classic case of double-emission of signals. Epic
Also fixed a bug that caused profile manager to not immediately update when a profile was deleted from Qlaunch.
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3422
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/configure_profile_manager.cpp | 20 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_profile_manager.h | 10 |
2 files changed, 20 insertions, 10 deletions
diff --git a/src/yuzu/configuration/configure_profile_manager.cpp b/src/yuzu/configuration/configure_profile_manager.cpp index 1a9152c41d..aa19203498 100644 --- a/src/yuzu/configuration/configure_profile_manager.cpp +++ b/src/yuzu/configuration/configure_profile_manager.cpp @@ -113,6 +113,8 @@ ConfigureProfileManager::ConfigureProfileManager(Core::System& system_, QWidget* connect(ui->pm_add, &QPushButton::clicked, this, &ConfigureProfileManager::AddUser); confirm_dialog = new ConfigureProfileManagerDeleteDialog(this); + connect(confirm_dialog, &ConfigureProfileManagerDeleteDialog::deleteUser, this, + &ConfigureProfileManager::DeleteUser); scene = new QGraphicsScene; ui->current_user_icon->setScene(scene); @@ -146,6 +148,7 @@ void ConfigureProfileManager::SetConfiguration() { } void ConfigureProfileManager::PopulateUserList() { + profile_manager.ResetUserSaveFile(); const auto& profiles = profile_manager.GetAllUsers(); for (const auto& user : profiles) { Service::Account::ProfileBase profile{}; @@ -323,16 +326,16 @@ void ConfigureProfileManager::ConfirmDeleteUser() { ASSERT(uuid); const auto username = GetAccountUsername(profile_manager, *uuid); - confirm_dialog->SetInfo(username, *uuid, [this, uuid]() { DeleteUser(*uuid); }); + confirm_dialog->SetInfo(username, *uuid, index); confirm_dialog->show(); } -void ConfigureProfileManager::DeleteUser(const Common::UUID& uuid) { +void ConfigureProfileManager::DeleteUser(const int index) { if (Settings::values.current_user.GetValue() == tree_view->currentIndex().row()) { Settings::values.current_user = 0; } - if (!profile_manager.RemoveUser(uuid)) { + if (!profile_manager.RemoveProfileAtIndex(index)) { return; } @@ -378,19 +381,20 @@ ConfigureProfileManagerDeleteDialog::ConfigureProfileManagerDeleteDialog(QWidget setMinimumSize(380, 160); connect(dialog_button_box, &QDialogButtonBox::rejected, this, [this]() { close(); }); + connect(dialog_button_box, &QDialogButtonBox::accepted, this, [this]() { + close(); + emit deleteUser(m_index); + }); } ConfigureProfileManagerDeleteDialog::~ConfigureProfileManagerDeleteDialog() = default; void ConfigureProfileManagerDeleteDialog::SetInfo(const QString& username, const Common::UUID& uuid, - std::function<void()> accept_callback) { + int index) { label_info->setText( tr("Name: %1\nUUID: %2").arg(username, QString::fromStdString(uuid.FormattedString()))); icon_scene->clear(); icon_scene->addPixmap(GetIcon(uuid)); - connect(dialog_button_box, &QDialogButtonBox::accepted, this, [this, accept_callback]() { - close(); - accept_callback(); - }); + m_index = index; } diff --git a/src/yuzu/configuration/configure_profile_manager.h b/src/yuzu/configuration/configure_profile_manager.h index cdc0bd7fff..6e8c762452 100644 --- a/src/yuzu/configuration/configure_profile_manager.h +++ b/src/yuzu/configuration/configure_profile_manager.h @@ -40,18 +40,24 @@ namespace Ui { class ConfigureProfileManager; } +// TODO(crueter): Move this to a .ui def class ConfigureProfileManagerDeleteDialog : public QDialog { + Q_OBJECT public: explicit ConfigureProfileManagerDeleteDialog(QWidget* parent); ~ConfigureProfileManagerDeleteDialog(); void SetInfo(const QString& username, const Common::UUID& uuid, - std::function<void()> accept_callback); + int index); + +signals: + void deleteUser(int index); private: QDialogButtonBox* dialog_button_box; QGraphicsScene* icon_scene; QLabel* label_info; + int m_index = 0; }; class ConfigureProfileManager : public QWidget { @@ -66,6 +72,7 @@ public: private slots: void saveImage(QPixmap pixmap, Common::UUID uuid); void showContextMenu(const QPoint &pos); + void DeleteUser(const int index); private: void changeEvent(QEvent* event) override; @@ -80,7 +87,6 @@ private: void AddUser(); void EditUser(); void ConfirmDeleteUser(); - void DeleteUser(const Common::UUID& uuid); bool LoadAvatarData(); std::vector<uint8_t> DecompressYaz0(const FileSys::VirtualFile& file); |
