diff --git a/src/plugins/coreplugin/editormanager/ieditor.h b/src/plugins/coreplugin/editormanager/ieditor.h index 0dac17973fe..7df42f313cd 100644 --- a/src/plugins/coreplugin/editormanager/ieditor.h +++ b/src/plugins/coreplugin/editormanager/ieditor.h @@ -59,6 +59,9 @@ public: virtual bool isDesignModePreferred() const { return false; } +signals: + void editorDuplicated(IEditor *duplicate); + private: bool m_duplicateSupported; }; diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index 533ad4d1279..d14e6c21330 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -286,6 +286,8 @@ Core::IEditor *DiffEditor::duplicate() QTC_ASSERT(view, view = editor->currentView()); editor->setupView(view); + emit editorDuplicated(editor); + return editor; } diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 35225ab3517..953c80f2f85 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -1551,6 +1551,14 @@ void FakeVimPluginPrivate::editorOpened(IEditor *editor) else return; + // Duplicated editors are not signalled by the EditorManager. Track them nevertheless. + connect(editor, &IEditor::editorDuplicated, this, [this, editor](IEditor *duplicate) { + editorOpened(duplicate); + connect(duplicate, &QObject::destroyed, this, [this, duplicate] { + m_editorToHandler.remove(duplicate); + }); + }); + auto tew = TextEditorWidget::fromEditor(editor); //qDebug() << "OPENING: " << editor << editor->widget() diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp index 7acdafda528..b7c66122383 100644 --- a/src/plugins/imageviewer/imageviewer.cpp +++ b/src/plugins/imageviewer/imageviewer.cpp @@ -189,6 +189,9 @@ Core::IEditor *ImageViewer::duplicate() other->d->imageView->createScene(); other->updateToolButtons(); other->d->ui_toolbar.labelImageSize->setText(d->ui_toolbar.labelImageSize->text()); + + emit editorDuplicated(other); + return other; } diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 05a1994c317..9e74d09eac3 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -8869,8 +8869,11 @@ BaseTextEditor *TextEditorFactoryPrivate::createEditorHelper(const TextDocumentP IEditor *BaseTextEditor::duplicate() { // Use new standard setup if that's available. - if (d->m_origin) - return d->m_origin->duplicateTextEditor(this); + if (d->m_origin) { + IEditor *dup = d->m_origin->duplicateTextEditor(this); + emit editorDuplicated(dup); + return dup; + } // If neither is sufficient, you need to implement 'YourEditor::duplicate'. QTC_CHECK(false);