-s use_gui=no
```
-The executable also tries to load `~/default.uae` by default. A missing default config is ignored silently; explicit `-config` / `-f` load failures are still reported.
+The executable also tries to load `default.uae` from the configuration path by default, and the Qt configuration UI starts with it loaded when it exists — save a configuration named `default` to set your startup defaults, like on Windows. Configs given on the command line take precedence. A missing default config is ignored silently; explicit `-config` / `-f` load failures are still reported.
Unix path expansion is supported for `~/`, `$VAR`, and `${VAR}` in core config paths and Qt file/config boundaries. Relative config and media paths are resolved against the process working directory, matching the non-relative Windows save mode; the Windows-style relative-path save option is not enabled on Unix yet. The Qt Paths page saves runtime-visible target path settings such as `unix.screenshot_path`, `unix.rip_path`, `unix.video_path`, and `statefile_path`; legacy `unix.ui.*` path settings are still accepted when loading older configs. `~user` expansion is not implemented; use an absolute path for another user's home directory.
#include "custom.h"
#include "inputdevice.h"
#include "gui.h"
+#include "target.h"
#include "target_main.h"
#include "savestate.h"
#include "sounddep/sound.h"
+#include "uae.h"
#ifdef WINUAE_UNIX_WITH_INTEGRATED_QT_UI
#include "qt/launcher_bridge.h"
int gui_init(void)
{
#ifdef WINUAE_UNIX_WITH_INTEGRATED_QT_UI
- const int action = runWinUaeQtLauncherForPrefs(unix_gui_argc, unix_gui_argv, &changed_prefs, 0);
+ /* Seed the launcher from default.uae like the Windows GUI: the core
+ * already loaded it into the prefs (main.cpp real_main), but the Qt
+ * launcher builds its state from the configuration file. */
+ TCHAR default_config[MAX_DPATH];
+ fetch_configurationpath(default_config, sizeof default_config / sizeof default_config[0]);
+ _tcscat(default_config, OPTIONSFILENAME);
+ /* Command-line configs are resolved by the launcher itself and win
+ * over default.uae, like on Windows. */
+ const bool have_default = !winUaeQtLauncherArgumentsSpecifyConfig(unix_gui_argc, unix_gui_argv)
+ && access(default_config, R_OK) == 0;
+ const int action = runWinUaeQtLauncherForPrefsWithConfig(
+ unix_gui_argc,
+ unix_gui_argv,
+ &changed_prefs,
+ have_default ? default_config : nullptr,
+ 0,
+ nullptr);
if (action == WINUAE_QT_LAUNCHER_START) {
return 1;
}
unix_gui_argv,
&changed_prefs,
have_snapshot ? snapshot_path : nullptr,
+ 1,
&exit_code);
if (have_snapshot) {
});
}
+bool winUaeQtArgumentsSpecifyConfig(const QStringList &arguments)
+{
+ return !initialConfigPathFromArguments(arguments).isEmpty();
+}
+
WinUaeQtLauncherResult runWinUaeQtLauncherForConfig(QApplication &app)
{
return runWinUaeQtLauncherForConfig(app, QString());
void (*runProWizard)(void *context) = nullptr;
};
+bool winUaeQtArgumentsSpecifyConfig(const QStringList &arguments);
WinUaeQtLauncherResult runWinUaeQtLauncherForConfig(QApplication &app);
WinUaeQtLauncherResult runWinUaeQtLauncherForConfig(QApplication &app, const QString &initialConfigPath);
WinUaeQtLauncherResult runWinUaeQtLauncherForConfig(QApplication &app, const QString &initialConfigPath, const WinUaeQtHardwareInfoProvider &hardwareProvider);
return provider;
}
+int winUaeQtLauncherArgumentsSpecifyConfig(int argc, char **argv)
+{
+ QStringList arguments;
+ arguments.reserve(argc);
+ for (int i = 0; i < argc; i++) {
+ arguments.append(QString::fromLocal8Bit(argv[i]));
+ }
+ return winUaeQtArgumentsSpecifyConfig(arguments) ? 1 : 0;
+}
+
int runWinUaeQtLauncherForPrefs(int argc, char **argv, struct uae_prefs *prefs, int *exitCode)
{
- return runWinUaeQtLauncherForPrefsWithConfig(argc, argv, prefs, nullptr, exitCode);
+ return runWinUaeQtLauncherForPrefsWithConfig(argc, argv, prefs, nullptr, 0, exitCode);
}
-int runWinUaeQtLauncherForPrefsWithConfig(int argc, char **argv, struct uae_prefs *prefs, const char *initialConfigPath, int *exitCode)
+int runWinUaeQtLauncherForPrefsWithConfig(int argc, char **argv, struct uae_prefs *prefs, const char *initialConfigPath, int runtimeActions, int *exitCode)
{
const QString initialPath = initialConfigPath && initialConfigPath[0]
? QString::fromLocal8Bit(initialConfigPath)
: QString();
- WinUaeQtLauncherResult result = runWinUaeQtLauncherForConfig(argc, argv, initialPath, bridgeHardwareProvider(prefs, !initialPath.isEmpty()));
+ WinUaeQtLauncherResult result = runWinUaeQtLauncherForConfig(argc, argv, initialPath, bridgeHardwareProvider(prefs, runtimeActions != 0));
if (result.status == WinUaeQtLauncherStatus::StartRequested) {
if (!applyWinUaeQtConfigToPrefs(result.config, prefs)) {
fprintf(stderr, "Unix Qt UI failed: no preferences target available\n");
WINUAE_QT_LAUNCHER_ERROR = 3
};
+int winUaeQtLauncherArgumentsSpecifyConfig(int argc, char **argv);
int runWinUaeQtLauncherForPrefs(int argc, char **argv, struct uae_prefs *prefs, int *exit_code);
-int runWinUaeQtLauncherForPrefsWithConfig(int argc, char **argv, struct uae_prefs *prefs, const char *initial_config_path, int *exit_code);
+int runWinUaeQtLauncherForPrefsWithConfig(int argc, char **argv, struct uae_prefs *prefs, const char *initial_config_path, int runtime_actions, int *exit_code);
int runWinUaeQtRuntimeFileDialog(int argc, char **argv, int shortcut, const char *initial_path, char *selected_path, size_t selected_path_len, int *exit_code);
int runWinUaeQtMessageBox(int argc, char **argv, int flags, const char *message, int *exit_code);