forked from qt-creator/qt-creator
Fixed cursor position in file when switching editors
When closing editor splits while the same document was visible in two editors, it could happen that the state of the closed editor survived (as opposed to sate of the editor which was still visible). This had the negative effect, that when visiting the file again, the cursor would jump to the obsolete position within the file.
This commit is contained in:
@@ -583,6 +583,24 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
|
||||
return;
|
||||
}
|
||||
|
||||
if (IEditor *e = view->currentEditor()) {
|
||||
/*
|
||||
when we are closing a view with an original editor which has
|
||||
duplicates, then make one of the duplicates the original.
|
||||
Otherwise the original would be kept around and the user might
|
||||
experience jumping to a missleading position within the file when
|
||||
visiting the file again. With the code below, the position within
|
||||
the file will be the position of the first duplicate which is still
|
||||
around.
|
||||
*/
|
||||
if (!m_d->m_editorModel->isDuplicate(e)) {
|
||||
QList<IEditor *> duplicates = m_d->m_editorModel->duplicatesFor(e);
|
||||
if (!duplicates.isEmpty()) {
|
||||
m_d->m_editorModel->makeOriginal(duplicates.first());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
emptyView(view);
|
||||
|
||||
SplitterOrView *splitterOrView = m_d->m_splitter->findView(view);
|
||||
@@ -597,10 +615,11 @@ void EditorManager::closeView(Core::Internal::EditorView *view)
|
||||
|
||||
SplitterOrView *newCurrent = splitter->findFirstView();
|
||||
if (newCurrent) {
|
||||
if (newCurrent->editor())
|
||||
activateEditor(newCurrent->view(), newCurrent->editor());
|
||||
else
|
||||
if (IEditor *e = newCurrent->editor()) {
|
||||
activateEditor(newCurrent->view(), e);
|
||||
} else {
|
||||
setCurrentView(newCurrent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user