diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 84ad277c06215862981107642430f57bc6922f20..2616924ffc2990c93bd501cda6f22bd46e6b2009 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -132,6 +132,8 @@ private: // -------------------- const QChar CodeAssistantPrivate::m_null; +static const int AutomaticProposalTimerInterval = 400; + CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) : m_q(assistant) , m_textEditor(0) @@ -142,7 +144,7 @@ CodeAssistantPrivate::CodeAssistantPrivate(CodeAssistant *assistant) , m_settings(TextEditorSettings::instance()->completionSettings()) { m_automaticProposalTimer.setSingleShot(true); - m_automaticProposalTimer.setInterval(400); + m_automaticProposalTimer.setInterval(AutomaticProposalTimerInterval); connect(&m_automaticProposalTimer, SIGNAL(timeout()), this, SLOT(automaticProposalTimeout())); connect(TextEditorSettings::instance(), @@ -248,7 +250,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, m_requestRunner = new ProcessorRunner; connect(m_requestRunner, SIGNAL(finished()), this, SLOT(proposalComputed())); connect(m_requestRunner, SIGNAL(finished()), this, SLOT(finalizeRequest())); - assistInterface->detach(m_requestRunner); + assistInterface->prepareForAsyncUse(); m_requestRunner->setReason(reason); m_requestRunner->setProcessor(processor); m_requestRunner->setAssistInterface(assistInterface); diff --git a/src/plugins/texteditor/codeassist/defaultassistinterface.cpp b/src/plugins/texteditor/codeassist/defaultassistinterface.cpp index f6fccae70c8a1b24c7ab0bf63d18b42ce1a4e56b..325549db61b5d03350ddac6db6a1f1cc861a2660 100644 --- a/src/plugins/texteditor/codeassist/defaultassistinterface.cpp +++ b/src/plugins/texteditor/codeassist/defaultassistinterface.cpp @@ -42,7 +42,7 @@ DefaultAssistInterface::DefaultAssistInterface(QTextDocument *textDocument, Core::IDocument *document, AssistReason reason) : m_textDocument(textDocument) - , m_detached(false) + , m_isAsync(false) , m_position(position) , m_document(document) , m_reason(reason) @@ -50,7 +50,7 @@ DefaultAssistInterface::DefaultAssistInterface(QTextDocument *textDocument, DefaultAssistInterface::~DefaultAssistInterface() { - if (m_detached) + if (m_isAsync) delete m_textDocument; } @@ -64,11 +64,17 @@ QString DefaultAssistInterface::textAt(int pos, int length) const return Convenience::textAt(QTextCursor(m_textDocument), pos, length); } -void DefaultAssistInterface::detach(QThread *destination) +void DefaultAssistInterface::prepareForAsyncUse() { - m_textDocument = m_textDocument->clone(); - m_textDocument->moveToThread(destination); - m_detached = true; + m_text = m_textDocument->toPlainText(); + m_textDocument = 0; + m_isAsync = true; +} + +void DefaultAssistInterface::recreateTextDocument() +{ + m_textDocument = new QTextDocument(m_text); + m_text = QString(); } AssistReason DefaultAssistInterface::reason() const diff --git a/src/plugins/texteditor/codeassist/defaultassistinterface.h b/src/plugins/texteditor/codeassist/defaultassistinterface.h index 27e72ac3ba476160a197edee261e187d4da8e079..68ef4b7b51546dba4765379e2980a4eb618a24d4 100644 --- a/src/plugins/texteditor/codeassist/defaultassistinterface.h +++ b/src/plugins/texteditor/codeassist/defaultassistinterface.h @@ -48,15 +48,17 @@ public: virtual QString textAt(int position, int length) const; virtual const Core::IDocument *document() const { return m_document; } virtual QTextDocument *textDocument() const { return m_textDocument; } - virtual void detach(QThread *destination); + virtual void prepareForAsyncUse(); + virtual void recreateTextDocument(); virtual AssistReason reason() const; private: QTextDocument *m_textDocument; - bool m_detached; + bool m_isAsync; int m_position; Core::IDocument *m_document; AssistReason m_reason; + QString m_text; }; } // TextEditor diff --git a/src/plugins/texteditor/codeassist/iassistinterface.h b/src/plugins/texteditor/codeassist/iassistinterface.h index 50fdf0ab70e80792edef08b371596ddc1d2c7082..17d91681ac0180732155da31cbc68a2d1801e7b7 100644 --- a/src/plugins/texteditor/codeassist/iassistinterface.h +++ b/src/plugins/texteditor/codeassist/iassistinterface.h @@ -58,7 +58,8 @@ public: virtual QString textAt(int position, int length) const = 0; virtual const Core::IDocument *document() const = 0; virtual QTextDocument *textDocument() const = 0; - virtual void detach(QThread *destination) = 0; + virtual void prepareForAsyncUse() = 0; + virtual void recreateTextDocument() = 0; virtual AssistReason reason() const = 0; }; diff --git a/src/plugins/texteditor/codeassist/runner.cpp b/src/plugins/texteditor/codeassist/runner.cpp index 494244eb972742235b4e18d6d28ca9d4f5cf8090..b8d9dbfa4a9cbd782b5558c53f58c9fba6f0f527 100644 --- a/src/plugins/texteditor/codeassist/runner.cpp +++ b/src/plugins/texteditor/codeassist/runner.cpp @@ -60,6 +60,7 @@ void ProcessorRunner::setProcessor(IAssistProcessor *computer) void ProcessorRunner::run() { + m_interface->recreateTextDocument(); m_proposal = m_processor->perform(m_interface); }