CMake: fix crash while clicking context menu

It crashed if the root project had some error
and I tried to build a subproject.

Change-Id: I13dc620402a5f79e507e7da3fedb5eb09a4112da
Reviewed-by: Alexander Drozdov <adrozdoff@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Tim Jenssen
2016-12-08 22:31:43 +01:00
parent a08a4a4842
commit b91632e642

View File

@@ -112,15 +112,17 @@ void CMakeProjectPlugin::updateContextActions(ProjectExplorer::Node *node,
ProjectExplorer::Project *project) ProjectExplorer::Project *project)
{ {
CMakeTargetNode *targetNode = dynamic_cast<CMakeTargetNode *>(node); CMakeTargetNode *targetNode = dynamic_cast<CMakeTargetNode *>(node);
// as targetNode can be deleted while the menu is open, we keep only the
const QString targetDisplayName = targetNode ? targetNode->displayName() : QString();
CMakeProject *cmProject = dynamic_cast<CMakeProject *>(project); CMakeProject *cmProject = dynamic_cast<CMakeProject *>(project);
// Build Target: // Build Target:
disconnect(m_buildTargetContextAction); disconnect(m_buildTargetContextAction);
m_buildTargetContextAction->setParameter(targetNode ? targetNode->displayName() : QString()); m_buildTargetContextAction->setParameter(targetDisplayName);
m_buildTargetContextAction->setEnabled(targetNode); m_buildTargetContextAction->setEnabled(targetNode);
m_buildTargetContextAction->setVisible(targetNode); m_buildTargetContextAction->setVisible(targetNode);
if (cmProject && targetNode) { if (cmProject && targetNode) {
connect(m_buildTargetContextAction, &Utils::ParameterAction::triggered, connect(m_buildTargetContextAction, &Utils::ParameterAction::triggered,
cmProject, [cmProject, targetNode]() { cmProject->buildCMakeTarget(targetNode->displayName()); }); cmProject, [cmProject, targetDisplayName]() { cmProject->buildCMakeTarget(targetDisplayName); });
} }
} }