From 2978f08bfa899dcf0bddf678d964c68f57e46751 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@digia.com>
Date: Wed, 22 Oct 2014 15:15:54 +0200
Subject: [PATCH] New File Wizard: Fine tune selection of best node

If the user right clicked on a node and invoked the new dialog that way,
always consider that node even if it is deeper in the file system tree
than the new files.

Task-number: QTCREATORBUG-13215
Change-Id: Ic87033cb9a5e480eee8fb56eacad506d2fd39653
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
---
 src/plugins/projectexplorer/projectwizardpage.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/plugins/projectexplorer/projectwizardpage.cpp b/src/plugins/projectexplorer/projectwizardpage.cpp
index f7bcbda1192..7da0fe82100 100644
--- a/src/plugins/projectexplorer/projectwizardpage.cpp
+++ b/src/plugins/projectexplorer/projectwizardpage.cpp
@@ -73,7 +73,7 @@ class BestNodeSelector
 {
 public:
     BestNodeSelector(const QString &commonDirectory, const QStringList &files);
-    void inspect(AddNewTree *tree);
+    void inspect(AddNewTree *tree, bool isContextNode);
     AddNewTree *bestChoice() const;
     bool deploys();
     QString deployingProjects() const;
@@ -102,7 +102,7 @@ BestNodeSelector::BestNodeSelector(const QString &commonDirectory, const QString
 // Otherwise consider their common path. Either a direct match on the directory
 // or the directory with the longest matching path (list containing"/project/subproject1"
 // matching common path "/project/subproject1/newuserpath").
-void BestNodeSelector::inspect(AddNewTree *tree)
+void BestNodeSelector::inspect(AddNewTree *tree, bool isContextNode)
 {
     FolderNode *node = tree->node();
     if (node->nodeType() == ProjectNodeType) {
@@ -115,7 +115,7 @@ void BestNodeSelector::inspect(AddNewTree *tree)
         return;
     const QString projectDirectory = ProjectExplorerPlugin::directoryFor(node);
     const int projectDirectorySize = projectDirectory.size();
-    if (!m_commonDirectory.startsWith(projectDirectory))
+    if (!m_commonDirectory.startsWith(projectDirectory) && !isContextNode)
         return;
     bool betterMatch = tree->priority() > 0
             && (projectDirectorySize > m_bestMatchLength
@@ -173,7 +173,7 @@ static inline AddNewTree *buildAddProjectTree(ProjectNode *root, const QString &
         if (projectPath.isEmpty() || root->canAddSubProject(projectPath)) {
             FolderNode::AddNewInformation info = root->addNewInformation(QStringList() << projectPath, contextNode);
             AddNewTree *item = new AddNewTree(root, children, info);
-            selector->inspect(item);
+            selector->inspect(item, root == contextNode);
             return item;
         }
     }
@@ -208,7 +208,7 @@ static inline AddNewTree *buildAddFilesTree(FolderNode *root, const QStringList
     if (list.contains(AddNewFile) && !list.contains(InheritedFromParent)) {
         FolderNode::AddNewInformation info = root->addNewInformation(files, contextNode);
         AddNewTree *item = new AddNewTree(root, children, info);
-        selector->inspect(item);
+        selector->inspect(item, root == contextNode);
         return item;
     }
     if (children.isEmpty())
-- 
GitLab