summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2019-10-27 19:03:10 +0100
committerJosJuice <josjuice@gmail.com>2019-10-29 18:32:43 +0100
commit379f264aa8b7dce66f68cf38bfafa57616f3804e (patch)
tree8df748d232c96a9a34f8052897f18c5d432356d4 /Source/Core
parent0dbb58112a2e85d558f7c455c5140e073c5d49df (diff)
Disable render to main when using batch mode
https://bugs.dolphin-emu.org/issues/11888 This also includes another change: DolphinQt will now exit with an error if you use --batch without specifying a game using any method (unlike in the past where --batch would be ignored if you didn't specify a game using --exec, even if you had used --nand-title). The main reason why I did this was because coding the alternative (ignoring --batch) would be annoying with render to main involved.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Main.cpp20
-rw-r--r--Source/Core/UICommon/CommandLineParse.cpp12
2 files changed, 28 insertions, 4 deletions
diff --git a/Source/Core/DolphinQt/Main.cpp b/Source/Core/DolphinQt/Main.cpp
index 65cbd0360d..b54caae0b8 100644
--- a/Source/Core/DolphinQt/Main.cpp
+++ b/Source/Core/DolphinQt/Main.cpp
@@ -138,7 +138,7 @@ int main(int argc, char* argv[])
UICommon::CreateDirectories();
UICommon::Init();
Resources::Init();
- Settings::Instance().SetBatchModeEnabled(options.is_set("batch") && options.is_set("exec"));
+ Settings::Instance().SetBatchModeEnabled(options.is_set("batch"));
// Hook up alerts from core
Common::RegisterMsgAlertHandler(QtMsgAlertHandler);
@@ -152,12 +152,14 @@ int main(int argc, char* argv[])
&app, &Core::HostDispatchJobs);
std::unique_ptr<BootParameters> boot;
+ bool game_specified = false;
if (options.is_set("exec"))
{
const std::list<std::string> paths_list = options.all("exec");
const std::vector<std::string> paths{std::make_move_iterator(std::begin(paths_list)),
std::make_move_iterator(std::end(paths_list))};
boot = BootParameters::GenerateFromFile(paths);
+ game_specified = true;
}
else if (options.is_set("nand_title"))
{
@@ -171,14 +173,30 @@ int main(int argc, char* argv[])
{
ModalMessageBox::critical(nullptr, QObject::tr("Error"), QObject::tr("Invalid title ID."));
}
+ game_specified = true;
}
else if (!args.empty())
{
boot = BootParameters::GenerateFromFile(args.front());
+ game_specified = true;
}
int retval;
+ if (Settings::Instance().IsBatchModeEnabled() && !game_specified)
+ {
+ ModalMessageBox::critical(
+ nullptr, QObject::tr("Error"),
+ QObject::tr("Batch mode cannot be used without specifying a game to launch."));
+ retval = 1;
+ }
+ else if (Settings::Instance().IsBatchModeEnabled() && !boot)
+ {
+ // A game to launch was specified, but it was invalid.
+ // An error has already been shown by code above, so exit without showing another error.
+ retval = 1;
+ }
+ else
{
DolphinAnalytics::Instance().ReportDolphinStart("qt");
diff --git a/Source/Core/UICommon/CommandLineParse.cpp b/Source/Core/UICommon/CommandLineParse.cpp
index 0794546db5..bf3a556a29 100644
--- a/Source/Core/UICommon/CommandLineParse.cpp
+++ b/Source/Core/UICommon/CommandLineParse.cpp
@@ -22,7 +22,7 @@ class CommandLineConfigLayerLoader final : public Config::ConfigLayerLoader
{
public:
CommandLineConfigLayerLoader(const std::list<std::string>& args, const std::string& video_backend,
- const std::string& audio_backend)
+ const std::string& audio_backend, bool batch)
: ConfigLayerLoader(Config::LayerType::CommandLine)
{
if (!video_backend.empty())
@@ -31,6 +31,11 @@ public:
if (!audio_backend.empty())
m_values.emplace_back(Config::MAIN_DSP_HLE.location, ValueToString(audio_backend == "HLE"));
+ // Batch mode hides the main window, and render to main hides the render window. To avoid a
+ // situation where we would have no window at all, disable render to main when using batch mode.
+ if (batch)
+ m_values.emplace_back(Config::MAIN_RENDER_TO_MAIN.location, ValueToString(false));
+
// Arguments are in the format of <System>.<Section>.<Key>=Value
for (const auto& arg : args)
{
@@ -98,7 +103,7 @@ std::unique_ptr<optparse::OptionParser> CreateParser(ParserOptions options)
parser->add_option("-l", "--logger").action("store_true").help("Open the logger");
parser->add_option("-b", "--batch")
.action("store_true")
- .help("Run Dolphin without the user interface (Requires --exec)");
+ .help("Run Dolphin without the user interface (Requires --exec or --nand-title)");
parser->add_option("-c", "--confirm").action("store_true").help("Set Confirm on Stop");
}
@@ -120,7 +125,8 @@ static void AddConfigLayer(const optparse::Values& options)
Config::AddLayer(std::make_unique<CommandLineConfigLayerLoader>(
std::move(config_args), static_cast<const char*>(options.get("video_backend")),
- static_cast<const char*>(options.get("audio_emulation"))));
+ static_cast<const char*>(options.get("audio_emulation")),
+ static_cast<bool>(options.get("batch"))));
}
optparse::Values& ParseArguments(optparse::OptionParser* parser, int argc, char** argv)