From 7de836bf851b144ead33a5aea685ed92b9e928ea Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 19 Jul 2010 10:25:55 +0200 Subject: [PATCH] Don't complete the current item when pressing special characters (e.g. `;') if the completion is automatically triggered. --- src/plugins/cpptools/cppcodecompletion.cpp | 22 +++++++++++++--------- src/plugins/cpptools/cppcodecompletion.h | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 44f8b861fac..e13c4f789f9 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -439,7 +439,7 @@ CppCodeCompletion::CppCodeCompletion(CppModelManager *manager) m_editor(0), m_startPosition(-1), m_shouldRestartCompletion(false), - m_forcedCompletion(false), + m_automaticCompletion(false), m_completionOperator(T_EOF_SYMBOL), m_objcEnabled(true) { @@ -639,19 +639,17 @@ bool CppCodeCompletion::shouldRestartCompletion() bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor) { m_editor = editor; + m_automaticCompletion = false; const int pos = editor->position(); unsigned token = T_EOF_SYMBOL; if (startOfOperator(editor, pos, &token, /*want function call=*/ true) != pos) { if (token == T_POUND) { - if (TextEditor::BaseTextEditor *edit = qobject_cast<TextEditor::BaseTextEditor *>(editor->widget())) { - QTextCursor tc(edit->document()); - tc.setPosition(pos); - return tc.positionInBlock() == 1; - } - - return false; + int line, column; + editor->convertPosition(pos, &line, &column); + if (column != 1) + return false; } return true; @@ -676,8 +674,10 @@ bool CppCodeCompletion::triggersCompletion(TextEditor::ITextEditable *editor) const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx); - if (!tk.isComment() && !tk.isLiteral()) + if (!tk.isComment() && !tk.isLiteral()) { + m_automaticCompletion = true; return true; + } } } } @@ -1759,6 +1759,9 @@ QList<TextEditor::CompletionItem> CppCodeCompletion::getCompletions() bool CppCodeCompletion::typedCharCompletes(const TextEditor::CompletionItem &item, QChar typedChar) { + if (m_automaticCompletion) + return false; + if (item.data.canConvert<QString>()) // snippet return false; @@ -1948,6 +1951,7 @@ bool CppCodeCompletion::partiallyComplete(const QList<TextEditor::CompletionItem void CppCodeCompletion::cleanup() { + m_automaticCompletion = false; m_completions.clear(); // Set empty map in order to avoid referencing old versions of the documents diff --git a/src/plugins/cpptools/cppcodecompletion.h b/src/plugins/cpptools/cppcodecompletion.h index 15ac30ab4d6..89753ce72ee 100644 --- a/src/plugins/cpptools/cppcodecompletion.h +++ b/src/plugins/cpptools/cppcodecompletion.h @@ -147,7 +147,7 @@ private: int m_startPosition; // Position of the cursor from which completion started bool m_shouldRestartCompletion; - bool m_forcedCompletion; + bool m_automaticCompletion; unsigned m_completionOperator; bool m_objcEnabled; -- GitLab