diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-09-23 14:51:51 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-09-23 14:51:51 +0200 |
| commit | 278f411dad6e8a52747994888f8778b277f6d953 (patch) | |
| tree | e84710ade94d0f4d6ed72d48c87c3b54328d8e5a /src/yuzu/main_window.cpp | |
| parent | 3d37a816c6adc2708a7be70f5a7fbe0af36b8227 (diff) | |
[frontend] Unify cmdline parsing (#4424)
Addresses #4383.
Makes it so both the Qt and SDL frontends now share the same options (bar `-hlaunch` and `-qlaunch`).
Signed-off-by: lizzie <lizzie@eden-emu.dev>
- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.
-------------------
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4424
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'src/yuzu/main_window.cpp')
| -rw-r--r-- | src/yuzu/main_window.cpp | 86 |
1 files changed, 18 insertions, 68 deletions
diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index 1d579239a1..e2807e80ff 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -3,6 +3,7 @@ // Static Qt on macOS doesn't use Vulkan // Other platforms do, and thus have conflicting VulkanMemoryAllocator symbols +#include "core/launch_params.h" #if defined(QT_STATICPLUGIN) && !defined(__APPLE__) #undef VMA_IMPLEMENTATION #endif @@ -515,79 +516,28 @@ MainWindow::MainWindow(bool has_broken_vulkan) // to prevent the UI from blowing up. UpdateUITheme(); - QStringList args = QApplication::arguments(); + if (QStringList args = QApplication::arguments(); args.size() >= 2) { + QList<QByteArray> qba{}; + for (auto const& e : args) + qba.push_back(e.toUtf8()); + std::vector<char*> args_cstr{}; + for (auto& e : qba) + args_cstr.push_back(e.data()); - if (args.size() < 2) { - return; - } + auto const lp = Core::ParseLaunchParams(*QtCommon::system, args_cstr.size(), args_cstr.data(), nullptr); - QString game_path; - bool should_launch_qlaunch = false; - bool should_launch_hlaunch = false; - bool should_launch_setup = false; - bool has_gamepath = false; - bool is_fullscreen = false; - - // Preserves drag/drop functionality - for (int i = 1; i < args.size(); ++i) { - if (args[i] == QStringLiteral("-f")) { - // Launch game in fullscreen mode - is_fullscreen = true; - } else if (args[i] == QStringLiteral("-u") && i < args.size() - 1) { - // Launch game with a specific user - int user_arg_idx = ++i; - bool argument_ok; - std::size_t selected_user = args[user_arg_idx].toUInt(&argument_ok); - if (!argument_ok) { - // try to look it up by username, only finds the first username that matches. - std::string const user_arg_str = args[user_arg_idx].toStdString(); - auto const user_idx = - QtCommon::system->GetProfileManager().GetUserIndex(user_arg_str); - if (user_idx != std::nullopt) { - selected_user = user_idx.value(); - } else { - LOG_ERROR(Frontend, "Invalid user argument '{}'", user_arg_str); - continue; - } - } - if (QtCommon::system->GetProfileManager().UserExistsIndex(selected_user)) { - Settings::values.current_user = s32(selected_user); - user_flag_cmd_line = true; - } else { - LOG_ERROR(Frontend, "Selected user {} doesn't exist", selected_user); - } - } else if (args[i] == QStringLiteral("-g") && i < args.size() - 1) { - // Launch game at path - game_path = args[++i]; - has_gamepath = true; - } else if (args[i] == QStringLiteral("-input-profile") && i < args.size() - 1) { - auto& players = Settings::values.players.GetValue(); - players[0].profile_name = args[++i].toStdString(); - } else if (args[i] == QStringLiteral("-qlaunch")) { - should_launch_qlaunch = true; - } else if (args[i] == QStringLiteral("-hlaunch")) { - should_launch_hlaunch = true; - } else if (args[i] == QStringLiteral("-setup")) { - should_launch_setup = true; - } else { - game_path = args[i]; - has_gamepath = true; + // Override fullscreen setting if gamepath or argument is provided + if (!lp.filepath.empty() || lp.fullscreen) { + ui->action_Fullscreen->setChecked(lp.fullscreen); } - } - // Override fullscreen setting if gamepath or argument is provided - if (has_gamepath || is_fullscreen) { - ui->action_Fullscreen->setChecked(is_fullscreen); - } - - if (should_launch_setup) { - LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Starter), std::nullopt); - } else { - if (!game_path.isEmpty()) { - BootGame(game_path, ApplicationAppletParameters()); - } else if (should_launch_qlaunch) { + if (!lp.filepath.empty()) { + BootGame(QString::fromStdString(lp.filepath), ApplicationAppletParameters()); + } else if (lp.launch_setup) { + LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::Starter), std::nullopt); + } else if (lp.launch_qlaunch) { LaunchFirmwareApplet(u64(Service::AM::AppletProgramId::QLaunch), std::nullopt); - } else if (should_launch_hlaunch) { + } else if (lp.launch_hlaunch) { std::filesystem::path const sd_dir = Common::FS::GetEdenPathString(Common::FS::EdenPath::SDMCDir); auto const hbl_path = (sd_dir / "atmosphere" / "hbl.nsp").string(); |
