Commit 033ad887 authored by Erik Verbruggen's avatar Erik Verbruggen Committed by Nikolai Kosjar

C++: handle file type changes for choosing highlighters.

If the file type (mime type) of an editor changes, it might need a
different kind of highlighter/highlighting-support.

Change-Id: I470dbf69e71856c9593d201416c4d4bd2958aaec
Reviewed-by: default avatarNikolai Kosjar <nikolai.kosjar@digia.com>
parent dc4822d1
......@@ -1166,7 +1166,7 @@ void CPPEditorWidget::finishHighlightSymbolUsages()
if (editorRevision() != m_highlightRevision)
return; // outdated
else if (m_highlighter.isCanceled())
if (m_highlighter.isCanceled())
return; // aborted
TextEditor::SyntaxHighlighter *highlighter = baseTextDocument()->syntaxHighlighter();
......@@ -1174,11 +1174,6 @@ void CPPEditorWidget::finishHighlightSymbolUsages()
TextEditor::SemanticHighlighter::clearExtraAdditionalFormatsUntilEnd(
highlighter, m_highlighter);
if (m_modelManager)
m_modelManager->setExtraDiagnostics(m_lastSemanticInfo.doc->fileName(),
QLatin1String("CppEditor.SemanticsDiagnostics"),
m_lastSemanticInfo.doc->diagnosticMessages());
}
void CPPEditorWidget::switchDeclarationDefinition(bool inNextSplit)
......
......@@ -115,16 +115,10 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
, m_cachedContentsEditorRevision(-1)
, m_initialized(false)
, m_lastHighlightRevision(0)
, m_highlightingSupport(modelManager->highlightingSupport(textEditor))
{
connect(m_modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)),
this, SLOT(onDocumentUpdated(CPlusPlus::Document::Ptr)));
if (m_highlightingSupport && m_highlightingSupport->requiresSemanticInfo()) {
connect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
this, SLOT(startHighlighting()));
}
m_updateDocumentTimer = new QTimer(this);
m_updateDocumentTimer->setSingleShot(true);
m_updateDocumentTimer->setInterval(m_updateDocumentInterval);
......@@ -139,7 +133,8 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
connect(m_textEditor, SIGNAL(contentsChanged()), this, SLOT(updateDocument()));
connect(this, SIGNAL(diagnosticsChanged()), this, SLOT(onDiagnosticsChanged()));
updateDocument();
connect(m_textEditor->document(), SIGNAL(mimeTypeChanged()),
this, SLOT(onMimeTypeChanged()));
}
CppEditorSupport::~CppEditorSupport()
......@@ -486,3 +481,19 @@ void CppEditorSupport::recalculateSemanticInfoDetached_helper(QFutureInterface<v
TLDProc tldProc(future);
recalculateSemanticInfoNow(source, true, &tldProc);
}
void CppEditorSupport::onMimeTypeChanged()
{
m_highlighter.cancel();
m_highlighter.waitForFinished();
m_highlightingSupport.reset(m_modelManager->highlightingSupport(m_textEditor));
disconnect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
this, SLOT(startHighlighting()));
if (m_highlightingSupport && m_highlightingSupport->requiresSemanticInfo())
connect(this, SIGNAL(semanticInfoUpdated(CppTools::SemanticInfo)),
this, SLOT(startHighlighting()));
updateDocumentNow();
}
......@@ -119,6 +119,8 @@ signals:
void highlighterStarted(QFuture<TextEditor::HighlightingResult> *, unsigned revision);
private slots:
void onMimeTypeChanged();
void updateDocument();
void updateDocumentNow();
......
......@@ -113,7 +113,10 @@ QString BaseTextDocument::mimeType() const
void BaseTextDocument::setMimeType(const QString &mt)
{
d->m_mimeType = mt;
if (d->m_mimeType != mt) {
d->m_mimeType = mt;
emit mimeTypeChanged();
}
}
void BaseTextDocument::setTypingSettings(const TypingSettings &typingSettings)
......
......@@ -105,6 +105,7 @@ public:
signals:
void titleChanged(QString title);
void mimeTypeChanged();
private:
void cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment