ProjectExplorer: Fix "Remove subproject" functionality

This was completely broken: Both The qmake-specific logic for enabling
the menu item and the generic code executing the action operated on the
wrong nodes.

Change-Id: Ic6af6f87999dfd3b939f185312be944750b21fa9
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2019-02-20 17:44:14 +01:00
parent da01512676
commit 434c960243
3 changed files with 12 additions and 7 deletions

View File

@@ -3406,15 +3406,12 @@ void ProjectExplorerPluginPrivate::removeProject()
Node *node = ProjectTree::findCurrentNode(); Node *node = ProjectTree::findCurrentNode();
if (!node) if (!node)
return; return;
ProjectNode *subProjectNode = node->managingProject(); ProjectNode *projectNode = node->managingProject();
if (!subProjectNode)
return;
ProjectNode *projectNode = subProjectNode->managingProject();
if (projectNode) { if (projectNode) {
Utils::RemoveFileDialog removeFileDialog(subProjectNode->filePath().toString(), ICore::mainWindow()); Utils::RemoveFileDialog removeFileDialog(node->filePath().toString(), ICore::mainWindow());
removeFileDialog.setDeleteFileVisible(false); removeFileDialog.setDeleteFileVisible(false);
if (removeFileDialog.exec() == QDialog::Accepted) if (removeFileDialog.exec() == QDialog::Accepted)
projectNode->removeSubProject(subProjectNode->filePath().toString()); projectNode->removeSubProject(node->filePath().toString());
} }
} }

View File

@@ -132,7 +132,7 @@ bool QmakePriFileNode::supportsAction(ProjectAction action, const Node *node) co
break; break;
} }
case ProjectType::SubDirsTemplate: case ProjectType::SubDirsTemplate:
if (action == AddSubProject || action == RemoveSubProject) if (action == AddSubProject)
return true; return true;
break; break;
default: default:
@@ -347,6 +347,13 @@ bool QmakeProFileNode::includedInExactParse() const
return pro && pro->includedInExactParse(); return pro && pro->includedInExactParse();
} }
bool QmakeProFileNode::supportsAction(ProjectAction action, const Node *node) const
{
if (action == RemoveSubProject)
return parentProjectNode() && !parentProjectNode()->asContainerNode();
return QmakePriFileNode::supportsAction(action, node);
}
FolderNode::AddNewInformation QmakeProFileNode::addNewInformation(const QStringList &files, Node *context) const FolderNode::AddNewInformation QmakeProFileNode::addNewInformation(const QStringList &files, Node *context) const
{ {
Q_UNUSED(files) Q_UNUSED(files)

View File

@@ -90,6 +90,7 @@ public:
bool isQtcRunnable() const; bool isQtcRunnable() const;
bool includedInExactParse() const; bool includedInExactParse() const;
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override;
bool showInSimpleTree() const override; bool showInSimpleTree() const override;
QString buildKey() const override; QString buildKey() const override;