diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index ebe2d9aaeb5..13bc6bba30e 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -43,11 +43,10 @@ namespace TextEditor { class SyntaxHighlighterPrivate { - SyntaxHighlighter *q_ptr; + SyntaxHighlighter *q_ptr = nullptr; Q_DECLARE_PUBLIC(SyntaxHighlighter) public: - inline SyntaxHighlighterPrivate() - : q_ptr(0), rehighlightPending(false), inReformatBlocks(false) + SyntaxHighlighterPrivate() { updateFormats(TextEditorSettings::fontSettings()); } @@ -70,12 +69,13 @@ public: QVector formatChanges; QTextBlock currentBlock; - bool rehighlightPending; - bool inReformatBlocks; + bool rehighlightPending = false; + bool inReformatBlocks = false; TextDocumentLayout::FoldValidator foldValidator; QVector formats; QVector> formatCategories; QTextCharFormat whitespaceFormat; + bool noAutomaticHighlighting = false; }; static bool adjustRange(QTextLayout::FormatRange &range, int from, int charsRemoved, int charsAdded) { @@ -315,9 +315,11 @@ void SyntaxHighlighter::setDocument(QTextDocument *doc) } d->doc = doc; if (d->doc) { - connect(d->doc, &QTextDocument::contentsChange, this, &SyntaxHighlighter::reformatBlocks); - d->rehighlightPending = true; - QTimer::singleShot(0, this, &SyntaxHighlighter::delayedRehighlight); + if (!d->noAutomaticHighlighting) { + connect(d->doc, &QTextDocument::contentsChange, this, &SyntaxHighlighter::reformatBlocks); + d->rehighlightPending = true; + QTimer::singleShot(0, this, &SyntaxHighlighter::delayedRehighlight); + } d->foldValidator.setup(qobject_cast(doc->documentLayout())); } } @@ -764,6 +766,15 @@ void SyntaxHighlighter::setFontSettings(const FontSettings &fontSettings) Q_D(SyntaxHighlighter); d->updateFormats(fontSettings); } +/*! + The syntax highlighter is not anymore reacting to the text document if \a noAutmatic is + \c true. +*/ +void SyntaxHighlighter::setNoAutomaticHighlighting(bool noAutomatic) +{ + Q_D(SyntaxHighlighter); + d->noAutomaticHighlighting = noAutomatic; +} /*! Creates text format categories for the text styles themselves, so the highlighter can diff --git a/src/plugins/texteditor/syntaxhighlighter.h b/src/plugins/texteditor/syntaxhighlighter.h index 56f526f04b1..629fe29b997 100644 --- a/src/plugins/texteditor/syntaxhighlighter.h +++ b/src/plugins/texteditor/syntaxhighlighter.h @@ -70,6 +70,8 @@ public: // Don't call in constructors of derived classes virtual void setFontSettings(const TextEditor::FontSettings &fontSettings); + void setNoAutomaticHighlighting(bool noAutomatic); + public slots: void rehighlight(); void rehighlightBlock(const QTextBlock &block);