From 305e3355502b6136dbb5ca5237804741cbf45165 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 7 Aug 2024 14:55:31 +0200 Subject: [PATCH] Debugger: Fix memory view as an editor `EditorManager::activateEditor` assumes that the editor is already known to the editor manager. Add a dedicated `EditorManager::addEditor` method for making an IEditor instance known to the editor manager and activating it (if wanted). Change-Id: I0c1632b6a3b32f54a01da0ad632fa17e2b1a850f Reviewed-by: Christian Stenger --- src/plugins/bineditor/bineditorplugin.cpp | 3 ++- .../coreplugin/editormanager/editormanager.cpp | 13 +++++++++++++ .../coreplugin/editormanager/editormanager.h | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index c8c8e7845a8..582e782107e 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -2319,8 +2319,9 @@ public: auto document = std::make_shared(); auto service = new BinEditorImpl(document); service->widget()->setWindowTitle(title); + service->document()->setPreferredDisplayName(title); if (wantsEditor) - EditorManager::activateEditor(service); + EditorManager::addEditor(service); return service; } }; diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index a13483ea430..6162d11fb38 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1420,6 +1420,8 @@ IEditor *EditorManagerPrivate::placeEditor(EditorView *view, IEditor *editor) if (IEditor *e = view->editorForDocument(editor->document())) return e; + QTC_CHECK(DocumentModel::editorsForDocument(editor->document()).contains(editor)); + const QByteArray state = editor->saveState(); if (EditorView *sourceView = viewForEditor(editor)) { // try duplication or pull editor over to new view @@ -3151,6 +3153,17 @@ IEditor *EditorManager::activateEditorForDocument(IDocument *document, OpenEdito flags); } +/*! + Makes an IEditor instance \a editor known to the EditorManager that it did + not know before, and activates it using \a flags. +*/ +void EditorManager::addEditor(IEditor *editor, OpenEditorFlags flags) +{ + QTC_ASSERT(!DocumentModel::editorsForDocument(editor->document()).contains(editor), return); + d->addEditor(editor); + activateEditor(editor, flags); +} + /*! Opens the document specified by \a filePath using the editor type \a editorId and the specified \a flags. diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 63032027139..5dd26f857c0 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -99,6 +99,8 @@ public: static void activateEditorForEntry(DocumentModel::Entry *entry, OpenEditorFlags flags = NoFlags); static IEditor *activateEditorForDocument(IDocument *document, OpenEditorFlags flags = NoFlags); + static void addEditor(IEditor *editor, OpenEditorFlags flags = NoFlags); + static bool closeDocuments(const QList &documents, bool askAboutModifiedEditors = true); static bool closeDocuments(const QList &entries); static void closeOtherDocuments(IDocument *document);