From 02ea74becd89f32f34f2901fc7e5c1cc3c061b2c Mon Sep 17 00:00:00 2001 From: gibbed Date: Sat, 3 Aug 2019 20:07:19 -0500 Subject: [PATCH] [App] Only create input nop driver when explicitly requested. --- src/xenia/app/xenia_main.cc | 38 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/xenia/app/xenia_main.cc b/src/xenia/app/xenia_main.cc index 9f998d945..506bc1c64 100644 --- a/src/xenia/app/xenia_main.cc +++ b/src/xenia/app/xenia_main.cc @@ -124,7 +124,7 @@ class Factory { if (it != creators_.cend() && (*it).is_available()) { auto instance = (*it).instantiate(std::forward(args)...); if (instance) { - instances.push_back(std::move(instance)); + instances.emplace_back(std::move(instance)); } } } else { @@ -132,7 +132,7 @@ class Factory { if (!creator.is_available()) continue; auto instance = creator.instantiate(std::forward(args)...); if (instance) { - instances.push_back(std::move(instance)); + instances.emplace_back(std::move(instance)); } } } @@ -161,29 +161,25 @@ std::unique_ptr CreateGraphicsSystem() { std::vector> CreateInputDrivers( ui::Window* window) { - Factory factory; + std::vector> drivers; + if (cvars::hid.compare("nop") == 0) { + drivers.emplace_back(xe::hid::nop::Create(window)); + } else { + Factory factory; #if XE_PLATFORM_WIN32 - factory.Add("winkey", xe::hid::winkey::Create); - factory.Add("xinput", xe::hid::xinput::Create); + factory.Add("winkey", xe::hid::winkey::Create); + factory.Add("xinput", xe::hid::xinput::Create); #endif // XE_PLATFORM_WIN32 - factory.Add("nop", xe::hid::nop::Create); - - auto drivers = factory.CreateAll(cvars::hid, window); - - // Remove drivers that fail to setup. - for (auto it = drivers.begin(); it != drivers.end();) { - if (XFAILED((*it)->Setup())) { - it = drivers.erase(it); - } else { - ++it; + for (auto& driver : factory.CreateAll(cvars::hid, window)) { + if (XSUCCEEDED(driver->Setup())) { + drivers.emplace_back(std::move(driver)); + } + } + if (drivers.empty()) { + // Fallback to nop if none created. + drivers.emplace_back(xe::hid::nop::Create(window)); } } - - if (drivers.empty()) { - // Fallback to nop if none created. - drivers.emplace_back(xe::hid::nop::Create(window)); - } - return drivers; }