forked from qt-creator/qt-creator
Refactor navigation history again, put last edit position in history
Task: 240811
This commit is contained in:
@@ -501,7 +501,7 @@ void BookmarkManager::documentPrevNext(bool next)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Core::EditorManager *em = Core::EditorManager::instance();
|
Core::EditorManager *em = Core::EditorManager::instance();
|
||||||
em->addCurrentPositionToNavigationHistory(true);
|
em->addCurrentPositionToNavigationHistory();
|
||||||
if (next) {
|
if (next) {
|
||||||
if (nextLine == -1)
|
if (nextLine == -1)
|
||||||
editor->gotoLine(firstLine);
|
editor->gotoLine(firstLine);
|
||||||
@@ -513,7 +513,6 @@ void BookmarkManager::documentPrevNext(bool next)
|
|||||||
else
|
else
|
||||||
editor->gotoLine(prevLine);
|
editor->gotoLine(prevLine);
|
||||||
}
|
}
|
||||||
em->addCurrentPositionToNavigationHistory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BookmarkManager::next()
|
void BookmarkManager::next()
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ EditorManagerPrivate::EditorManagerPrivate(ICore *core, QWidget *parent) :
|
|||||||
m_goBackAction(new QAction(EditorManager::tr("Go back"), parent)),
|
m_goBackAction(new QAction(EditorManager::tr("Go back"), parent)),
|
||||||
m_goForwardAction(new QAction(EditorManager::tr("Go forward"), parent)),
|
m_goForwardAction(new QAction(EditorManager::tr("Go forward"), parent)),
|
||||||
m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
|
m_openInExternalEditorAction(new QAction(EditorManager::tr("Open in External Editor"), parent)),
|
||||||
currentNavigationHistoryPosition(-1),
|
currentNavigationHistoryPosition(0),
|
||||||
m_windowPopup(0),
|
m_windowPopup(0),
|
||||||
m_coreListener(0)
|
m_coreListener(0)
|
||||||
{
|
{
|
||||||
@@ -473,15 +473,11 @@ void EditorManager::setCurrentEditor(IEditor *editor, bool ignoreNavigationHisto
|
|||||||
setCurrentView(0);
|
setCurrentView(0);
|
||||||
if (m_d->m_currentEditor == editor)
|
if (m_d->m_currentEditor == editor)
|
||||||
return;
|
return;
|
||||||
if (m_d->m_currentEditor)
|
if (m_d->m_currentEditor && !ignoreNavigationHistory)
|
||||||
updateCurrentPositionInNavigationHistory();
|
addCurrentPositionToNavigationHistory();
|
||||||
|
|
||||||
m_d->m_currentEditor = editor;
|
m_d->m_currentEditor = editor;
|
||||||
if (editor) {
|
if (editor) {
|
||||||
bool addToHistory = (!ignoreNavigationHistory);
|
|
||||||
if (addToHistory)
|
|
||||||
addCurrentPositionToNavigationHistory(true);
|
|
||||||
|
|
||||||
if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor))
|
if (SplitterOrView *splitterOrView = m_d->m_splitter->findView(editor))
|
||||||
splitterOrView->view()->setCurrentEditor(editor);
|
splitterOrView->view()->setCurrentEditor(editor);
|
||||||
}
|
}
|
||||||
@@ -1374,17 +1370,17 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress)
|
|||||||
QByteArray state = editor->saveState();
|
QByteArray state = editor->saveState();
|
||||||
// cut existing
|
// cut existing
|
||||||
int firstIndexToRemove;
|
int firstIndexToRemove;
|
||||||
if (compress && m_d->currentNavigationHistoryPosition >= 0) {
|
if (compress && m_d->currentNavigationHistoryPosition > 0) {
|
||||||
EditorManagerPrivate::EditLocation *previousLocation =
|
EditorManagerPrivate::EditLocation *previousLocation =
|
||||||
m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition);
|
m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition-1);
|
||||||
if ((previousLocation->editor && editor == previousLocation->editor)
|
if ((previousLocation->editor && editor == previousLocation->editor)
|
||||||
|| (!fileName.isEmpty() && previousLocation->fileName == fileName)) {
|
|| (!fileName.isEmpty() && previousLocation->fileName == fileName)) {
|
||||||
firstIndexToRemove = m_d->currentNavigationHistoryPosition;
|
firstIndexToRemove = m_d->currentNavigationHistoryPosition-1;
|
||||||
} else {
|
} else {
|
||||||
firstIndexToRemove = m_d->currentNavigationHistoryPosition+1;
|
firstIndexToRemove = m_d->currentNavigationHistoryPosition;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
firstIndexToRemove = m_d->currentNavigationHistoryPosition+1;
|
firstIndexToRemove = m_d->currentNavigationHistoryPosition;
|
||||||
}
|
}
|
||||||
if (firstIndexToRemove >= 0) {
|
if (firstIndexToRemove >= 0) {
|
||||||
for (int i = m_d->m_navigationHistory.size()-1; i >= firstIndexToRemove; --i) {
|
for (int i = m_d->m_navigationHistory.size()-1; i >= firstIndexToRemove; --i) {
|
||||||
@@ -1400,17 +1396,26 @@ void EditorManager::addCurrentPositionToNavigationHistory(bool compress)
|
|||||||
location->kind = editor->kind();
|
location->kind = editor->kind();
|
||||||
location->state = QVariant(state);
|
location->state = QVariant(state);
|
||||||
m_d->m_navigationHistory.append(location);
|
m_d->m_navigationHistory.append(location);
|
||||||
m_d->currentNavigationHistoryPosition = m_d->m_navigationHistory.size()-1;
|
m_d->currentNavigationHistoryPosition = m_d->m_navigationHistory.size();
|
||||||
updateActions();
|
updateActions();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorManager::updateCurrentPositionInNavigationHistory()
|
void EditorManager::updateCurrentPositionInNavigationHistory()
|
||||||
{
|
{
|
||||||
if (!m_d->m_currentEditor
|
if (!m_d->m_currentEditor || !m_d->m_currentEditor->file())
|
||||||
|| m_d->currentNavigationHistoryPosition < 0
|
|
||||||
|| m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->editor != m_d->m_currentEditor)
|
|
||||||
return;
|
return;
|
||||||
m_d->m_navigationHistory.at(m_d->currentNavigationHistoryPosition)->state = m_d->m_currentEditor->saveState();
|
|
||||||
|
EditorManagerPrivate::EditLocation *location;
|
||||||
|
if (m_d->currentNavigationHistoryPosition < m_d->m_navigationHistory.size()) {
|
||||||
|
location = m_d->m_navigationHistory[m_d->currentNavigationHistoryPosition];
|
||||||
|
} else {
|
||||||
|
location = new EditorManagerPrivate::EditLocation;
|
||||||
|
m_d->m_navigationHistory.append(location);
|
||||||
|
}
|
||||||
|
location->editor = m_d->m_currentEditor;
|
||||||
|
location->fileName = m_d->m_currentEditor->file()->fileName();
|
||||||
|
location->kind = m_d->m_currentEditor->kind();
|
||||||
|
location->state = QVariant(m_d->m_currentEditor->saveState());
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorManager::goBackInNavigationHistory()
|
void EditorManager::goBackInNavigationHistory()
|
||||||
|
|||||||
@@ -979,9 +979,8 @@ bool CPPEditor::openEditorAt(Symbol *s)
|
|||||||
|
|
||||||
if (baseTextDocument()->fileName() == fileName) {
|
if (baseTextDocument()->fileName() == fileName) {
|
||||||
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
||||||
editorManager->addCurrentPositionToNavigationHistory(true);
|
|
||||||
gotoLine(line, column);
|
|
||||||
editorManager->addCurrentPositionToNavigationHistory();
|
editorManager->addCurrentPositionToNavigationHistory();
|
||||||
|
gotoLine(line, column);
|
||||||
setFocus();
|
setFocus();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,12 +128,11 @@ ITextEditor *BaseTextEditor::openEditorAt(const QString &fileName,
|
|||||||
const QString &editorKind)
|
const QString &editorKind)
|
||||||
{
|
{
|
||||||
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
||||||
editorManager->addCurrentPositionToNavigationHistory(true);
|
editorManager->addCurrentPositionToNavigationHistory();
|
||||||
Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, Core::EditorManager::IgnoreNavigationHistory);
|
Core::IEditor *editor = editorManager->openEditor(fileName, editorKind, Core::EditorManager::IgnoreNavigationHistory);
|
||||||
TextEditor::ITextEditor *texteditor = qobject_cast<TextEditor::ITextEditor *>(editor);
|
TextEditor::ITextEditor *texteditor = qobject_cast<TextEditor::ITextEditor *>(editor);
|
||||||
if (texteditor) {
|
if (texteditor) {
|
||||||
texteditor->gotoLine(line, column);
|
texteditor->gotoLine(line, column);
|
||||||
editorManager->addCurrentPositionToNavigationHistory();
|
|
||||||
return texteditor;
|
return texteditor;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -565,6 +564,8 @@ Core::IFile *BaseTextEditor::file()
|
|||||||
void BaseTextEditor::editorContentsChange(int position, int charsRemoved, int charsAdded)
|
void BaseTextEditor::editorContentsChange(int position, int charsRemoved, int charsAdded)
|
||||||
{
|
{
|
||||||
d->m_contentsChanged = true;
|
d->m_contentsChanged = true;
|
||||||
|
// add last edit position to history
|
||||||
|
Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(true);
|
||||||
|
|
||||||
// Keep the line numbers and the block information for the text marks updated
|
// Keep the line numbers and the block information for the text marks updated
|
||||||
if (charsRemoved != 0) {
|
if (charsRemoved != 0) {
|
||||||
|
|||||||
@@ -62,9 +62,8 @@ void LineNumberFilter::accept(FilterEntry selection) const
|
|||||||
if (editor) {
|
if (editor) {
|
||||||
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
||||||
editorManager->ensureEditorManagerVisible();
|
editorManager->ensureEditorManagerVisible();
|
||||||
editorManager->addCurrentPositionToNavigationHistory(true);
|
|
||||||
editor->gotoLine(selection.internalData.toInt());
|
|
||||||
editorManager->addCurrentPositionToNavigationHistory();
|
editorManager->addCurrentPositionToNavigationHistory();
|
||||||
|
editor->gotoLine(selection.internalData.toInt());
|
||||||
editor->widget()->setFocus();
|
editor->widget()->setFocus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,9 +265,8 @@ void VCSBaseEditor::slotDiffBrowse(int index)
|
|||||||
return;
|
return;
|
||||||
const int lineNumber = d->m_diffSections.at(index);
|
const int lineNumber = d->m_diffSections.at(index);
|
||||||
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
Core::EditorManager *editorManager = Core::EditorManager::instance();
|
||||||
editorManager->addCurrentPositionToNavigationHistory(true);
|
|
||||||
gotoLine(lineNumber + 1, 0); // TextEdit uses 1..n convention
|
|
||||||
editorManager->addCurrentPositionToNavigationHistory();
|
editorManager->addCurrentPositionToNavigationHistory();
|
||||||
|
gotoLine(lineNumber + 1, 0); // TextEdit uses 1..n convention
|
||||||
}
|
}
|
||||||
|
|
||||||
// Locate a line number in the list of diff sections.
|
// Locate a line number in the list of diff sections.
|
||||||
|
|||||||
Reference in New Issue
Block a user