forked from qt-creator/qt-creator
QmlDesignerProjectManager: prevent crash at destruction
found in https://the-qt-company-00.sentry.io/issues/5315357110
Change-Id: Ie8d7358c246799c5883e52fbdadb6f3a5e2a4359
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
(cherry picked from commit a7fd0a78d1
)
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -238,30 +238,34 @@ QmlDesignerProjectManager::QmlDesignerProjectManager(ExternalDependenciesInterfa
|
||||
, m_externalDependencies{externalDependencies}
|
||||
{
|
||||
auto editorManager = ::Core::EditorManager::instance();
|
||||
QObject::connect(editorManager, &::Core::EditorManager::editorOpened, [&](auto *editor) {
|
||||
QObject::connect(editorManager, &::Core::EditorManager::editorOpened, &dummy, [&](auto *editor) {
|
||||
editorOpened(editor);
|
||||
});
|
||||
QObject::connect(editorManager, &::Core::EditorManager::currentEditorChanged, [&](auto *editor) {
|
||||
currentEditorChanged(editor);
|
||||
});
|
||||
QObject::connect(editorManager, &::Core::EditorManager::editorsClosed, [&](const auto &editors) {
|
||||
editorsClosed(editors);
|
||||
});
|
||||
QObject::connect(editorManager,
|
||||
&::Core::EditorManager::currentEditorChanged,
|
||||
&dummy,
|
||||
[&](auto *editor) { currentEditorChanged(editor); });
|
||||
QObject::connect(editorManager,
|
||||
&::Core::EditorManager::editorsClosed,
|
||||
&dummy,
|
||||
[&](const auto &editors) { editorsClosed(editors); });
|
||||
auto sessionManager = ::ProjectExplorer::ProjectManager::instance();
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::ProjectManager::projectAdded,
|
||||
&dummy,
|
||||
[&](auto *project) { projectAdded(project); });
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::ProjectManager::aboutToRemoveProject,
|
||||
&dummy,
|
||||
[&](auto *project) { aboutToRemoveProject(project); });
|
||||
QObject::connect(sessionManager,
|
||||
&::ProjectExplorer::ProjectManager::projectRemoved,
|
||||
&dummy,
|
||||
[&](auto *project) { projectRemoved(project); });
|
||||
|
||||
QObject::connect(&m_previewImageCacheData->timer,
|
||||
&QTimer::timeout,
|
||||
this,
|
||||
&QmlDesignerProjectManager::generatePreview);
|
||||
QObject::connect(&m_previewImageCacheData->timer, &QTimer::timeout, &dummy, [&]() {
|
||||
generatePreview();
|
||||
});
|
||||
}
|
||||
|
||||
QmlDesignerProjectManager::~QmlDesignerProjectManager() = default;
|
||||
@@ -562,12 +566,12 @@ QmlDesignerProjectManager::ImageCacheData *QmlDesignerProjectManager::imageCache
|
||||
m_imageCacheData->nodeInstanceCollector.setTarget(project->activeTarget());
|
||||
QObject::connect(project,
|
||||
&ProjectExplorer::Project::activeTargetChanged,
|
||||
this,
|
||||
&dummy,
|
||||
setTargetInImageCache);
|
||||
}
|
||||
QObject::connect(ProjectExplorer::ProjectManager::instance(),
|
||||
&ProjectExplorer::ProjectManager::startupProjectChanged,
|
||||
this,
|
||||
&dummy,
|
||||
[=](ProjectExplorer::Project *project) {
|
||||
setTargetInImageCache(activeTarget(project));
|
||||
});
|
||||
|
@@ -28,10 +28,8 @@ namespace QmlDesigner {
|
||||
|
||||
class ExternalDependenciesInterface;
|
||||
|
||||
class QmlDesignerProjectManager : public QObject
|
||||
class QmlDesignerProjectManager
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
class QmlDesignerProjectManagerProjectData;
|
||||
class PreviewImageCacheData;
|
||||
class ImageCacheData;
|
||||
@@ -70,5 +68,6 @@ private:
|
||||
std::unique_ptr<PreviewImageCacheData> m_previewImageCacheData;
|
||||
std::unique_ptr<QmlDesignerProjectManagerProjectData> m_projectData;
|
||||
ExternalDependenciesInterface &m_externalDependencies;
|
||||
QObject dummy;
|
||||
};
|
||||
} // namespace QmlDesigner
|
||||
|
Reference in New Issue
Block a user