aboutsummaryrefslogtreecommitdiff
path: root/src/yuzu/configuration
diff options
context:
space:
mode:
authorcrueter <crueter@eden-emu.dev>2026-01-30 14:35:05 +0100
committercrueter <crueter@eden-emu.dev>2026-01-30 14:35:05 +0100
commit8b55a15808a99ac7e278eff5cc0c3c0fdc46a8c0 (patch)
treecd321a5df778c10083deb278ae6211fb88cefa47 /src/yuzu/configuration
parenta692986bd7d1c1f4363c2d70cceac7b6a23a113a (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.cpp20
-rw-r--r--src/yuzu/configuration/configure_profile_manager.h10
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);