From 53ca9752e25ec60f7f9a5da2958c776efa9696d9 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 18 Jul 2019 10:43:05 +0200 Subject: [PATCH] ProjectManagers: Avoid deletion of special files Do not allow deletion or rename of files that are used to define or manage projects. This fixes issues of being able to remove or rename pri and pro files of qmake based projects as well as special files used by the GenericProjectManager. Change-Id: Ib173abf04368f0625a9e481bb7290aa11933e62f Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/projectexplorer.cpp | 9 +++++---- src/plugins/qbsprojectmanager/qbsnodes.cpp | 13 ++----------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index c200fd0e547..3abb4b69516 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -3264,20 +3264,21 @@ void ProjectExplorerPluginPrivate::updateContextMenuActions() m_addExistingFilesAction->setEnabled(supports(AddExistingFile)); m_addExistingDirectoryAction->setEnabled(supports(AddExistingDirectory)); m_renameFileAction->setEnabled(supports(Rename)); - } else if (currentNode->asFileNode()) { + } else if (auto fileNode = currentNode->asFileNode()) { // Enable and show remove / delete in magic ways: // If both are disabled show Remove // If both are enabled show both (can't happen atm) // If only removeFile is enabled only show it // If only deleteFile is enable only show it - bool enableRemove = supports(RemoveFile); + bool isTypeProject = fileNode->fileType() == FileType::Project; + bool enableRemove = !isTypeProject && supports(RemoveFile); m_removeFileAction->setEnabled(enableRemove); - bool enableDelete = supports(EraseFile); + bool enableDelete = !isTypeProject && supports(EraseFile); m_deleteFileAction->setEnabled(enableDelete); m_deleteFileAction->setVisible(enableDelete); m_removeFileAction->setVisible(!enableDelete || enableRemove); - m_renameFileAction->setEnabled(supports(Rename)); + m_renameFileAction->setEnabled(!isTypeProject && supports(Rename)); const bool currentNodeIsTextFile = isTextFile( currentNode->filePath().toString()); m_diffFileAction->setEnabled(DiffService::instance() diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index cbc6e597401..62762069b2a 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -217,17 +217,8 @@ static bool supportsNodeAction(ProjectAction action, const Node *node) const QbsProject * const project = parentQbsProjectNode(node)->project(); if (!project->isProjectEditable()) return false; - - auto equalsNodeFilePath = [node](const QString &str) - { - return str == node->filePath().toString(); - }; - - if (action == RemoveFile || action == Rename) { - if (node->asFileNode()) - return !Utils::contains(project->qbsProject().buildSystemFiles(), equalsNodeFilePath); - } - + if (action == RemoveFile || action == Rename) + return node->asFileNode(); return false; }