diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp index e02c6353968..46f5e32151e 100644 --- a/src/plugins/qmljseditor/qmljscompletionassist.cpp +++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp @@ -852,3 +852,8 @@ void QmlJSAssistProposalModel::sort() { qSort(currentItems().first, currentItems().second, QmlJSLessThan()); } + +bool QmlJSAssistProposalModel::keepPerfectMatch(TextEditor::AssistReason reason) const +{ + return reason == ExplicitlyInvoked; +} diff --git a/src/plugins/qmljseditor/qmljscompletionassist.h b/src/plugins/qmljseditor/qmljscompletionassist.h index 3826f0507c8..a56b674989b 100644 --- a/src/plugins/qmljseditor/qmljscompletionassist.h +++ b/src/plugins/qmljseditor/qmljscompletionassist.h @@ -75,6 +75,7 @@ public: {} virtual void sort(); + virtual bool keepPerfectMatch(TextEditor::AssistReason reason) const; }; diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp index ae34da69f63..06a1c11be5e 100644 --- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp +++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp @@ -234,6 +234,11 @@ bool BasicProposalItemListModel::supportsPrefixExpansion() const return true; } +bool BasicProposalItemListModel::keepPerfectMatch(AssistReason reason) const +{ + return reason != IdleEditor; +} + QString BasicProposalItemListModel::proposalPrefix() const { if (m_currentItems.size() >= kMaxPrefixFilter) diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h index 482279a9a22..8815e81658d 100644 --- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h +++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.h @@ -64,6 +64,7 @@ public: virtual void sort(); virtual bool supportsPrefixExpansion() const; virtual QString proposalPrefix() const; + virtual bool keepPerfectMatch(AssistReason reason) const; virtual IAssistProposalItem *proposalItem(int index) const; void loadContent(const QList &items); diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index 8ee8e26dc4b..1485e9ea0ba 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -76,7 +76,7 @@ QString cleanText(const QString &original) return clean; } -bool hasMatch(const QString &prefix, const IGenericProposalModel *model) +bool isPerfectMatch(const QString &prefix, const IGenericProposalModel *model) { if (prefix.isEmpty()) return false; @@ -425,7 +425,8 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix) if (!prefix.isEmpty()) m_d->m_model->filter(prefix); if (m_d->m_model->size() == 0 - || (m_d->m_reason == IdleEditor && hasMatch(prefix, m_d->m_model))) { + || (!m_d->m_model->keepPerfectMatch(m_d->m_reason) + && isPerfectMatch(prefix, m_d->m_model))) { abort(); return false; } diff --git a/src/plugins/texteditor/codeassist/igenericproposalmodel.h b/src/plugins/texteditor/codeassist/igenericproposalmodel.h index a6f6699728b..d415b345cec 100644 --- a/src/plugins/texteditor/codeassist/igenericproposalmodel.h +++ b/src/plugins/texteditor/codeassist/igenericproposalmodel.h @@ -34,6 +34,7 @@ #define IGENERICPROPOSALMODEL_H #include "iassistproposalmodel.h" +#include "assistenums.h" #include @@ -58,6 +59,7 @@ public: virtual void sort() = 0; virtual bool supportsPrefixExpansion() const = 0; virtual QString proposalPrefix() const = 0; + virtual bool keepPerfectMatch(AssistReason reason) const = 0; virtual IAssistProposalItem *proposalItem(int index) const = 0; };