aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2024-01-29 13:43:46 +0100
committerDavid Schulz <david.schulz@qt.io>2024-01-31 13:15:44 +0000
commitd651d8b41fa2ab746dcd912b88b09dbd4af10d13 (patch)
tree81e587560e5edb3997dca413c09900fcadf4f74a /src
parent256ae21c07b48be6616d2e14608471c4b63cac1c (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.cpp5
-rw-r--r--src/plugins/texteditor/syntaxhighlighter.cpp13
-rw-r--r--src/plugins/texteditor/syntaxhighlighter.h3
-rw-r--r--src/plugins/texteditor/syntaxhighlighterrunner.cpp5
-rw-r--r--src/plugins/texteditor/syntaxhighlighterrunner.h11
-rw-r--r--src/plugins/texteditor/textdocument.cpp5
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)