diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index e37b0b104b7..5542f4d755e 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -9,8 +9,9 @@ #include #include -#include #include +#include +#include #include @@ -197,6 +198,9 @@ void SyntaxHighlighterPrivate::reformatBlocks(int from, int charsRemoved, int ch QList vecRes; while (block.isValid() && (block.position() < endPosition || forceHighlightOfNextBlock)) { + if (QThread::currentThread()->isInterruptionRequested()) + break; + const int stateBeforeHighlight = block.userState(); reformatBlock(block, from, charsRemoved, charsAdded); diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.cpp b/src/plugins/texteditor/syntaxhighlighterrunner.cpp index c94e6a039e3..f99aeaa1430 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.cpp +++ b/src/plugins/texteditor/syntaxhighlighterrunner.cpp @@ -266,6 +266,7 @@ ThreadedSyntaxHighlighterRunner::ThreadedSyntaxHighlighterRunner(SyntaxHighLight ThreadedSyntaxHighlighterRunner::~ThreadedSyntaxHighlighterRunner() { + m_thread.requestInterruption(); m_thread.quit(); m_thread.wait(); } diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 00138921ef7..320eef4b6f1 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -62,6 +62,12 @@ public: { } + ~TextDocumentPrivate() + { + if (m_highlighterRunner) + m_highlighterRunner->deleteLater(); + } + MultiTextCursor indentOrUnindent(const MultiTextCursor &cursor, bool doIndent, const TabSettings &tabSettings); void resetRevisions(); void updateRevisions();