From 992fa639326ea4b74d3c554a6104b9b28c9bcef4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 14:37:35 -0700 Subject: [PATCH] Allow ordered list of preferred plugins --- interface/src/Application.cpp | 24 ++++++++++++------- .../plugins/src/plugins/PluginManager.cpp | 24 ++++++++++--------- libraries/plugins/src/plugins/PluginManager.h | 4 ++-- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9463b41404..52d9fdf64a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2959,9 +2959,15 @@ void Application::loadSettings() { 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); + auto plugins = PluginManager::getInstance()->getPreferredDisplayPlugins(); + for (auto plugin : plugins) { + auto menu = Menu::getInstance(); + if (auto action = menu->getActionForOption(plugin->getName())) { + action->setChecked(true); + action->trigger(); + // Find and activat5ed highest priority plugin, bail for the rest + break; + } } getMyAvatar()->loadData(); @@ -4945,9 +4951,9 @@ void Application::postLambdaEvent(std::function f) { } void Application::initPlugins(const QStringList& arguments) { - QCommandLineOption display("display", "Preferred display", "display"); - QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "display"); - QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "input"); + QCommandLineOption display("display", "Preferred displays", "displays"); + QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "displays"); + QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "inputs"); QCommandLineParser parser; parser.addOption(display); @@ -4956,9 +4962,9 @@ void Application::initPlugins(const QStringList& arguments) { parser.parse(arguments); if (parser.isSet(display)) { - auto preferredDisplay = parser.value(display); - qInfo() << "Setting prefered display plugin:" << preferredDisplay; - PluginManager::getInstance()->setPreferredDisplayPlugin(preferredDisplay); + auto preferredDisplays = parser.value(display).split(',', QString::SkipEmptyParts); + qInfo() << "Setting prefered display plugins:" << preferredDisplays; + PluginManager::getInstance()->setPreferredDisplayPlugins(preferredDisplays); } if (parser.isSet(disableDisplays)) { diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 0c9b58cffa..ee5fb509b2 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -52,7 +52,7 @@ QString getPluginIIDFromMetaData(QJsonObject object) { return object[IID_KEY].toString(); } -QString preferredDisplayPluginName; +QStringList preferredDisplayPlugins; QStringList disabledDisplays; QStringList disabledInputs; @@ -178,27 +178,29 @@ const InputPluginList& PluginManager::getInputPlugins() { return inputPlugins; } -void PluginManager::setPreferredDisplayPlugin(const QString& display) { - preferredDisplayPluginName = display; +void PluginManager::setPreferredDisplayPlugins(const QStringList& displays) { + preferredDisplayPlugins = displays; } -DisplayPluginPointer PluginManager::getPreferredDisplayPlugin() { - static DisplayPluginPointer displayPlugin; +DisplayPluginList PluginManager::getPreferredDisplayPlugins() { + static DisplayPluginList displayPlugins; 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; + for (auto pluginName : preferredDisplayPlugins) { + auto it = std::find_if(plugins.begin(), plugins.end(), [&](DisplayPluginPointer plugin) { + return plugin->getName() == pluginName; + }); + if (it != plugins.end()) { + displayPlugins.push_back(*it); + } } }); - return displayPlugin; + return displayPlugins; } diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index d44ca2c28e..2a94e6490b 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -19,9 +19,9 @@ public: const DisplayPluginList& getDisplayPlugins(); const InputPluginList& getInputPlugins(); - DisplayPluginPointer getPreferredDisplayPlugin(); + DisplayPluginList getPreferredDisplayPlugins(); + void setPreferredDisplayPlugins(const QStringList& displays); - void setPreferredDisplayPlugin(const QString& display); void disableDisplayPlugin(const QString& name); void disableDisplays(const QStringList& displays); void disableInputs(const QStringList& inputs);