summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorAl <26797547+Al12rs@users.noreply.github.com>2020-06-11 11:54:07 -0700
committerGitHub <noreply@github.com>2020-06-11 11:54:07 -0700
commit628b56144d72cca5945f07913b7df3f996d2794e (patch)
treee224352b11aa4d9346106986c1d6d791c1a60297 /src/main.cpp
parent297cb8320f91377f8029fe9318534f34c83e7461 (diff)
parent5d0b6b0eab489e2010f6286647864889cae7422a (diff)
Merge pull request #1124 from Holt59/fix-unloading-of-plugins
Manually unload plugins to avoid issue with automatic unloading.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/main.cpp b/src/main.cpp
index c7a2834c..46f2f0aa 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -560,6 +560,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
});
log::debug("initializing core");
+ std::unique_ptr<PluginContainer> pluginContainer;
OrganizerCore organizer(settings);
if (!organizer.bootstrap()) {
reportError("failed to set up data paths");
@@ -582,11 +583,11 @@ int runApplication(MOApplication &application, SingleInstance &instance,
}
log::debug("initializing plugins");
- PluginContainer pluginContainer(&organizer);
- pluginContainer.loadPlugins();
+ pluginContainer = std::make_unique<PluginContainer>(&organizer);
+ pluginContainer->loadPlugins();
MOBase::IPluginGame *game = determineCurrentGame(
- application.applicationDirPath(), settings, pluginContainer);
+ application.applicationDirPath(), settings, *pluginContainer);
if (game == nullptr) {
InstanceManager &instance = InstanceManager::instance();
@@ -723,7 +724,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
QString apiKey;
if (settings.nexus().apiKey(apiKey)) {
- NexusInterface::instance(&pluginContainer)->getAccessManager()->apiCheck(apiKey);
+ NexusInterface::instance(pluginContainer.get())->getAccessManager()->apiCheck(apiKey);
}
log::debug("initializing tutorials");
@@ -741,9 +742,9 @@ int runApplication(MOApplication &application, SingleInstance &instance,
{ // scope to control lifetime of mainwindow
// set up main window and its data structures
- MainWindow mainWindow(settings, organizer, pluginContainer);
+ MainWindow mainWindow(settings, organizer, *pluginContainer);
- NexusInterface::instance(&pluginContainer)
+ NexusInterface::instance(pluginContainer.get())
->getAccessManager()->setTopLevelWidget(&mainWindow);
QObject::connect(&mainWindow, SIGNAL(styleChanged(QString)), &application,
@@ -766,13 +767,12 @@ int runApplication(MOApplication &application, SingleInstance &instance,
res = application.exec();
mainWindow.close();
- NexusInterface::instance(&pluginContainer)
+ NexusInterface::instance(pluginContainer.get())
->getAccessManager()->setTopLevelWidget(nullptr);
}
settings.geometry().resetIfNeeded();
return res;
-
} catch (const std::exception &e) {
reportError(e.what());
}