From 3dadb515f37615803b21543add98784c78d23d59 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 1 Jun 2016 20:30:43 -0700 Subject: [PATCH 01/10] Add plugins name to their metadata file --- plugins/hifiNeuron/src/plugin.json | 2 +- plugins/hifiSdl2/src/plugin.json | 2 +- plugins/hifiSixense/src/plugin.json | 2 +- plugins/hifiSpacemouse/src/plugin.json | 2 +- plugins/oculus/src/oculus.json | 2 +- plugins/oculusLegacy/src/oculus.json | 2 +- plugins/openvr/src/plugin.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/hifiNeuron/src/plugin.json b/plugins/hifiNeuron/src/plugin.json index 0967ef424b..d153b5cebd 100644 --- a/plugins/hifiNeuron/src/plugin.json +++ b/plugins/hifiNeuron/src/plugin.json @@ -1 +1 @@ -{} +{"name":"Neuron"} diff --git a/plugins/hifiSdl2/src/plugin.json b/plugins/hifiSdl2/src/plugin.json index 0967ef424b..a65846ecab 100644 --- a/plugins/hifiSdl2/src/plugin.json +++ b/plugins/hifiSdl2/src/plugin.json @@ -1 +1 @@ -{} +{"name":"SDL2"} diff --git a/plugins/hifiSixense/src/plugin.json b/plugins/hifiSixense/src/plugin.json index 0967ef424b..9e6e15a354 100644 --- a/plugins/hifiSixense/src/plugin.json +++ b/plugins/hifiSixense/src/plugin.json @@ -1 +1 @@ -{} +{"name":"Sixense"} diff --git a/plugins/hifiSpacemouse/src/plugin.json b/plugins/hifiSpacemouse/src/plugin.json index 0967ef424b..294f436039 100644 --- a/plugins/hifiSpacemouse/src/plugin.json +++ b/plugins/hifiSpacemouse/src/plugin.json @@ -1 +1 @@ -{} +{"name":"Spacemouse"} diff --git a/plugins/oculus/src/oculus.json b/plugins/oculus/src/oculus.json index 0967ef424b..86546c8dd5 100644 --- a/plugins/oculus/src/oculus.json +++ b/plugins/oculus/src/oculus.json @@ -1 +1 @@ -{} +{"name":"Oculus Rift"} diff --git a/plugins/oculusLegacy/src/oculus.json b/plugins/oculusLegacy/src/oculus.json index 0967ef424b..4cd9a136b3 100644 --- a/plugins/oculusLegacy/src/oculus.json +++ b/plugins/oculusLegacy/src/oculus.json @@ -1 +1 @@ -{} +{"name":"Oculus Rift (0.5) (Legacy)"} diff --git a/plugins/openvr/src/plugin.json b/plugins/openvr/src/plugin.json index 0967ef424b..d68c8e68d3 100644 --- a/plugins/openvr/src/plugin.json +++ b/plugins/openvr/src/plugin.json @@ -1 +1 @@ -{} +{"name":"OpenVR (Vive)"} From d8493f960a32d0d6d0db83cbfe8c38dfedd4a27b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 1 Jun 2016 20:50:24 -0700 Subject: [PATCH 02/10] Add command line option to enable/disable plugins --- interface/src/Application.cpp | 29 +++++++- interface/src/Application.h | 2 +- interface/src/main.cpp | 28 ++++---- .../plugins/src/plugins/PluginManager.cpp | 66 ++++++++++++++++++- libraries/plugins/src/plugins/PluginManager.h | 15 +++-- 5 files changed, 117 insertions(+), 23 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e789b7c508..62f3a3a9c5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -4936,7 +4937,33 @@ void Application::postLambdaEvent(std::function f) { } } -void Application::initPlugins() { +void Application::initPlugins(const QStringList& arguments) { + QCommandLineOption display("display", "Default display", "display"); + QCommandLineOption disableDisplays("disable-displays", "Displays to disable", "display"); + QCommandLineOption disableInputs("disable-inputs", "Inputs to disable", "input"); + + QCommandLineParser parser; + parser.addOption(display); + parser.addOption(disableDisplays); + parser.addOption(disableInputs); + parser.parse(arguments); + + if (parser.isSet(display)) { + auto defaultDisplay = parser.value(display); + qInfo() << "Setting prefered display plugin:" << defaultDisplay; + } + + if (parser.isSet(disableDisplays)) { + auto disabledDisplays = parser.value(disableDisplays).split(',', QString::SkipEmptyParts); + qInfo() << "Disabling following display plugins:" << disabledDisplays; + PluginManager::getInstance()->disableDisplays(disabledDisplays); + } + + if (parser.isSet(disableInputs)) { + auto disabledInputs = parser.value(disableInputs).split(',', QString::SkipEmptyParts); + qInfo() << "Disabling following input plugins:" << disabledInputs; + PluginManager::getInstance()->disableInputs(disabledInputs); + } } void Application::shutdownPlugins() { diff --git a/interface/src/Application.h b/interface/src/Application.h index a17250a58e..ed7b582bfc 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -101,7 +101,7 @@ public: }; // FIXME? Empty methods, do we still need them? - static void initPlugins(); + static void initPlugins(const QStringList& arguments); static void shutdownPlugins(); Application(int& argc, char** argv, QElapsedTimer& startup_time); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 13f9470fda..6866d5637c 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -8,6 +8,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include + #include #include #include @@ -17,6 +19,12 @@ #include #include +#ifdef HAS_BUGSPLAT +#include +#include +#include +#endif + #include #include @@ -25,13 +33,7 @@ #include "InterfaceLogging.h" #include "UserActivityLogger.h" #include "MainWindow.h" -#include -#ifdef HAS_BUGSPLAT -#include -#include -#include -#endif int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT @@ -46,6 +48,12 @@ int main(int argc, const char* argv[]) { bool instanceMightBeRunning = true; + QStringList arguments; + for (int i = 0; i < argc; ++i) { + arguments << argv[i]; + } + + #ifdef Q_OS_WIN // Try to create a shared memory block - if it can't be created, there is an instance of // interface already running. We only do this on Windows for now because of the potential @@ -64,12 +72,6 @@ int main(int argc, const char* argv[]) { // Try to connect - if we can't connect, interface has probably just gone down if (socket.waitForConnected(LOCAL_SERVER_TIMEOUT_MS)) { - - QStringList arguments; - for (int i = 0; i < argc; ++i) { - arguments << argv[i]; - } - QCommandLineParser parser; QCommandLineOption urlOption("url", "", "value"); parser.addOption(urlOption); @@ -135,7 +137,7 @@ int main(int argc, const char* argv[]) { // Oculus initialization MUST PRECEDE OpenGL context creation. // The nature of the Application constructor means this has to be either here, // or in the main window ctor, before GL startup. - Application::initPlugins(); + Application::initPlugins(arguments); int exitCode; { diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index eb6465aab2..9047b1c271 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -25,6 +25,49 @@ PluginManager* PluginManager::getInstance() { return &_manager; } +QString getPluginNameFromMetaData(QJsonObject object) { + static const char* METADATA_KEY = "MetaData"; + static const char* NAME_KEY = "name"; + + if (!object.contains(METADATA_KEY) || !object[METADATA_KEY].isObject()) { + return QString(); + } + + auto metaDataObject = object[METADATA_KEY].toObject(); + + if (!metaDataObject.contains(NAME_KEY) || !metaDataObject[NAME_KEY].isString()) { + return QString(); + } + + return metaDataObject[NAME_KEY].toString(); +} + +QString getPluginIIDFromMetaData(QJsonObject object) { + static const char* IID_KEY = "IID"; + + if (!object.contains(IID_KEY) || !object[IID_KEY].isString()) { + return QString(); + } + + return object[IID_KEY].toString(); +} + +QStringList disabledDisplays; +QStringList disabledInputs; + +bool isDisabled(QJsonObject metaData) { + auto name = getPluginNameFromMetaData(metaData); + auto iid = getPluginIIDFromMetaData(metaData); + + if (iid == DisplayProvider_iid) { + return disabledDisplays.contains(name); + } else if (iid == InputProvider_iid) { + return disabledInputs.contains(name); + } + + return false; +} + using Loader = QSharedPointer; using LoaderList = QList; @@ -43,11 +86,21 @@ const LoaderList& getLoadedPlugins() { qDebug() << "Loading runtime plugins from " << pluginPath; auto candidates = pluginDir.entryList(); for (auto plugin : candidates) { - qDebug() << "Attempting plugins " << plugin; + qDebug() << "Attempting plugin" << qPrintable(plugin); QSharedPointer loader(new QPluginLoader(pluginPath + plugin)); + + if (isDisabled(loader->metaData())) { + qWarning() << "Plugin" << qPrintable(plugin) << "is disabled"; + // Skip this one, it's disabled + continue; + } + if (loader->load()) { - qDebug() << "Plugins " << plugin << " success"; + qDebug() << "Plugin" << qPrintable(plugin) << "loaded successfully"; loadedPlugins.push_back(loader); + } else { + qDebug() << "Plugin" << qPrintable(plugin) << "failed to load:"; + qDebug() << " " << qPrintable(loader->errorString()); } } } @@ -124,6 +177,15 @@ const InputPluginList& PluginManager::getInputPlugins() { return inputPlugins; } + +void PluginManager::disableDisplays(const QStringList& displays) { + disabledDisplays << displays; +} + +void PluginManager::disableInputs(const QStringList& inputs) { + disabledInputs << inputs; +} + void PluginManager::saveSettings() { saveInputPluginSettings(getInputPlugins()); } diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index cf0b8efe64..351087dce8 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -13,11 +13,14 @@ class PluginManager : public QObject { public: - static PluginManager* getInstance(); - PluginManager(); + static PluginManager* getInstance(); + PluginManager(); - const DisplayPluginList& getDisplayPlugins(); - void disableDisplayPlugin(const QString& name); - const InputPluginList& getInputPlugins(); - void saveSettings(); + const DisplayPluginList& getDisplayPlugins(); + const InputPluginList& getInputPlugins(); + + void disableDisplayPlugin(const QString& name); + void disableDisplays(const QStringList& displays); + void disableInputs(const QStringList& inputs); + void saveSettings(); }; From 932838b1e377efc97d4d965de63b3fd1388b9ca5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 1 Jun 2016 22:16:16 -0700 Subject: [PATCH 03/10] 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); From 992fa639326ea4b74d3c554a6104b9b28c9bcef4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 14:37:35 -0700 Subject: [PATCH 04/10] 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); From ee62a211ac230c93b12047b4e29b5ab75836a8c8 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 15:36:11 -0700 Subject: [PATCH 05/10] Remove "Input Devices" menu --- interface/src/Application.cpp | 76 ----------------------------------- interface/src/Application.h | 1 - interface/src/Menu.cpp | 6 --- interface/src/Menu.h | 1 - 4 files changed, 84 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 52d9fdf64a..d41c971896 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1477,7 +1477,6 @@ void Application::initializeUi() { } } _window->setMenuBar(new Menu()); - updateInputModes(); auto compositorHelper = DependencyManager::get(); connect(compositorHelper.data(), &CompositorHelper::allowMouseCaptureChanged, [=] { @@ -5247,81 +5246,6 @@ void Application::updateDisplayMode() { Q_ASSERT_X(_displayPlugin, "Application::updateDisplayMode", "could not find an activated display plugin"); } -static void addInputPluginToMenu(InputPluginPointer inputPlugin) { - auto menu = Menu::getInstance(); - QString name = INPUT_DEVICE_MENU_PREFIX + inputPlugin->getName(); - Q_ASSERT(!menu->menuItemExists(MenuOption::InputMenu, name)); - - static QActionGroup* inputPluginGroup = nullptr; - if (!inputPluginGroup) { - inputPluginGroup = new QActionGroup(menu); - inputPluginGroup->setExclusive(false); - } - - auto parent = menu->getMenu(MenuOption::InputMenu); - auto action = menu->addCheckableActionToQMenuAndActionHash(parent, - name, 0, true, qApp, - SLOT(updateInputModes())); - - inputPluginGroup->addAction(action); - Q_ASSERT(menu->menuItemExists(MenuOption::InputMenu, name)); -} - - -void Application::updateInputModes() { - auto menu = Menu::getInstance(); - auto inputPlugins = PluginManager::getInstance()->getInputPlugins(); - static std::once_flag once; - std::call_once(once, [&] { - foreach(auto inputPlugin, inputPlugins) { - addInputPluginToMenu(inputPlugin); - } - }); - auto offscreenUi = DependencyManager::get(); - - InputPluginList newInputPlugins; - InputPluginList removedInputPlugins; - foreach(auto inputPlugin, inputPlugins) { - QString name = INPUT_DEVICE_MENU_PREFIX + inputPlugin->getName(); - QAction* action = menu->getActionForOption(name); - - auto it = std::find(std::begin(_activeInputPlugins), std::end(_activeInputPlugins), inputPlugin); - if (action->isChecked() && it == std::end(_activeInputPlugins)) { - _activeInputPlugins.push_back(inputPlugin); - newInputPlugins.push_back(inputPlugin); - } else if (!action->isChecked() && it != std::end(_activeInputPlugins)) { - _activeInputPlugins.erase(it); - removedInputPlugins.push_back(inputPlugin); - } - } - - // A plugin was checked - if (newInputPlugins.size() > 0) { - foreach(auto newInputPlugin, newInputPlugins) { - newInputPlugin->activate(); - //newInputPlugin->installEventFilter(qApp); - //newInputPlugin->installEventFilter(offscreenUi.data()); - } - } - if (removedInputPlugins.size() > 0) { // A plugin was unchecked - foreach(auto removedInputPlugin, removedInputPlugins) { - removedInputPlugin->deactivate(); - //removedInputPlugin->removeEventFilter(qApp); - //removedInputPlugin->removeEventFilter(offscreenUi.data()); - } - } - - //if (newInputPlugins.size() > 0 || removedInputPlugins.size() > 0) { - // if (!_currentInputPluginActions.isEmpty()) { - // auto menu = Menu::getInstance(); - // foreach(auto itemInfo, _currentInputPluginActions) { - // menu->removeMenuItem(itemInfo.first, itemInfo.second); - // } - // _currentInputPluginActions.clear(); - // } - //} -} - mat4 Application::getEyeProjection(int eye) const { QMutexLocker viewLocker(&_viewMutex); if (isHMDMode()) { diff --git a/interface/src/Application.h b/interface/src/Application.h index ed7b582bfc..f93434f581 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -327,7 +327,6 @@ private slots: void nodeKilled(SharedNodePointer node); static void packetSent(quint64 length); void updateDisplayMode(); - void updateInputModes(); void domainConnectionRefused(const QString& reasonMessage, int reason); private: diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index a21aa71753..031564fa7a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -403,12 +403,6 @@ Menu::Menu() { // Developer > Avatar >>> MenuWrapper* avatarDebugMenu = developerMenu->addMenu("Avatar"); - // Settings > Input Devices - MenuWrapper* inputModeMenu = addMenu(MenuOption::InputMenu, "Advanced"); - QActionGroup* inputModeGroup = new QActionGroup(inputModeMenu); - inputModeGroup->setExclusive(false); - - // Developer > Avatar > Face Tracking MenuWrapper* faceTrackingMenu = avatarDebugMenu->addMenu("Face Tracking"); { diff --git a/interface/src/Menu.h b/interface/src/Menu.h index fcaf8e6caa..8081e27eb8 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -113,7 +113,6 @@ namespace MenuOption { const QString Help = "Help..."; const QString IncreaseAvatarSize = "Increase Avatar Size"; const QString IndependentMode = "Independent Mode"; - const QString InputMenu = "Developer>Avatar>Input Devices"; const QString ActionMotorControl = "Enable Default Motor Control"; const QString LeapMotionOnHMD = "Leap Motion on HMD"; const QString LoadScript = "Open and Run Script File..."; From b635e32933835c497b98eefbff3e0bb3243be5fc Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 17:44:39 -0700 Subject: [PATCH 06/10] Rename Mac only Oculus display plugin --- plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp | 2 +- plugins/oculusLegacy/src/oculus.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp index f89e71b829..8e044fbc16 100644 --- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp +++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp @@ -31,7 +31,7 @@ using namespace oglplus; -const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Legacy)"); +const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift"); OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() { } diff --git a/plugins/oculusLegacy/src/oculus.json b/plugins/oculusLegacy/src/oculus.json index 4cd9a136b3..86546c8dd5 100644 --- a/plugins/oculusLegacy/src/oculus.json +++ b/plugins/oculusLegacy/src/oculus.json @@ -1 +1 @@ -{"name":"Oculus Rift (0.5) (Legacy)"} +{"name":"Oculus Rift"} From 6f75fab2980958d78718f090f356864d91341933 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 18:02:30 -0700 Subject: [PATCH 07/10] Revert header changes --- interface/src/main.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 6866d5637c..8fc0384aee 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -8,8 +8,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include - #include #include #include @@ -19,12 +17,6 @@ #include #include -#ifdef HAS_BUGSPLAT -#include -#include -#include -#endif - #include #include @@ -33,7 +25,13 @@ #include "InterfaceLogging.h" #include "UserActivityLogger.h" #include "MainWindow.h" +#include +#ifdef HAS_BUGSPLAT +#include +#include +#include +#endif int main(int argc, const char* argv[]) { #if HAS_BUGSPLAT From 24bbb8db3f663f73b8659a3a317bc24fcfa84c94 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 3 Jun 2016 11:51:35 -0700 Subject: [PATCH 08/10] Remove input plugin menu dependency --- interface/src/Application.cpp | 33 ++++++++----------- .../src/input-plugins/InputPlugin.cpp | 1 - .../plugins/src/plugins/PluginManager.cpp | 5 ++- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d41c971896..6dcb64a07d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -198,7 +198,6 @@ static const float PHYSICS_READY_RANGE = 3.0f; // how far from avatar to check f static const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); -static const QString INPUT_DEVICE_MENU_PREFIX = "Device: "; Setting::Handle maxOctreePacketsPerSecond("maxOctreePPS", DEFAULT_MAX_OCTREE_PPS); const QHash Application::_acceptedExtensions { @@ -1000,7 +999,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : RenderableWebEntityItem* webEntity = dynamic_cast(entity.get()); if (webEntity) { webEntity->setProxyWindow(_window->windowHandle()); - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->pluginFocusOutEvent(); } _keyboardFocusedItem = entityItemID; @@ -1153,9 +1152,7 @@ void Application::aboutToQuit() { emit beforeAboutToQuit(); foreach(auto inputPlugin, PluginManager::getInstance()->getInputPlugins()) { - QString name = INPUT_DEVICE_MENU_PREFIX + inputPlugin->getName(); - QAction* action = Menu::getInstance()->getActionForOption(name); - if (action->isChecked()) { + if (inputPlugin->isActive()) { inputPlugin->deactivate(); } } @@ -2024,7 +2021,7 @@ void Application::keyPressEvent(QKeyEvent* event) { } if (hasFocus()) { - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->keyPressEvent(event); } @@ -2358,7 +2355,7 @@ void Application::keyReleaseEvent(QKeyEvent* event) { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->keyReleaseEvent(event); } @@ -2390,9 +2387,7 @@ void Application::keyReleaseEvent(QKeyEvent* event) { void Application::focusOutEvent(QFocusEvent* event) { auto inputPlugins = PluginManager::getInstance()->getInputPlugins(); foreach(auto inputPlugin, inputPlugins) { - QString name = INPUT_DEVICE_MENU_PREFIX + inputPlugin->getName(); - QAction* action = Menu::getInstance()->getActionForOption(name); - if (action && action->isChecked()) { + if (inputPlugin->isActive()) { inputPlugin->pluginFocusOutEvent(); } } @@ -2477,7 +2472,7 @@ void Application::mouseMoveEvent(QMouseEvent* event) { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mouseMoveEvent(event); } @@ -2514,7 +2509,7 @@ void Application::mousePressEvent(QMouseEvent* event) { if (hasFocus()) { - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mousePressEvent(event); } @@ -2559,7 +2554,7 @@ void Application::mouseReleaseEvent(QMouseEvent* event) { } if (hasFocus()) { - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mouseReleaseEvent(event); } @@ -2586,7 +2581,7 @@ void Application::touchUpdateEvent(QTouchEvent* event) { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->touchUpdateEvent(event); } } @@ -2604,7 +2599,7 @@ void Application::touchBeginEvent(QTouchEvent* event) { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->touchBeginEvent(event); } @@ -2621,7 +2616,7 @@ void Application::touchEndEvent(QTouchEvent* event) { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->touchEndEvent(event); } @@ -2637,7 +2632,7 @@ void Application::wheelEvent(QWheelEvent* event) const { return; } - if (Menu::getInstance()->isOptionChecked(INPUT_DEVICE_MENU_PREFIX + KeyboardMouseDevice::NAME)) { + if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->wheelEvent(event); } } @@ -2770,9 +2765,7 @@ void Application::idle(float nsecsElapsed) { getActiveDisplayPlugin()->idle(); auto inputPlugins = PluginManager::getInstance()->getInputPlugins(); foreach(auto inputPlugin, inputPlugins) { - QString name = INPUT_DEVICE_MENU_PREFIX + inputPlugin->getName(); - QAction* action = Menu::getInstance()->getActionForOption(name); - if (action && action->isChecked()) { + if (inputPlugin->isActive()) { inputPlugin->idle(); } } diff --git a/libraries/input-plugins/src/input-plugins/InputPlugin.cpp b/libraries/input-plugins/src/input-plugins/InputPlugin.cpp index 4d59adb602..32c28af2ef 100644 --- a/libraries/input-plugins/src/input-plugins/InputPlugin.cpp +++ b/libraries/input-plugins/src/input-plugins/InputPlugin.cpp @@ -25,7 +25,6 @@ InputPluginList getInputPlugins() { for (int i = 0; PLUGIN_POOL[i]; ++i) { InputPlugin* plugin = PLUGIN_POOL[i]; if (plugin->isSupported()) { - plugin->init(); result.push_back(InputPluginPointer(plugin)); } } diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index ee5fb509b2..6bff5a36f3 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -164,7 +164,9 @@ const InputPluginList& PluginManager::getInputPlugins() { InputProvider* inputProvider = qobject_cast(loader->instance()); if (inputProvider) { for (auto inputPlugin : inputProvider->getInputPlugins()) { - inputPlugins.push_back(inputPlugin); + if (inputPlugin->isSupported()) { + inputPlugins.push_back(inputPlugin); + } } } } @@ -173,6 +175,7 @@ const InputPluginList& PluginManager::getInputPlugins() { for (auto plugin : inputPlugins) { plugin->setContainer(&container); plugin->init(); + plugin->activate(); } }); return inputPlugins; From 26acc6fd8b8b99e02a01e34f39c38ab4261f0228 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 3 Jun 2016 12:45:27 -0700 Subject: [PATCH 09/10] Typo --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6dcb64a07d..ed212dade5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2957,7 +2957,7 @@ void Application::loadSettings() { if (auto action = menu->getActionForOption(plugin->getName())) { action->setChecked(true); action->trigger(); - // Find and activat5ed highest priority plugin, bail for the rest + // Find and activated highest priority plugin, bail for the rest break; } } From 399517fcbd54ab7a6c6825bd9360528421b32023 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 6 Jun 2016 13:27:58 -0700 Subject: [PATCH 10/10] Activate Inputs after menus are setup --- interface/src/Application.cpp | 10 +++++++++- libraries/plugins/src/plugins/PluginManager.cpp | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ed212dade5..68e916c29e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2951,7 +2951,8 @@ void Application::loadSettings() { Menu::getInstance()->loadSettings(); // If there is a preferred plugin, we probably messed it up with the menu settings, so fix it. - auto plugins = PluginManager::getInstance()->getPreferredDisplayPlugins(); + auto pluginManager = PluginManager::getInstance(); + auto plugins = pluginManager->getPreferredDisplayPlugins(); for (auto plugin : plugins) { auto menu = Menu::getInstance(); if (auto action = menu->getActionForOption(plugin->getName())) { @@ -2962,6 +2963,13 @@ void Application::loadSettings() { } } + auto inputs = pluginManager->getInputPlugins(); + for (auto plugin : inputs) { + if (!plugin->isActive()) { + plugin->activate(); + } + } + getMyAvatar()->loadData(); _settingsLoaded = true; diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 6bff5a36f3..7161132c5e 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -175,7 +175,6 @@ const InputPluginList& PluginManager::getInputPlugins() { for (auto plugin : inputPlugins) { plugin->setContainer(&container); plugin->init(); - plugin->activate(); } }); return inputPlugins;