diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index b01aee91222..24486e803b8 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -249,6 +249,8 @@ BaseTextEditorWidget::BaseTextEditorWidget(QWidget *parent) d->visibleFoldedBlockNumber = d->suggestedVisibleFoldedBlockNumber = -1; + connect(d->m_codeAssistant.data(), SIGNAL(finished()), this, SIGNAL(assistFinished())); + connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(slotUpdateExtraAreaWidth())); connect(this, SIGNAL(modificationChanged(bool)), this, SLOT(slotModificationChanged(bool))); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(slotCursorPositionChanged())); @@ -1090,6 +1092,11 @@ void BaseTextEditorWidget::openLinkUnderCursorInNextSplit() openLink(symbolLink, !alwaysOpenLinksInNextSplit()); } +void BaseTextEditorWidget::abortAssist() +{ + d->m_codeAssistant->destroyContext(); +} + void BaseTextEditorWidget::moveLineUpDown(bool up) { QTextCursor cursor = textCursor(); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 0fb11717579..730eb7b2762 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -332,8 +332,12 @@ public slots: void openLinkUnderCursor(); void openLinkUnderCursorInNextSplit(); + /// Abort code assistant if it is running. + void abortAssist(); + signals: void changed(); + void assistFinished(); // ITextEditor void contentsChanged(); diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 878d838e289..ca2003a600a 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -101,6 +101,9 @@ public: virtual bool eventFilter(QObject *o, QEvent *e); +signals: + void finished(); + private slots: void finalizeRequest(); void proposalComputed(); @@ -251,6 +254,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())); + connect(m_requestRunner, SIGNAL(finished()), this, SIGNAL(finished())); assistInterface->prepareForAsyncUse(); m_requestRunner->setReason(reason); m_requestRunner->setProcessor(processor); @@ -487,7 +491,9 @@ bool CodeAssistantPrivate::eventFilter(QObject *o, QEvent *e) // CodeAssistant // ------------- CodeAssistant::CodeAssistant() : d(new CodeAssistantPrivate(this)) -{} +{ + connect(d, SIGNAL(finished()), SIGNAL(finished())); +} CodeAssistant::~CodeAssistant() { diff --git a/src/plugins/texteditor/codeassist/codeassistant.h b/src/plugins/texteditor/codeassist/codeassistant.h index b0307513909..5041ff9cfb5 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.h +++ b/src/plugins/texteditor/codeassist/codeassistant.h @@ -34,14 +34,18 @@ #include +#include + namespace TextEditor { class CodeAssistantPrivate; class IAssistProvider; class BaseTextEditor; -class CodeAssistant +class CodeAssistant : public QObject { + Q_OBJECT + public: CodeAssistant(); ~CodeAssistant(); @@ -55,6 +59,9 @@ public: void invoke(AssistKind assistKind, IAssistProvider *provider = 0); +signals: + void finished(); + private: CodeAssistantPrivate *d; };