diff options
author | David Schulz <david.schulz@qt.io> | 2024-01-29 13:43:46 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2024-01-31 13:15:44 +0000 |
commit | d651d8b41fa2ab746dcd912b88b09dbd4af10d13 (patch) | |
tree | 81e587560e5edb3997dca413c09900fcadf4f74a /src | |
parent | 256ae21c07b48be6616d2e14608471c4b63cac1c (diff) |
GlslEditor: Fix crash in GlslHighlighter
since the async highlighter implementation the parent is not a
TextDocument anymore, but a QTextDocument. Pass the required mimeType
via the SyntaxHighlighterRunner now to the SyntaxHighlighter.
Change-Id: I0afcbe68719195649b4b7040416a743cb01214df
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/glsleditor/glslhighlighter.cpp | 5 | ||||
-rw-r--r-- | src/plugins/texteditor/syntaxhighlighter.cpp | 13 | ||||
-rw-r--r-- | src/plugins/texteditor/syntaxhighlighter.h | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/syntaxhighlighterrunner.cpp | 5 | ||||
-rw-r--r-- | src/plugins/texteditor/syntaxhighlighterrunner.h | 11 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.cpp | 5 |
6 files changed, 31 insertions, 11 deletions
diff --git a/src/plugins/glsleditor/glslhighlighter.cpp b/src/plugins/glsleditor/glslhighlighter.cpp index 3c6028e0dc3..7c25b0abbf3 100644 --- a/src/plugins/glsleditor/glslhighlighter.cpp +++ b/src/plugins/glsleditor/glslhighlighter.cpp @@ -47,10 +47,7 @@ void GlslHighlighter::highlightBlock(const QString &text) lex.setState(state); lex.setScanKeywords(false); lex.setScanComments(true); - const int variant = languageVariant(parent() - ? static_cast<TextDocument*>(parent())->mimeType() - : QString()); - lex.setVariant(variant); + lex.setVariant(languageVariant(mimeType())); int initialState = state; diff --git a/src/plugins/texteditor/syntaxhighlighter.cpp b/src/plugins/texteditor/syntaxhighlighter.cpp index 5542f4d755e..8c9cc194371 100644 --- a/src/plugins/texteditor/syntaxhighlighter.cpp +++ b/src/plugins/texteditor/syntaxhighlighter.cpp @@ -61,6 +61,7 @@ public: QList<std::pair<int,TextStyle>> formatCategories; QTextCharFormat whitespaceFormat; bool noAutomaticHighlighting = false; + QString mimeType; }; static bool adjustRange(QTextLayout::FormatRange &range, int from, int charsDelta) @@ -364,6 +365,18 @@ QTextDocument *SyntaxHighlighter::document() const return d->doc; } +void SyntaxHighlighter::setMimeType(const QString &mimeType) +{ + Q_D(SyntaxHighlighter); + d->mimeType = mimeType; +} + +QString SyntaxHighlighter::mimeType() const +{ + Q_D(const SyntaxHighlighter); + return d->mimeType; +} + /*! \since 4.2 diff --git a/src/plugins/texteditor/syntaxhighlighter.h b/src/plugins/texteditor/syntaxhighlighter.h index bbbade3da24..dbd57a45884 100644 --- a/src/plugins/texteditor/syntaxhighlighter.h +++ b/src/plugins/texteditor/syntaxhighlighter.h @@ -44,6 +44,9 @@ public: void setDocument(QTextDocument *doc); QTextDocument *document() const; + void setMimeType(const QString &mimeType); + QString mimeType() const; + static QList<QColor> generateColors(int n, const QColor &background); // Don't call in constructors of derived classes diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.cpp b/src/plugins/texteditor/syntaxhighlighterrunner.cpp index a10f20c5275..0d5e32893ee 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.cpp +++ b/src/plugins/texteditor/syntaxhighlighterrunner.cpp @@ -30,6 +30,7 @@ public: SyntaxHighlighterRunnerPrivate(SyntaxHighlighterRunner::SyntaxHighlighterCreator creator, QTextDocument *document, bool async, + const QString &mimeType, FontSettings fontSettings) { if (async) { @@ -42,6 +43,7 @@ public: m_highlighter.reset(creator()); m_highlighter->setFontSettings(fontSettings); m_highlighter->setDocument(m_document); + m_highlighter->setMimeType(mimeType); m_highlighter->setParent(m_document); connect(m_highlighter.get(), @@ -111,8 +113,9 @@ signals: SyntaxHighlighterRunner::SyntaxHighlighterRunner(SyntaxHighlighterCreator creator, QTextDocument *document, bool async, + const QString &mimeType, const TextEditor::FontSettings &fontSettings) - : d(new SyntaxHighlighterRunnerPrivate(creator, document, async, fontSettings)) + : d(new SyntaxHighlighterRunnerPrivate(creator, document, async, mimeType, fontSettings)) , m_document(document) { m_useGenericHighlighter = qobject_cast<Highlighter *>(d->m_highlighter.get()); diff --git a/src/plugins/texteditor/syntaxhighlighterrunner.h b/src/plugins/texteditor/syntaxhighlighterrunner.h index e7c8001af2f..7202ebf401d 100644 --- a/src/plugins/texteditor/syntaxhighlighterrunner.h +++ b/src/plugins/texteditor/syntaxhighlighterrunner.h @@ -24,11 +24,12 @@ class TEXTEDITOR_EXPORT SyntaxHighlighterRunner : public QObject public: using SyntaxHighlighterCreator = std::function<SyntaxHighlighter *()>; - SyntaxHighlighterRunner(SyntaxHighlighterCreator creator, - QTextDocument *document, - bool async, - const TextEditor::FontSettings &fontSettings - = TextEditorSettings::fontSettings()); + SyntaxHighlighterRunner( + SyntaxHighlighterCreator creator, + QTextDocument *document, + bool async, + const QString &mimeType, + const TextEditor::FontSettings &fontSettings = TextEditorSettings::fontSettings()); virtual ~SyntaxHighlighterRunner(); void setExtraFormats(const QMap<int, QList<QTextLayout::FormatRange>> &formats); diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 225221c4780..a60c729ed4a 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -921,7 +921,10 @@ void TextDocument::resetSyntaxHighlighter(const std::function<SyntaxHighlighter = qtcEnvironmentVariable("QTC_USE_THREADED_HIGHLIGHTER", "TRUE").toUpper() == QLatin1String("TRUE"); - d->m_highlighterRunner = new SyntaxHighlighterRunner(creator, document(), threaded && envValue); + d->m_highlighterRunner = new SyntaxHighlighterRunner(creator, + document(), + threaded && envValue, + mimeType()); } void TextDocument::cleanWhitespace(const QTextCursor &cursor) |