From 932838b1e377efc97d4d965de63b3fd1388b9ca5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 1 Jun 2016 22:16:16 -0700 Subject: [PATCH] Setup preferred display plugin --- interface/src/Application.cpp | 14 ++++++++--- .../plugins/src/plugins/PluginManager.cpp | 24 +++++++++++++++++++ libraries/plugins/src/plugins/PluginManager.h | 3 +++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 62f3a3a9c5..9463b41404 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2957,6 +2957,13 @@ void Application::loadSettings() { //DependencyManager::get()->setAutomaticLODAdjust(false); Menu::getInstance()->loadSettings(); + + // If there is a preferred plugin, we probably messed it up with the menu settings, so fix it. + if (auto plugin = PluginManager::getInstance()->getPreferredDisplayPlugin()) { + Q_ASSERT(plugin == getActiveDisplayPlugin()); + Menu::getInstance()->setIsOptionChecked(plugin->getName(), true); + } + getMyAvatar()->loadData(); _settingsLoaded = true; @@ -4938,7 +4945,7 @@ void Application::postLambdaEvent(std::function f) { } void Application::initPlugins(const QStringList& arguments) { - QCommandLineOption display("display", "Default display", "display"); + QCommandLineOption display("display", "Preferred display", "display"); QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "display"); QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "input"); @@ -4949,8 +4956,9 @@ void Application::initPlugins(const QStringList& arguments) { parser.parse(arguments); if (parser.isSet(display)) { - auto defaultDisplay = parser.value(display); - qInfo() << "Setting prefered display plugin:" << defaultDisplay; + auto preferredDisplay = parser.value(display); + qInfo() << "Setting prefered display plugin:" << preferredDisplay; + PluginManager::getInstance()->setPreferredDisplayPlugin(preferredDisplay); } if (parser.isSet(disableDisplays)) { diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 9047b1c271..0c9b58cffa 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -52,6 +52,7 @@ QString getPluginIIDFromMetaData(QJsonObject object) { return object[IID_KEY].toString(); } +QString preferredDisplayPluginName; QStringList disabledDisplays; QStringList disabledInputs; @@ -177,6 +178,29 @@ const InputPluginList& PluginManager::getInputPlugins() { return inputPlugins; } +void PluginManager::setPreferredDisplayPlugin(const QString& display) { + preferredDisplayPluginName = display; +} + +DisplayPluginPointer PluginManager::getPreferredDisplayPlugin() { + static DisplayPluginPointer displayPlugin; + + static std::once_flag once; + std::call_once(once, [&] { + // Grab the built in plugins + auto plugins = getDisplayPlugins(); + + auto it = std::find_if(plugins.begin(), plugins.end(), [](DisplayPluginPointer plugin) { + return plugin->getName() == preferredDisplayPluginName; + }); + if (it != plugins.end()) { + displayPlugin = *it; + } + }); + + return displayPlugin; +} + void PluginManager::disableDisplays(const QStringList& displays) { disabledDisplays << displays; diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index 351087dce8..d44ca2c28e 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -19,6 +19,9 @@ public: const DisplayPluginList& getDisplayPlugins(); const InputPluginList& getInputPlugins(); + DisplayPluginPointer getPreferredDisplayPlugin(); + + void setPreferredDisplayPlugin(const QString& display); void disableDisplayPlugin(const QString& name); void disableDisplays(const QStringList& displays); void disableInputs(const QStringList& inputs);