diff options
author | hjk <hjk@qt.io> | 2016-10-05 08:31:16 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2016-10-05 16:14:42 +0000 |
commit | 33c732c60c1628a5445084fce433b10a84bffc93 (patch) | |
tree | 463cd5b0b6b12723e04ed00b694499b1d9857e74 /src/plugins/projectexplorer/targetsettingspanel.cpp | |
parent | b9a8ed31ae2bbd8d7ccb4b796903cb7677724230 (diff) |
ProjectWindow: Fix crash in TargetSetupPage
Move ownership of the ProjectImporter to the Project.
Task-number: QTCREATORBUG-16744
Change-Id: I7fc217ce8058287c5435b259bdc5300a926f8098
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/targetsettingspanel.cpp')
-rw-r--r-- | src/plugins/projectexplorer/targetsettingspanel.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index a7e827ed52..0e14218fb7 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -132,7 +132,6 @@ TargetSetupPageWrapper::TargetSetupPageWrapper(Project *project) : m_project(project) { m_targetSetupPage = new TargetSetupPage(this); - m_targetSetupPage->setProjectImporter(project->createProjectImporter()); m_targetSetupPage->setUseScrollArea(false); m_targetSetupPage->setProjectPath(project->projectFilePath().toString()); m_targetSetupPage->setRequiredKitMatcher(project->requiredKitMatcher()); @@ -209,7 +208,7 @@ class TargetGroupItemPrivate : public QObject public: TargetGroupItemPrivate(TargetGroupItem *q, Project *project); - ~TargetGroupItemPrivate() { /*delete m_importer;*/ } + ~TargetGroupItemPrivate(); void handleRemovedKit(Kit *kit); void handleAddedKit(Kit *kit); @@ -224,8 +223,7 @@ public: TargetGroupItem *q; QString m_displayName; - QPointer<Project> m_project; - ProjectImporter *m_importer; + Project *m_project; QPointer<QWidget> m_noKitLabel; QPointer<QWidget> m_configurePage; @@ -281,12 +279,13 @@ void TargetGroupItemPrivate::ensureWidget() void TargetGroupItemPrivate::importTarget(const Utils::FileName &path) { - if (!m_importer) + ProjectImporter *importer = m_project->projectImporter(); + if (!importer) return; Target *target = nullptr; BuildConfiguration *bc = nullptr; - QList<BuildInfo *> toImport = m_importer->import(path, false); + QList<BuildInfo *> toImport = importer->import(path, false); foreach (BuildInfo *info, toImport) { target = m_project->target(info->kitId); if (!target) { @@ -519,7 +518,7 @@ public: bool isEnabled() const { return target() != 0; } public: - Project *m_project; // Not owned. + QPointer<Project> m_project; // Not owned. Id m_kitId; int m_currentChild = 1; // Use run page by default. }; @@ -706,13 +705,10 @@ TargetGroupItem::~TargetGroupItem() delete d; } -TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, - Project *project) +TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, Project *project) : q(q), m_project(project) { - m_importer = project->createProjectImporter(); - - if (m_importer) { + if (project->projectImporter()) { auto importAction = new QAction(tr("Import existing build..."), 0); QObject::connect(importAction, &QAction::triggered, [this] { QString dir = m_project->projectDirectory().toString(); @@ -730,6 +726,11 @@ TargetGroupItemPrivate::TargetGroupItemPrivate(TargetGroupItem *q, rebuildContents(); } +TargetGroupItemPrivate::~TargetGroupItemPrivate() +{ + disconnect(); +} + QVariant TargetGroupItem::data(int column, int role) const { if (role == Qt::DisplayRole) |