From 502e1e4a70f3562f6cae494f8fb592e2e6df3f1d Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 6 Dec 2024 15:10:08 +0100 Subject: [PATCH] PE: apply project specific settings to nested text editors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: QTCREATORBUG-31875 Change-Id: I82749c43061d46c13d8ad06d4919343ee0074348 Reviewed-by: Christian Kandeler Reviewed-by: Eike Ziller Reviewed-by: André Hartmann --- .../projectexplorer/editorconfiguration.cpp | 28 +++++++++---------- .../projectexplorer/editorconfiguration.h | 5 ++-- .../projectexplorer/projectmanager.cpp | 15 ++++------ 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp index bb0cc2fe24d..f67db95cd67 100644 --- a/src/plugins/projectexplorer/editorconfiguration.cpp +++ b/src/plugins/projectexplorer/editorconfiguration.cpp @@ -58,7 +58,7 @@ struct EditorConfigurationPrivate QTextCodec *m_textCodec; QMap m_languageCodeStylePreferences; - QList m_editors; + QList m_editors; }; EditorConfiguration::EditorConfiguration() : d(std::make_unique()) @@ -230,29 +230,29 @@ void EditorConfiguration::fromMap(const Store &map) setUseGlobalSettings(map.value(kUseGlobal, d->m_useGlobal).toBool()); } -void EditorConfiguration::configureEditor(BaseTextEditor *textEditor) const +void EditorConfiguration::configureEditor(Core::IEditor *editor) const { - TextEditorWidget *widget = textEditor->editorWidget(); - if (widget) + TextEditorWidget *widget = TextEditorWidget::fromEditor(editor); + if (widget) { widget->textDocument()->setCodeStyle(codeStyle(widget->languageSettingsId())); - if (!d->m_useGlobal) { - textEditor->textDocument()->setCodec(d->m_textCodec); - if (widget) + if (!d->m_useGlobal) { + widget->textDocument()->setCodec(d->m_textCodec); switchSettings(widget); + } } - d->m_editors.append(textEditor); - connect(textEditor, &BaseTextEditor::destroyed, this, [this, textEditor]() { - d->m_editors.removeOne(textEditor); + d->m_editors.append(editor); + connect(editor, &Core::IEditor::destroyed, this, [this, editor]() { + d->m_editors.removeOne(editor); }); } -void EditorConfiguration::deconfigureEditor(BaseTextEditor *textEditor) const +void EditorConfiguration::deconfigureEditor(Core::IEditor *editor) const { - TextEditorWidget *widget = textEditor->editorWidget(); + TextEditorWidget *widget = TextEditorWidget::fromEditor(editor); if (widget) widget->textDocument()->setCodeStyle(TextEditorSettings::codeStyle(widget->languageSettingsId())); - d->m_editors.removeOne(textEditor); + d->m_editors.removeOne(editor); // TODO: what about text codec and switching settings? } @@ -391,7 +391,7 @@ void EditorConfiguration::slotAboutToRemoveProject(Project *project) if (project->editorConfiguration() != this) return; - for (BaseTextEditor *editor : std::as_const(d->m_editors)) + for (Core::IEditor *editor : std::as_const(d->m_editors)) deconfigureEditor(editor); } diff --git a/src/plugins/projectexplorer/editorconfiguration.h b/src/plugins/projectexplorer/editorconfiguration.h index 8b5aab4230a..7c7791f7cd4 100644 --- a/src/plugins/projectexplorer/editorconfiguration.h +++ b/src/plugins/projectexplorer/editorconfiguration.h @@ -29,6 +29,7 @@ class ExtraEncodingSettings; class MarginSettings; } // namespace TextEditor +namespace Core { class IEditor; } namespace Utils { class FilePath; } namespace ProjectExplorer { @@ -61,8 +62,8 @@ public: TextEditor::ICodeStylePreferences *codeStyle(Utils::Id languageId) const; QMap codeStyles() const; - void configureEditor(TextEditor::BaseTextEditor *textEditor) const; - void deconfigureEditor(TextEditor::BaseTextEditor *textEditor) const; + void configureEditor(Core::IEditor *editor) const; + void deconfigureEditor(Core::IEditor *editor) const; Utils::Store toMap() const; void fromMap(const Utils::Store &map); diff --git a/src/plugins/projectexplorer/projectmanager.cpp b/src/plugins/projectexplorer/projectmanager.cpp index f4be94de57b..70f2efb40ec 100644 --- a/src/plugins/projectexplorer/projectmanager.cpp +++ b/src/plugins/projectexplorer/projectmanager.cpp @@ -567,11 +567,9 @@ Project *ProjectManager::projectWithProjectFilePath(const FilePath &filePath) void ProjectManager::configureEditor(IEditor *editor, const FilePath &filePath) { - if (auto textEditor = qobject_cast(editor)) { - // Global settings are the default. - if (Project *project = projectForFile(filePath)) - project->editorConfiguration()->configureEditor(textEditor); - } + // Global settings are the default. + if (Project *project = projectForFile(filePath)) + project->editorConfiguration()->configureEditor(editor); } void ProjectManager::configureEditors(Project *project) @@ -580,11 +578,8 @@ void ProjectManager::configureEditors(Project *project) for (IDocument *document : documents) { if (project->isKnownFile(document->filePath())) { const QList editors = DocumentModel::editorsForDocument(document); - for (IEditor *editor : editors) { - if (auto textEditor = qobject_cast(editor)) { - project->editorConfiguration()->configureEditor(textEditor); - } - } + for (IEditor *editor : editors) + project->editorConfiguration()->configureEditor(editor); } } }