diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-12-04 19:32:11 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2020-12-04 19:32:11 +0100 |
| commit | 8b02a5a7965440b883e9601ece0e30bca1169a65 (patch) | |
| tree | 89ec90646a82c46928d722a5ebd379476307bc5a /src | |
| parent | a1ab717e9e4fd72071cd01d9ceb74e7ba10ffafd (diff) | |
Fix crash when starting MO2 without instance.
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugincontainer.cpp | 22 | ||||
| -rw-r--r-- | src/plugincontainer.h | 2 | ||||
| -rw-r--r-- | src/previewgenerator.cpp | 8 | ||||
| -rw-r--r-- | src/previewgenerator.h | 4 |
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;
};
|
