From 8fa46e2be3d2623bb3aa89e1bf3134d9105b1762 Mon Sep 17 00:00:00 2001
From: Dale Glass <dale@daleglass.net>
Date: Sun, 5 Nov 2023 19:34:13 +0100
Subject: [PATCH] Fix crash when starting with --display, --disable-displays or
 --disable-inputs

This happens because the PluginManager doesn't exist yet at the time when these
options are handled. Fix this by moving PluginManager initialization to an
earlier stage of the code.
---
 interface/src/Application.cpp | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 37204b0f9b..2ea558c9ae 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -763,19 +763,7 @@ bool setupEssentials(int& argc, char** argv, const QCommandLineParser& parser, b
         }
     }
 
-    // Tell the plugin manager about our statically linked plugins
-    DependencyManager::set<ScriptInitializers>();
-    DependencyManager::set<PluginManager>();
-    auto pluginManager = PluginManager::getInstance();
-    pluginManager->setInputPluginProvider([] { return getInputPlugins(); });
-    pluginManager->setDisplayPluginProvider([] { return getDisplayPlugins(); });
-    pluginManager->setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); });
-    if (auto steamClient = pluginManager->getSteamClientPlugin()) {
-        steamClient->init();
-    }
-    if (auto oculusPlatform = pluginManager->getOculusPlatformPlugin()) {
-        oculusPlatform->init();
-    }
+
 
     PROFILE_SET_THREAD_NAME("Main Thread");
 
@@ -8763,6 +8751,21 @@ void Application::sendLambdaEvent(const std::function<void()>& f) {
 }
 
 void Application::initPlugins(const QCommandLineParser& parser) {
+    // Tell the plugin manager about our statically linked plugins
+    DependencyManager::set<ScriptInitializers>();
+    DependencyManager::set<PluginManager>();
+    auto pluginManager = PluginManager::getInstance();
+    pluginManager->setInputPluginProvider([] { return getInputPlugins(); });
+    pluginManager->setDisplayPluginProvider([] { return getDisplayPlugins(); });
+    pluginManager->setInputPluginSettingsPersister([](const InputPluginList& plugins) { saveInputPluginSettings(plugins); });
+    if (auto steamClient = pluginManager->getSteamClientPlugin()) {
+        steamClient->init();
+    }
+    if (auto oculusPlatform = pluginManager->getOculusPlatformPlugin()) {
+        oculusPlatform->init();
+    }
+
+
     if (parser.isSet("display")) {
         auto preferredDisplays = parser.value("display").split(',', Qt::SkipEmptyParts);
         qInfo() << "Setting prefered display plugins:" << preferredDisplays;