Allow ordered list of preferred plugins

This commit is contained in:
Atlante45 2016-06-02 14:37:35 -07:00
parent 932838b1e3
commit 992fa63932
3 changed files with 30 additions and 22 deletions

View file

@ -2959,9 +2959,15 @@ void Application::loadSettings() {
Menu::getInstance()->loadSettings(); Menu::getInstance()->loadSettings();
// If there is a preferred plugin, we probably messed it up with the menu settings, so fix it. // If there is a preferred plugin, we probably messed it up with the menu settings, so fix it.
if (auto plugin = PluginManager::getInstance()->getPreferredDisplayPlugin()) { auto plugins = PluginManager::getInstance()->getPreferredDisplayPlugins();
Q_ASSERT(plugin == getActiveDisplayPlugin()); for (auto plugin : plugins) {
Menu::getInstance()->setIsOptionChecked(plugin->getName(), true); 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(); getMyAvatar()->loadData();
@ -4945,9 +4951,9 @@ void Application::postLambdaEvent(std::function<void()> f) {
} }
void Application::initPlugins(const QStringList& arguments) { void Application::initPlugins(const QStringList& arguments) {
QCommandLineOption display("display", "Preferred display", "display"); QCommandLineOption display("display", "Preferred displays", "displays");
QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "display"); QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "displays");
QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "input"); QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "inputs");
QCommandLineParser parser; QCommandLineParser parser;
parser.addOption(display); parser.addOption(display);
@ -4956,9 +4962,9 @@ void Application::initPlugins(const QStringList& arguments) {
parser.parse(arguments); parser.parse(arguments);
if (parser.isSet(display)) { if (parser.isSet(display)) {
auto preferredDisplay = parser.value(display); auto preferredDisplays = parser.value(display).split(',', QString::SkipEmptyParts);
qInfo() << "Setting prefered display plugin:" << preferredDisplay; qInfo() << "Setting prefered display plugins:" << preferredDisplays;
PluginManager::getInstance()->setPreferredDisplayPlugin(preferredDisplay); PluginManager::getInstance()->setPreferredDisplayPlugins(preferredDisplays);
} }
if (parser.isSet(disableDisplays)) { if (parser.isSet(disableDisplays)) {

View file

@ -52,7 +52,7 @@ QString getPluginIIDFromMetaData(QJsonObject object) {
return object[IID_KEY].toString(); return object[IID_KEY].toString();
} }
QString preferredDisplayPluginName; QStringList preferredDisplayPlugins;
QStringList disabledDisplays; QStringList disabledDisplays;
QStringList disabledInputs; QStringList disabledInputs;
@ -178,27 +178,29 @@ const InputPluginList& PluginManager::getInputPlugins() {
return inputPlugins; return inputPlugins;
} }
void PluginManager::setPreferredDisplayPlugin(const QString& display) { void PluginManager::setPreferredDisplayPlugins(const QStringList& displays) {
preferredDisplayPluginName = display; preferredDisplayPlugins = displays;
} }
DisplayPluginPointer PluginManager::getPreferredDisplayPlugin() { DisplayPluginList PluginManager::getPreferredDisplayPlugins() {
static DisplayPluginPointer displayPlugin; static DisplayPluginList displayPlugins;
static std::once_flag once; static std::once_flag once;
std::call_once(once, [&] { std::call_once(once, [&] {
// Grab the built in plugins // Grab the built in plugins
auto plugins = getDisplayPlugins(); auto plugins = getDisplayPlugins();
auto it = std::find_if(plugins.begin(), plugins.end(), [](DisplayPluginPointer plugin) { for (auto pluginName : preferredDisplayPlugins) {
return plugin->getName() == preferredDisplayPluginName; auto it = std::find_if(plugins.begin(), plugins.end(), [&](DisplayPluginPointer plugin) {
}); return plugin->getName() == pluginName;
if (it != plugins.end()) { });
displayPlugin = *it; if (it != plugins.end()) {
displayPlugins.push_back(*it);
}
} }
}); });
return displayPlugin; return displayPlugins;
} }

View file

@ -19,9 +19,9 @@ public:
const DisplayPluginList& getDisplayPlugins(); const DisplayPluginList& getDisplayPlugins();
const InputPluginList& getInputPlugins(); const InputPluginList& getInputPlugins();
DisplayPluginPointer getPreferredDisplayPlugin(); DisplayPluginList getPreferredDisplayPlugins();
void setPreferredDisplayPlugins(const QStringList& displays);
void setPreferredDisplayPlugin(const QString& display);
void disableDisplayPlugin(const QString& name); void disableDisplayPlugin(const QString& name);
void disableDisplays(const QStringList& displays); void disableDisplays(const QStringList& displays);
void disableInputs(const QStringList& inputs); void disableInputs(const QStringList& inputs);