diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index f17337c0008b29aa979f607fe2416af88603db86..5765418b124972a53ccae675c1de2b163396a809 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -52,6 +52,15 @@ using Core::FileIconProvider; namespace { // sorting helper function + +int fileNameCompare(const QString &a, const QString &b) +{ + int result = a.compare(b, Qt::CaseInsensitive); + if (result != 0) + return result; + return a.compare(b, Qt::CaseSensitive); +} + bool sortNodes(Node *n1, Node *n2) { // Ordering is: project files, project, folder, file @@ -67,8 +76,9 @@ bool sortNodes(Node *n1, Node *n2) const QString fileName1 = QFileInfo(file1->path()).fileName(); const QString fileName2 = QFileInfo(file2->path()).fileName(); - if (fileName1 != fileName2) - return fileName1.compare(fileName2, Qt::CaseInsensitive) < 0; + int result = fileNameCompare(fileName1, fileName2); + if (result != 0) + return result; else return file1 < file2; } else { @@ -86,8 +96,9 @@ bool sortNodes(Node *n1, Node *n2) ProjectNode *project1 = static_cast<ProjectNode*>(n1); ProjectNode *project2 = static_cast<ProjectNode*>(n2); - if (project1->displayName() != project2->displayName()) - return project1->displayName().compare(project2->displayName(), Qt::CaseInsensitive) < 0; // sort by name + int result = fileNameCompare(project1->displayName(), project2->displayName()); + if (result != 0) + return result; else return project1 < project2; // sort by pointer value } else { @@ -102,8 +113,9 @@ bool sortNodes(Node *n1, Node *n2) FolderNode *folder1 = static_cast<FolderNode*>(n1); FolderNode *folder2 = static_cast<FolderNode*>(n2); - if (folder1->path() != folder2->path()) - return folder1->path().compare(folder2->path(), Qt::CaseInsensitive) < 0; + int result = fileNameCompare(folder1->path(), folder2->path()); + if (result != 0) + return result; else return folder1 < folder2; } else { @@ -121,11 +133,13 @@ bool sortNodes(Node *n1, Node *n2) const QString fileName1 = QFileInfo(filePath1).fileName(); const QString fileName2 = QFileInfo(filePath2).fileName(); - if (fileName1 != fileName2) { - return fileName1.compare(fileName2, Qt::CaseInsensitive) < 0; // sort by file names + int result = fileNameCompare(fileName1, fileName2); + if (result != 0) { + return result; // sort by filename } else { - if (filePath1 != filePath2) { - return filePath1.compare(filePath2, Qt::CaseInsensitive) < 0; // sort by path names + result = fileNameCompare(filePath1, filePath2); + if (result != 0) { + return result; // sort by filepath } else { return n1 < n2; // sort by pointer value }