From 5dc0ac732444c9235ae467f1cee6ddc2fea3794b Mon Sep 17 00:00:00 2001 From: Nikita Baryshnikov Date: Tue, 21 Apr 2015 13:57:10 +0300 Subject: [PATCH] EditorManager: do not show endless errors when there are removed files in navigation history. Steps to reproduce: Open file in editor. Remove it outside the qtc. Activate qtc. "File Was Removed" prompted - agree to remove it. Navigate back(alt left two times). Qtc goes crazy with endless Error messages like a "Cannot open / path/to/that/dead.file for reading: No such file or directory" Change-Id: I10a4c178ba83a8dc769895830b6f76da2e676556 Reviewed-by: Eike Ziller --- .../coreplugin/editormanager/editorview.cpp | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 85fb0baf324..447c337ff9b 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -48,6 +48,7 @@ #include +#include #include #include #include @@ -511,6 +512,13 @@ void EditorView::updateCurrentPositionInNavigationHistory() location->state = QVariant(editor->saveState()); } +namespace { +static inline bool fileNameWasRemoved(const QString &fileName) +{ + return !fileName.isEmpty() && !QFileInfo(fileName).exists(); +} +} // End of anonymous namespace + void EditorView::goBackInNavigationHistory() { updateCurrentPositionInNavigationHistory(); @@ -523,6 +531,10 @@ void EditorView::goBackInNavigationHistory() EditorManager::IgnoreNavigationHistory); } if (!editor) { + if (fileNameWasRemoved(location.fileName)) { + m_navigationHistory.removeAt(m_currentNavigationHistoryPosition); + continue; + } editor = EditorManagerPrivate::openEditor(this, location.fileName, location.id, EditorManager::IgnoreNavigationHistory); if (!editor) { @@ -542,22 +554,30 @@ void EditorView::goForwardInNavigationHistory() if (m_currentNavigationHistoryPosition >= m_navigationHistory.size()-1) return; ++m_currentNavigationHistoryPosition; - EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition); - IEditor *editor = 0; - if (location.document) { - editor = EditorManagerPrivate::activateEditorForDocument(this, location.document, - EditorManager::IgnoreNavigationHistory); - } - if (!editor) { - editor = EditorManagerPrivate::openEditor(this, location.fileName, location.id, - EditorManager::IgnoreNavigationHistory); - if (!editor) { - //TODO - qDebug() << Q_FUNC_INFO << "can't open file" << location.fileName; - return; + while (m_currentNavigationHistoryPosition < m_navigationHistory.size()) { + IEditor *editor = 0; + EditLocation location = m_navigationHistory.at(m_currentNavigationHistoryPosition); + if (location.document) { + editor = EditorManagerPrivate::activateEditorForDocument(this, location.document, + EditorManager::IgnoreNavigationHistory); } + if (!editor) { + if (fileNameWasRemoved(location.fileName)) { + m_navigationHistory.removeAt(m_currentNavigationHistoryPosition); + continue; + } + editor = EditorManagerPrivate::openEditor(this, location.fileName, location.id, + EditorManager::IgnoreNavigationHistory); + if (!editor) { + m_navigationHistory.removeAt(m_currentNavigationHistoryPosition); + continue; + } + } + editor->restoreState(location.state.toByteArray()); + break; } - editor->restoreState(location.state.toByteArray()); + if (m_currentNavigationHistoryPosition >= m_navigationHistory.size()) + m_currentNavigationHistoryPosition = qMax(m_navigationHistory.size() - 1, 0); updateNavigatorActions(); }