diff --git a/src/plugins/coco/cocolanguageclient.cpp b/src/plugins/coco/cocolanguageclient.cpp index e360b6952f6..4006a14550c 100644 --- a/src/plugins/coco/cocolanguageclient.cpp +++ b/src/plugins/coco/cocolanguageclient.cpp @@ -154,15 +154,11 @@ class CocoTextMark : public TextEditor::TextMark public: CocoTextMark(const FilePath &fileName, const CocoDiagnostic &diag, const Id &clientId) : TextEditor::TextMark(fileName, diag.range().start().line() + 1, clientId) + , m_severity(diag.cocoSeverity()) { setLineAnnotation(diag.message()); setToolTip(diag.message()); - if (optional severity = diag.cocoSeverity()) { - - const TextEditor::TextStyle style = styleForSeverity(*severity); - m_annotationColor = - TextEditor::TextEditorSettings::fontSettings().formatFor(style).foreground(); - } + updateAnnotationColor(); } QColor annotationColor() const override @@ -171,6 +167,16 @@ public: : TextEditor::TextMark::annotationColor(); } + void updateAnnotationColor() + { + if (m_severity) { + const TextEditor::TextStyle style = styleForSeverity(*m_severity); + m_annotationColor = + TextEditor::TextEditorSettings::fontSettings().formatFor(style).foreground(); + } + } + + optional m_severity; QColor m_annotationColor; }; @@ -180,10 +186,22 @@ public: CocoDiagnosticManager(Client *client) : DiagnosticManager(client) { + connect(TextEditor::TextEditorSettings::instance(), + &TextEditor::TextEditorSettings::fontSettingsChanged, + this, + &CocoDiagnosticManager::fontSettingsChanged); setExtraSelectionsId("CocoExtraSelections"); } private: + void fontSettingsChanged(const TextEditor::FontSettings &fontSettings) + { + forAllMarks([](TextEditor::TextMark *mark){ + static_cast(mark)->updateAnnotationColor(); + mark->updateMarker(); + }); + } + TextEditor::TextMark *createTextMark(const FilePath &filePath, const Diagnostic &diagnostic, bool /*isProjectFile*/) const override diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index 4ebb7f6c304..e81bda7bd8a 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -176,6 +176,14 @@ void DiagnosticManager::setExtraSelectionsId(const Utils::Id &extraSelectionsId) m_extraSelectionsId = extraSelectionsId; } +void DiagnosticManager::forAllMarks(std::function func) +{ + for (const Marks &marks : qAsConst(m_marks)) { + for (TextEditor::TextMark *mark : marks.marks) + func(mark); + } +} + void DiagnosticManager::clearDiagnostics() { for (const DocumentUri &uri : m_diagnostics.keys()) diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index aa229b91c00..282a5c3d065 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -85,6 +85,8 @@ protected: void setExtraSelectionsId(const Utils::Id &extraSelectionsId); + void forAllMarks(std::function func); + private: struct VersionedDiagnostics {