From 91058d738389490cfb31e9fb4932717f807f6179 Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 26 Apr 2026 03:26:04 +0200 Subject: [PATCH] [desktop] Fix 2 mod manager bugs (#3884) - Multi-import would show duplicates of a mod if it had both exefs and romfs - Import from folder would crash on some single mods Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3884 Reviewed-by: Lizzie Reviewed-by: MaranBr --- src/frontend_common/mod_manager.cpp | 6 +++++- src/qt_common/util/mod.cpp | 6 ++++-- src/yuzu/configuration/addon/mod_select_dialog.cpp | 5 ++--- src/yuzu/configuration/addon/mod_select_dialog.ui | 4 ++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/frontend_common/mod_manager.cpp b/src/frontend_common/mod_manager.cpp index ddb196cf1a..35d7068f2f 100644 --- a/src/frontend_common/mod_manager.cpp +++ b/src/frontend_common/mod_manager.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include "common/fs/fs.h" #include "common/fs/fs_types.h" @@ -25,7 +26,10 @@ std::vector GetModFolder(const std::string& root) { "romfslite"}; if (std::ranges::find(valid_names, name) != valid_names.end()) { - paths.emplace_back(entry.path().parent_path()); + const auto parent = entry.path().parent_path(); + if (std::ranges::find(paths, parent) == paths.end()) { + paths.emplace_back(parent); + } } return true; diff --git a/src/qt_common/util/mod.cpp b/src/qt_common/util/mod.cpp index 38bc8f5be0..4e7fd54e79 100644 --- a/src/qt_common/util/mod.cpp +++ b/src/qt_common/util/mod.cpp @@ -101,8 +101,10 @@ QStringList GetModFolders(const QString& root, const QString& fallbackName) { } else { // Rename the existing mod folder. const auto new_path = std_path.parent_path() / name.toStdString(); - fs::remove_all(new_path); - fs::rename(std_path, new_path); + if (new_path != std_path) { + fs::remove_all(new_path); + fs::rename(std_path, new_path); + } std_path = new_path; } diff --git a/src/yuzu/configuration/addon/mod_select_dialog.cpp b/src/yuzu/configuration/addon/mod_select_dialog.cpp index 467de5a764..49f556a66a 100644 --- a/src/yuzu/configuration/addon/mod_select_dialog.cpp +++ b/src/yuzu/configuration/addon/mod_select_dialog.cpp @@ -31,11 +31,10 @@ ModSelectDialog::ModSelectDialog(const QStringList& mods, QWidget* parent) } ui->treeView->expandAll(); - ui->treeView->resizeColumnToContents(0); int rows = item_model->rowCount(); int height = - ui->treeView->contentsMargins().top() * 4 + ui->treeView->contentsMargins().bottom() * 4; + 4 + ui->treeView->contentsMargins().top() * 4 + ui->treeView->contentsMargins().bottom() * 4; int width = 0; for (int i = 0; i < rows; ++i) { @@ -46,7 +45,7 @@ ModSelectDialog::ModSelectDialog(const QStringList& mods, QWidget* parent) width += ui->treeView->contentsMargins().left() * 4 + ui->treeView->contentsMargins().right() * 4; ui->treeView->setMinimumHeight(qMin(height, 600)); - ui->treeView->setMinimumWidth(qMin(width, 700)); + ui->treeView->setMinimumWidth(qMax(width, 540)); adjustSize(); connect(this, &QDialog::accepted, this, [this]() { diff --git a/src/yuzu/configuration/addon/mod_select_dialog.ui b/src/yuzu/configuration/addon/mod_select_dialog.ui index 6e196ecff0..0eb1a7e634 100644 --- a/src/yuzu/configuration/addon/mod_select_dialog.ui +++ b/src/yuzu/configuration/addon/mod_select_dialog.ui @@ -6,12 +6,12 @@ 0 0 - 400 + 580 430 - Dialog + Import Mods