diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 20af0f8f3ee2923ca7ab994a2c23f1cedc94f289..c0e56ac3a8b97d7b3c2295fbe427fd12b015c467 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -971,12 +971,7 @@ Core::IEditor *EditorManager::activateEditor(Core::Internal::EditorView *view, C if (!(flags & NoActivate)) { setCurrentEditor(editor, (flags & IgnoreNavigationHistory)); if (!(flags & NoModeSwitch)) { - const QString preferredMode = editor->preferredMode(); - if (preferredMode.isEmpty() || preferredMode == Core::Constants::MODE_EDIT) { - ensureEditorManagerVisible(); - } else { - ModeManager::instance()->activateMode(preferredMode); - } + switchToPreferedMode(); } if (isVisible()) editor->widget()->setFocus(); @@ -1255,10 +1250,22 @@ QStringList EditorManager::getOpenFileNames() const QString(), &m_d->selectedFilter); } -void EditorManager::ensureEditorManagerVisible() + +/// Empty mode == figure out the correct mode from the editor +/// forcePrefered = true, switch to the mode even if the editor is visible in another mode +/// forcePrefered = false, only switch if it is not visible +void EditorManager::switchToPreferedMode() { - if (!isVisible()) - m_d->m_core->modeManager()->activateMode(Constants::MODE_EDIT); + QString preferedMode; + // Figure out prefered mode for editor + if (m_d->m_currentEditor) + preferedMode = m_d->m_currentEditor->preferredMode(); + + if (preferedMode.isEmpty()) + preferedMode = Constants::MODE_EDIT; + + if (m_d->m_core->modeManager()->currentMode()->id() != preferedMode) + m_d->m_core->modeManager()->activateMode(preferedMode); } IEditor *EditorManager::openEditorWithContents(const QString &editorId, @@ -1613,7 +1620,6 @@ void EditorManager::goBackInNavigationHistory() { currentEditorView()->goBackInNavigationHistory(); updateActions(); - ensureEditorManagerVisible(); return; } @@ -1621,7 +1627,6 @@ void EditorManager::goForwardInNavigationHistory() { currentEditorView()->goForwardInNavigationHistory(); updateActions(); - ensureEditorManagerVisible(); } OpenEditorsWindow *EditorManager::windowPopup() const @@ -1717,7 +1722,6 @@ bool EditorManager::restoreState(const QByteArray &state) m_d->m_splitter->restoreState(splitterstates); // splitting and stuff results in focus trouble, that's why we set the focus again after restoration - ensureEditorManagerVisible(); if (m_d->m_currentEditor) { m_d->m_currentEditor->widget()->setFocus(); } else if (Core::Internal::SplitterOrView *view = currentSplitterOrView()) { diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 0dae2ae0b954c59dfdea3e60b09e28b84aa1a481..0de53d38c63f351a3cc9344770d3567b1baa6980 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -126,7 +126,7 @@ public: QStringList getOpenFileNames() const; QString getOpenWithEditorId(const QString &fileName, bool *isExternalEditor = 0) const; - void ensureEditorManagerVisible(); + void switchToPreferedMode(); bool hasEditor(const QString &fileName) const; QList<IEditor *> editorsForFileName(const QString &filename) const; QList<IEditor *> editorsForFile(IFile *file) const; diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp index 1595fd231cda234c4d39854f3e1e265ea0f73ad2..90d234560b629d390c7b235d343259d31560eb7d 100644 --- a/src/plugins/cpptools/cpptoolsplugin.cpp +++ b/src/plugins/cpptools/cpptoolsplugin.cpp @@ -170,10 +170,8 @@ void CppToolsPlugin::switchHeaderSource() Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::IEditor *editor = editorManager->currentEditor(); QString otherFile = correspondingHeaderOrSource(editor->file()->fileName()); - if (!otherFile.isEmpty()) { + if (!otherFile.isEmpty()) editorManager->openEditor(otherFile); - editorManager->ensureEditorManagerVisible(); - } } QFileInfo CppToolsPlugin::findFile(const QDir &dir, const QString &name, diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index e549e6d48328a43f0f3e44228d7e031043e0f62f..bf881a97292c97e15ca55f490aafd51a51948d51 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -679,7 +679,6 @@ Core::IEditor *GitPlugin::openSubmitEditor(const QString &fileName, const Commit Core::IEditor *editor = m_core->editorManager()->openEditor(fileName, QLatin1String(Constants::GITSUBMITEDITOR_ID)); if (Git::Constants::debug) qDebug() << Q_FUNC_INFO << fileName << editor; - m_core->editorManager()->ensureEditorManagerVisible(); GitSubmitEditor *submitEditor = qobject_cast<GitSubmitEditor*>(editor); QTC_ASSERT(submitEditor, return 0); // The actions are for some reason enabled by the context switching diff --git a/src/plugins/locator/filesystemfilter.cpp b/src/plugins/locator/filesystemfilter.cpp index 6c2d5c8422c689a1e6854ac7dbc3b63096b366a6..6ef07bdbaec0cbc784b6fe685dd74ea340dc0425 100644 --- a/src/plugins/locator/filesystemfilter.cpp +++ b/src/plugins/locator/filesystemfilter.cpp @@ -103,7 +103,6 @@ void FileSystemFilter::accept(FilterEntry selection) const return; } m_editorManager->openEditor(selection.internalData.toString()); - m_editorManager->ensureEditorManagerVisible(); } bool FileSystemFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp index 4102d8e0d179a1280b796f560b28610527a056ec..535d670e4703a053011e189d255aa7b725c9e098 100644 --- a/src/plugins/locator/opendocumentsfilter.cpp +++ b/src/plugins/locator/opendocumentsfilter.cpp @@ -103,5 +103,4 @@ void OpenDocumentsFilter::accept(FilterEntry selection) const return; } m_editorManager->openEditor(selection.internalData.toString()); - m_editorManager->ensureEditorManagerVisible(); } diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 63a8ac4292ca9a28474e242750beca081710f2e6..1b21bece0906d141da2761a31e28f761e253c44b 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -599,8 +599,6 @@ void MercurialPlugin::showCommitWidget(const QList<QPair<QString, QString> > &st return; } - core->editorManager()->ensureEditorManagerVisible(); - CommitEditor *commitEditor = qobject_cast<CommitEditor *>(editor); if (!commitEditor) { diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index c338cdd59df6b280733f095f7bf725e12b9758eb..35067f4bda8ac0628e8b1b11902350d80edeb9b3 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -674,7 +674,6 @@ Core::IEditor *PerforcePlugin::openPerforceSubmitEditor(const QString &fileName, { Core::EditorManager *editorManager = Core::EditorManager::instance(); Core::IEditor *editor = editorManager->openEditor(fileName, Constants::PERFORCE_SUBMIT_EDITOR_ID); - editorManager->ensureEditorManagerVisible(); PerforceSubmitEditor *submitEditor = static_cast<PerforceSubmitEditor*>(editor); submitEditor->restrictToProjectFiles(depotFileNames); submitEditor->registerActions(m_undoAction, m_redoAction, m_submitCurrentLogAction, m_diffSelectedFiles); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index d7a9daab089dca2559e53c5e4f157b6e56a816c8..2388f11320db20d7f1a37b29dac8ad4dca22d44a 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2116,7 +2116,6 @@ void ProjectExplorerPlugin::openFile() QTC_ASSERT(d->m_currentNode, return) Core::EditorManager *em = Core::EditorManager::instance(); em->openEditor(d->m_currentNode->path()); - em->ensureEditorManagerVisible(); } void ProjectExplorerPlugin::showInGraphicalShell() @@ -2312,7 +2311,6 @@ void ProjectExplorerPlugin::openEditorFromAction(QAction *action, const QString } em->openEditor(fileName, factory->id()); - em->ensureEditorManagerVisible(); return; } if (qVariantCanConvert<Core::IExternalEditor *>(data)) { diff --git a/src/plugins/projectexplorer/showineditortaskhandler.cpp b/src/plugins/projectexplorer/showineditortaskhandler.cpp index 8783bcd7c0625ae68ffa6d3829579f253a151f2a..fce46a94c50681c81e397dca0840e173c51d4156 100644 --- a/src/plugins/projectexplorer/showineditortaskhandler.cpp +++ b/src/plugins/projectexplorer/showineditortaskhandler.cpp @@ -56,7 +56,6 @@ void ShowInEditorTaskHandler::handle(const ProjectExplorer::Task &task) { QFileInfo fi(task.file); TextEditor::BaseTextEditor::openEditorAt(fi.canonicalFilePath(), task.line); - Core::EditorManager::instance()->ensureEditorManagerVisible(); } QAction *ShowInEditorTaskHandler::createAction(QObject *parent) diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index f14efdb6e2db9e11df082b05010b3c66fc211692..4c708a2c0ab6e727415e2d1de5f4b4c34d2b479c 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -130,7 +130,7 @@ void DocumentWarningWidget::setError(const RewriterView::Error &error) void DocumentWarningWidget::goToError() { m_designModeWidget->textEditor()->gotoLine(m_error.line(), m_error.column()); - Core::EditorManager::instance()->ensureEditorManagerVisible(); + Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT); } // ---------- DesignModeWidget diff --git a/src/plugins/texteditor/linenumberfilter.cpp b/src/plugins/texteditor/linenumberfilter.cpp index ee73f4af877457b953ef476da6c20f9168ce2c12..961c03c9e44793d64fe2b1db497fcf4c6678decd 100644 --- a/src/plugins/texteditor/linenumberfilter.cpp +++ b/src/plugins/texteditor/linenumberfilter.cpp @@ -31,6 +31,8 @@ #include "itexteditor.h" #include <coreplugin/editormanager/editormanager.h> +#include <coreplugin/coreconstants.h> +#include <coreplugin/modemanager.h> #include <QtCore/QVariant> @@ -61,10 +63,10 @@ void LineNumberFilter::accept(FilterEntry selection) const ITextEditor *editor = currentTextEditor(); if (editor) { Core::EditorManager *editorManager = Core::EditorManager::instance(); - editorManager->ensureEditorManagerVisible(); editorManager->addCurrentPositionToNavigationHistory(); editor->gotoLine(selection.internalData.toInt()); editor->widget()->setFocus(); + Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT); } } diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 83f7d7938a87cc4071784fd0beda3847678af887..fc0281c5ba155e781374c8cf3e3d7f7b4c502810 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -36,6 +36,8 @@ #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/ifile.h> #include <coreplugin/iversioncontrol.h> +#include <coreplugin/coreconstants.h> +#include <coreplugin/modemanager.h> #include <extensionsystem/pluginmanager.h> #include <projectexplorer/editorconfiguration.h> #include <projectexplorer/projectexplorer.h> @@ -634,7 +636,7 @@ void VCSBaseEditor::jumpToChangeFromDiff(QTextCursor cursor) Core::EditorManager *em = Core::EditorManager::instance(); Core::IEditor *ed = em->openEditor(fileName); - em->ensureEditorManagerVisible(); + Core::ModeManager::instance()->activateMode(Core::Constants::MODE_EDIT); if (TextEditor::ITextEditor *editor = qobject_cast<TextEditor::ITextEditor *>(ed)) editor->gotoLine(chunkStart + lineCount); }