summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-12-04 19:32:11 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2020-12-04 19:32:11 +0100
commit8b02a5a7965440b883e9601ece0e30bca1169a65 (patch)
tree89ec90646a82c46928d722a5ebd379476307bc5a /src
parenta1ab717e9e4fd72071cd01d9ceb74e7ba10ffafd (diff)
Fix crash when starting MO2 without instance.
Diffstat (limited to 'src')
-rw-r--r--src/plugincontainer.cpp22
-rw-r--r--src/plugincontainer.h2
-rw-r--r--src/previewgenerator.cpp8
-rw-r--r--src/previewgenerator.h4
4 files changed, 21 insertions, 15 deletions
diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp
index e4eb389f..c703a36a 100644
--- a/src/plugincontainer.cpp
+++ b/src/plugincontainer.cpp
@@ -280,7 +280,7 @@ void PluginRequirements::requiredFor(std::vector<MOBase::IPlugin*> &required, st
PluginContainer::PluginContainer(OrganizerCore *organizer)
: m_Organizer(organizer)
, m_UserInterface(nullptr)
- , m_PreviewGenerator(this)
+ , m_PreviewGenerator(*this)
{
}
@@ -397,6 +397,7 @@ bool PluginContainer::initPlugin(IPlugin *plugin, IPluginProxy *pluginProxy, boo
OrganizerProxy* proxy = nullptr;
if (m_Organizer) {
proxy = new OrganizerProxy(m_Organizer, this, plugin);
+ proxy->setParent(as_qobject(plugin));
}
// Check if it is a proxy plugin:
@@ -417,8 +418,6 @@ bool PluginContainer::initPlugin(IPlugin *plugin, IPluginProxy *pluginProxy, boo
return false;
}
- proxy->setParent(as_qobject(plugin));
-
// Update requirements:
it->second.fetchRequirements();
@@ -732,12 +731,17 @@ void PluginContainer::startPluginsImpl(const std::vector<QObject*>& plugins) con
}
// Trigger initial callbacks, e.g. onUserInterfaceInitialized and onProfileChanged.
- for (auto* object : plugins) {
- auto* plugin = qobject_cast<IPlugin*>(object);
- auto* oproxy = organizerProxy(plugin);
- oproxy->connectSignals();
- oproxy->m_UserInterfaceInitialized(m_UserInterface->mainWindow());
- oproxy->m_ProfileChanged(nullptr, m_Organizer->currentProfile());
+ if (m_Organizer) {
+ for (auto* object : plugins) {
+ auto* plugin = qobject_cast<IPlugin*>(object);
+ auto* oproxy = organizerProxy(plugin);
+ oproxy->connectSignals();
+ oproxy->m_ProfileChanged(nullptr, m_Organizer->currentProfile());
+
+ if (m_UserInterface) {
+ oproxy->m_UserInterfaceInitialized(m_UserInterface->mainWindow());
+ }
+ }
}
}
diff --git a/src/plugincontainer.h b/src/plugincontainer.h
index 4eb30db6..386b9bca 100644
--- a/src/plugincontainer.h
+++ b/src/plugincontainer.h
@@ -462,8 +462,10 @@ private:
MOBase::IPlugin* registerPlugin(QObject *pluginObj, const QString &fileName, MOBase::IPluginProxy *proxy);
+ // Core organizer, can be null (e.g. on first MO2 startup).
OrganizerCore *m_Organizer;
+ // Main user interface, can be null until MW has been initialized.
IUserInterface *m_UserInterface;
PluginMap m_Plugins;
diff --git a/src/previewgenerator.cpp b/src/previewgenerator.cpp
index 904d679f..22332af3 100644
--- a/src/previewgenerator.cpp
+++ b/src/previewgenerator.cpp
@@ -29,14 +29,14 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
-PreviewGenerator::PreviewGenerator(const PluginContainer* pluginContainer) :
+PreviewGenerator::PreviewGenerator(const PluginContainer& pluginContainer) :
m_PluginContainer(pluginContainer) {
m_MaxSize = QGuiApplication::primaryScreen()->size() * 0.8;
}
bool PreviewGenerator::previewSupported(const QString &fileExtension) const
{
- auto& previews = m_PluginContainer->plugins<IPluginPreview>();
+ auto& previews = m_PluginContainer.plugins<IPluginPreview>();
for (auto* preview : previews) {
if (preview->supportedExtensions().contains(fileExtension)) {
return true;
@@ -48,9 +48,9 @@ bool PreviewGenerator::previewSupported(const QString &fileExtension) const
QWidget *PreviewGenerator::genPreview(const QString &fileName) const
{
const QString ext = QFileInfo(fileName).suffix().toLower();
- auto& previews = m_PluginContainer->plugins<IPluginPreview>();
+ auto& previews = m_PluginContainer.plugins<IPluginPreview>();
for (auto* preview : previews) {
- if (m_PluginContainer->isEnabled(preview) && preview->supportedExtensions().contains(ext)) {
+ if (m_PluginContainer.isEnabled(preview) && preview->supportedExtensions().contains(ext)) {
return preview->genFilePreview(fileName, m_MaxSize);
}
}
diff --git a/src/previewgenerator.h b/src/previewgenerator.h
index f70649b5..8e491116 100644
--- a/src/previewgenerator.h
+++ b/src/previewgenerator.h
@@ -31,7 +31,7 @@ class PluginContainer;
class PreviewGenerator
{
public:
- PreviewGenerator(const PluginContainer* pluginContainer);
+ PreviewGenerator(const PluginContainer& pluginContainer);
bool previewSupported(const QString &fileExtension) const;
@@ -39,7 +39,7 @@ public:
private:
- const PluginContainer* m_PluginContainer;
+ const PluginContainer& m_PluginContainer;
QSize m_MaxSize;
};