diff --git a/src/plugins/coreplugin/helpmanager.cpp b/src/plugins/coreplugin/helpmanager.cpp index 9ac08d4c5b6..49ca75161ed 100644 --- a/src/plugins/coreplugin/helpmanager.cpp +++ b/src/plugins/coreplugin/helpmanager.cpp @@ -222,7 +222,8 @@ QMap HelpManager::linksForIdentifier(const QString &id) const } // This should go into Qt 4.8 once we start using it for Qt Creator -QStringList HelpManager::findKeywords(const QString &key, int maxHits) const +QStringList HelpManager::findKeywords(const QString &key, Qt::CaseSensitivity caseSensitivity, + int maxHits) const { if (d->m_needsSetup) return QStringList(); @@ -251,7 +252,7 @@ QStringList HelpManager::findKeywords(const QString &key, int maxHits) const while (query.next()) { const QString &keyValue = query.value(0).toString(); if (!keyValue.isEmpty()) { - if (keyValue.startsWith(key, Qt::CaseInsensitive)) + if (keyValue.startsWith(key, caseSensitivity)) keywordsToSort.insert(keyValue); else keywords.insert(keyValue); diff --git a/src/plugins/coreplugin/helpmanager.h b/src/plugins/coreplugin/helpmanager.h index 59c406eb930..5fc41cad293 100644 --- a/src/plugins/coreplugin/helpmanager.h +++ b/src/plugins/coreplugin/helpmanager.h @@ -63,7 +63,9 @@ public: QMap linksForKeyword(const QString &key) const; QMap linksForIdentifier(const QString &id) const; - QStringList findKeywords(const QString &key, int maxHits = INT_MAX) const; + QStringList findKeywords(const QString &key, + Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive, + int maxHits = INT_MAX) const; QUrl findFile(const QUrl &url) const; QByteArray fileData(const QUrl &url) const; diff --git a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp index b18fdbf2a44..2e4809971ce 100644 --- a/src/plugins/cpptools/cppcurrentdocumentfilter.cpp +++ b/src/plugins/cpptools/cppcurrentdocumentfilter.cpp @@ -81,6 +81,8 @@ QList CppCurrentDocumentFilter::matchesFor(QFutureInterfac m_itemsOfCurrentDoc = search(thisDocument); } + const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry); + foreach (const ModelItemInfo & info, m_itemsOfCurrentDoc) { if (future.isCanceled()) @@ -94,7 +96,7 @@ QList CppCurrentDocumentFilter::matchesFor(QFutureInterfac Locator::FilterEntry filterEntry(this, symbolName, id, info.icon); filterEntry.extraInfo = info.symbolType; - if (info.symbolName.startsWith(entry)) + if (info.symbolName.startsWith(entry, caseSensitivityForPrefix)) betterEntries.append(filterEntry); else goodEntries.append(filterEntry); diff --git a/src/plugins/cpptools/cpplocatorfilter.cpp b/src/plugins/cpptools/cpplocatorfilter.cpp index ac27be1d037..55f729c6a22 100644 --- a/src/plugins/cpptools/cpplocatorfilter.cpp +++ b/src/plugins/cpptools/cpplocatorfilter.cpp @@ -135,6 +135,7 @@ QList CppLocatorFilter::matchesFor(QFutureInterface > it(m_searchList); while (it.hasNext()) { @@ -157,7 +158,7 @@ QList CppLocatorFilter::matchesFor(QFutureInterface() - << ResultData(_("::MyClass"), testFileShort) - << ResultData(_("::MyClass::MyClass"), _("()")) - << ResultData(_("::MyClass::function2"), _("(bool, int)")) << ResultData(_("MyClass"), testFileShort) << ResultData(_("MyClass::MyClass"), _("()")) << ResultData(_("MyClass::function2"), _("(bool, int)")) + << ResultData(_("::MyClass"), testFileShort) + << ResultData(_("::MyClass::MyClass"), _("()")) + << ResultData(_("::MyClass::function2"), _("(bool, int)")) << ResultData(_("MyNamespace::MyClass"), testFileShort) << ResultData(_("MyNamespace::MyClass::MyClass"), _("()")) << ResultData(_("MyNamespace::MyClass::function2"), _("(bool, int)")) diff --git a/src/plugins/help/helpindexfilter.cpp b/src/plugins/help/helpindexfilter.cpp index 1016ed38eb0..7ee6737cdc3 100644 --- a/src/plugins/help/helpindexfilter.cpp +++ b/src/plugins/help/helpindexfilter.cpp @@ -62,9 +62,9 @@ QList HelpIndexFilter::matchesFor(QFutureInterfacefindKeywords(entry, 200); + keywords = Core::HelpManager::instance()->findKeywords(entry, caseSensitivity(entry), 200); else - keywords = Core::HelpManager::instance()->findKeywords(entry); + keywords = Core::HelpManager::instance()->findKeywords(entry, caseSensitivity(entry)); QList entries; foreach (const QString &keyword, keywords) { diff --git a/src/plugins/locator/basefilefilter.cpp b/src/plugins/locator/basefilefilter.cpp index 8cd2a96e40b..3df7ff8cd58 100644 --- a/src/plugins/locator/basefilefilter.cpp +++ b/src/plugins/locator/basefilefilter.cpp @@ -70,6 +70,7 @@ QList BaseFileFilter::matchesFor(QFutureInterface BaseFileFilter::matchesFor(QFutureInterface CommandLocator::matchesFor(QFutureInterfacecommands.size(); for (int i = 0; i < count; i++) { if (future.isCanceled()) @@ -80,9 +81,9 @@ QList CommandLocator::matchesFor(QFutureInterfaceisEnabled()) { QString text = action->text(); text.remove(ampersand); - if (text.startsWith(entry, Qt::CaseInsensitive)) + if (text.startsWith(entry, caseSensitivity_)) betterEntries.append(FilterEntry(this, text, QVariant(i))); - else if (text.contains(entry, Qt::CaseInsensitive)) + else if (text.contains(entry, caseSensitivity_)) goodEntries.append(FilterEntry(this, text, QVariant(i))); } } diff --git a/src/plugins/locator/executefilter.cpp b/src/plugins/locator/executefilter.cpp index c34f7f5f279..8a1251bd649 100644 --- a/src/plugins/locator/executefilter.cpp +++ b/src/plugins/locator/executefilter.cpp @@ -64,12 +64,13 @@ QList ExecuteFilter::matchesFor(QFutureInterface others; + const Qt::CaseSensitivity caseSensitivityForPrefix = caseSensitivity(entry); foreach (const QString& i, m_commandHistory) { if (future.isCanceled()) break; if (i == entry) // avoid repeated entry continue; - if (i.startsWith(entry)) + if (i.startsWith(entry, caseSensitivityForPrefix)) value.append(FilterEntry(this, i, QVariant())); else others.append(FilterEntry(this, i, QVariant())); diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp index 88cbf367194..d25d45a2a32 100644 --- a/src/plugins/locator/filesystemfilter.cpp +++ b/src/plugins/locator/filesystemfilter.cpp @@ -38,6 +38,21 @@ using namespace Core; using namespace Locator; using namespace Locator::Internal; +namespace { + +QList *categorize(const QString &entry, const QString &candidate, + Qt::CaseSensitivity caseSensitivity, + QList *betterEntries, QList *goodEntries) +{ + if (entry.isEmpty() || candidate.startsWith(entry, caseSensitivity)) + return betterEntries; + else if (candidate.contains(entry, caseSensitivity)) + return goodEntries; + return 0; +} + +} // anynoumous namespace + FileSystemFilter::FileSystemFilter(EditorManager *editorManager, LocatorWidget *locatorWidget) : m_editorManager(editorManager), m_locatorWidget(locatorWidget), m_includeHidden(true) { @@ -49,7 +64,8 @@ FileSystemFilter::FileSystemFilter(EditorManager *editorManager, LocatorWidget * QList FileSystemFilter::matchesFor(QFutureInterface &future, const QString &entry) { - QList value; + QList goodEntries; + QList betterEntries; QFileInfo entryInfo(entry); QString name = entryInfo.fileName(); QString directory = entryInfo.path(); @@ -72,6 +88,7 @@ QList FileSystemFilter::matchesFor(QFutureInterface FileSystemFilter::matchesFor(QFutureInterface *category = categorize(name, dir, caseSensitivity_, &betterEntries, + &goodEntries)) { const QString fullPath = dirInfo.filePath(dir); FilterEntry filterEntry(this, dir, QVariant()); filterEntry.fileName = fullPath; - value.append(filterEntry); + category->append(filterEntry); } } // file names can match with +linenumber or :linenumber @@ -93,14 +111,16 @@ QList FileSystemFilter::matchesFor(QFutureInterface *category = categorize(name, file, caseSensitivity_, &betterEntries, + &goodEntries)) { const QString fullPath = dirInfo.filePath(file); FilterEntry filterEntry(this, file, QString(fullPath + lineNoSuffix)); filterEntry.fileName = fullPath; - value.append(filterEntry); + category->append(filterEntry); } } - return value; + betterEntries.append(goodEntries); + return betterEntries; } void FileSystemFilter::accept(FilterEntry selection) const diff --git a/src/plugins/locator/ilocatorfilter.cpp b/src/plugins/locator/ilocatorfilter.cpp index 16521dc5f14..225f78900a2 100644 --- a/src/plugins/locator/ilocatorfilter.cpp +++ b/src/plugins/locator/ilocatorfilter.cpp @@ -132,6 +132,11 @@ QString ILocatorFilter::trimWildcards(const QString &str) return str.mid(first, last-first+1); } +Qt::CaseSensitivity ILocatorFilter::caseSensitivity(const QString &str) +{ + return str == str.toLower() ? Qt::CaseInsensitive : Qt::CaseSensitive; +} + bool ILocatorFilter::isConfigurable() const { return m_isConfigurable; diff --git a/src/plugins/locator/ilocatorfilter.h b/src/plugins/locator/ilocatorfilter.h index 331b17e847e..6ea20a64a91 100644 --- a/src/plugins/locator/ilocatorfilter.h +++ b/src/plugins/locator/ilocatorfilter.h @@ -138,6 +138,7 @@ public: bool isEnabled() const; static QString trimWildcards(const QString &str); + static Qt::CaseSensitivity caseSensitivity(const QString &str); public slots: /* Enable or disable the filter. */ diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp index c7d78b912e1..54a873e8f42 100644 --- a/src/plugins/locator/opendocumentsfilter.cpp +++ b/src/plugins/locator/opendocumentsfilter.cpp @@ -56,7 +56,8 @@ OpenDocumentsFilter::OpenDocumentsFilter(EditorManager *editorManager) : QList OpenDocumentsFilter::matchesFor(QFutureInterface &future, const QString &entry_) { - QList value; + QList goodEntries; + QList betterEntries; QString entry = entry_; const QString lineNoSuffix = EditorManager::splitLineNumber(&entry); const QChar asterisk = QLatin1Char('*'); @@ -65,23 +66,27 @@ QList OpenDocumentsFilter::matchesFor(QFutureInterface &category = displayName.startsWith(entry, caseSensitivityForPrefix) + ? betterEntries : goodEntries; + category.append(fiEntry); } } - return value; + betterEntries.append(goodEntries); + return betterEntries; } void OpenDocumentsFilter::refreshInternally() diff --git a/src/plugins/macros/macrolocatorfilter.cpp b/src/plugins/macros/macrolocatorfilter.cpp index 03df032dc6d..2bb81904c55 100644 --- a/src/plugins/macros/macrolocatorfilter.cpp +++ b/src/plugins/macros/macrolocatorfilter.cpp @@ -55,7 +55,10 @@ MacroLocatorFilter::~MacroLocatorFilter() QList MacroLocatorFilter::matchesFor(QFutureInterface &future, const QString &entry) { Q_UNUSED(future) - QList result; + QList goodEntries; + QList betterEntries; + + const Qt::CaseSensitivity caseSensitivity_ = caseSensitivity(entry); const QMap ¯os = MacroManager::macros(); QMapIterator it(macros); @@ -64,14 +67,21 @@ QList MacroLocatorFilter::matchesFor(QFutureInterface *category = 0; + if (name.startsWith(entry, caseSensitivity_)) + category = &betterEntries; + else if (name.contains(entry, caseSensitivity_)) + category = &goodEntries; + + if (category) { QVariant id; Locator::FilterEntry entry(this, it.key(), id, m_icon); entry.extraInfo = it.value()->description(); - result.append(entry); + category->append(entry); } } - return result; + betterEntries.append(goodEntries); + return betterEntries; } void MacroLocatorFilter::accept(Locator::FilterEntry selection) const diff --git a/src/plugins/qmljstools/qmljsfunctionfilter.cpp b/src/plugins/qmljstools/qmljsfunctionfilter.cpp index 33c1eb93563..89b6c6e9038 100644 --- a/src/plugins/qmljstools/qmljsfunctionfilter.cpp +++ b/src/plugins/qmljstools/qmljsfunctionfilter.cpp @@ -72,6 +72,7 @@ QList FunctionFilter::matchesFor(QFutureInterface > it(m_data->entries()); while (it.hasNext()) { @@ -91,7 +92,7 @@ QList FunctionFilter::matchesFor(QFutureInterface