aboutsummaryrefslogtreecommitdiff
path: root/src/yuzu/main_window.cpp
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-09-23 14:51:51 +0200
committercrueter <crueter@eden-emu.dev>2026-09-23 14:51:51 +0200
commit278f411dad6e8a52747994888f8778b277f6d953 (patch)
treee84710ade94d0f4d6ed72d48c87c3b54328d8e5a /src/yuzu/main_window.cpp
parent3d37a816c6adc2708a7be70f5a7fbe0af36b8227 (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.cpp86
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();