forked from qt-creator/qt-creator
QmlJSEditor: avoid jumping cursor while editing
Writing a property made the cursor jumped to the beginning. Now we only set the cursor if the textedit has not the focus and no code completion open. Change-Id: I7e5d41d5f7f9d75ebc90506d276ccaeb193c64b2 Task-number: QTCREATORBUG-15680 Task-number: QTCREATORBUG-17413 Reviewed-by: Marco Benelli <marco.benelli@qt.io> Reviewed-by: Robert Loehning <robert.loehning@qt.io>
This commit is contained in:
committed by
Robert Loehning
parent
c643095f17
commit
76dc24c3b7
@@ -218,6 +218,11 @@ void QmlJSEditorWidget::modificationChanged(bool changed)
|
|||||||
m_modelManager->fileChangedOnDisk(textDocument()->filePath().toString());
|
m_modelManager->fileChangedOnDisk(textDocument()->filePath().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QmlJSEditorWidget::isOutlineCursorChangesBlocked()
|
||||||
|
{
|
||||||
|
return hasFocus() || m_blockOutLineCursorChanges;
|
||||||
|
}
|
||||||
|
|
||||||
void QmlJSEditorWidget::jumpToOutlineElement(int /*index*/)
|
void QmlJSEditorWidget::jumpToOutlineElement(int /*index*/)
|
||||||
{
|
{
|
||||||
QModelIndex index = m_outlineCombo->view()->currentIndex();
|
QModelIndex index = m_outlineCombo->view()->currentIndex();
|
||||||
@@ -808,6 +813,7 @@ void QmlJSEditorWidget::showContextPane()
|
|||||||
|
|
||||||
void QmlJSEditorWidget::contextMenuEvent(QContextMenuEvent *e)
|
void QmlJSEditorWidget::contextMenuEvent(QContextMenuEvent *e)
|
||||||
{
|
{
|
||||||
|
m_blockOutLineCursorChanges = true;
|
||||||
QPointer<QMenu> menu(new QMenu(this));
|
QPointer<QMenu> menu(new QMenu(this));
|
||||||
|
|
||||||
QMenu *refactoringMenu = new QMenu(tr("Refactoring"), menu);
|
QMenu *refactoringMenu = new QMenu(tr("Refactoring"), menu);
|
||||||
@@ -852,6 +858,7 @@ void QmlJSEditorWidget::contextMenuEvent(QContextMenuEvent *e)
|
|||||||
|
|
||||||
menu->exec(e->globalPos());
|
menu->exec(e->globalPos());
|
||||||
delete menu;
|
delete menu;
|
||||||
|
m_blockOutLineCursorChanges = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QmlJSEditorWidget::event(QEvent *e)
|
bool QmlJSEditorWidget::event(QEvent *e)
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ public:
|
|||||||
|
|
||||||
QModelIndex outlineModelIndex();
|
QModelIndex outlineModelIndex();
|
||||||
void updateOutlineIndexNow();
|
void updateOutlineIndexNow();
|
||||||
|
bool isOutlineCursorChangesBlocked();
|
||||||
|
|
||||||
TextEditor::AssistInterface *createAssistInterface(TextEditor::AssistKind assistKind,
|
TextEditor::AssistInterface *createAssistInterface(TextEditor::AssistKind assistKind,
|
||||||
TextEditor::AssistReason reason) const override;
|
TextEditor::AssistReason reason) const override;
|
||||||
@@ -121,6 +122,7 @@ private:
|
|||||||
QTimer m_contextPaneTimer;
|
QTimer m_contextPaneTimer;
|
||||||
QComboBox *m_outlineCombo;
|
QComboBox *m_outlineCombo;
|
||||||
QModelIndex m_outlineModelIndex;
|
QModelIndex m_outlineModelIndex;
|
||||||
|
bool m_blockOutLineCursorChanges = false;
|
||||||
QmlJS::ModelManagerInterface *m_modelManager = nullptr;
|
QmlJS::ModelManagerInterface *m_modelManager = nullptr;
|
||||||
|
|
||||||
QmlJS::IContextPane *m_contextPane = nullptr;
|
QmlJS::IContextPane *m_contextPane = nullptr;
|
||||||
|
|||||||
@@ -195,27 +195,29 @@ void QmlJSOutlineWidget::updateSelectionInText(const QItemSelection &selection)
|
|||||||
|
|
||||||
void QmlJSOutlineWidget::updateTextCursor(const QModelIndex &index)
|
void QmlJSOutlineWidget::updateTextCursor(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
QModelIndex sourceIndex = m_filterModel->mapToSource(index);
|
if (!m_editor->isOutlineCursorChangesBlocked()) {
|
||||||
AST::SourceLocation location
|
QModelIndex sourceIndex = m_filterModel->mapToSource(index);
|
||||||
= m_editor->qmlJsEditorDocument()->outlineModel()->sourceLocation(sourceIndex);
|
AST::SourceLocation location
|
||||||
|
= m_editor->qmlJsEditorDocument()->outlineModel()->sourceLocation(sourceIndex);
|
||||||
|
|
||||||
if (!location.isValid())
|
if (!location.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const QTextBlock lastBlock = m_editor->document()->lastBlock();
|
const QTextBlock lastBlock = m_editor->document()->lastBlock();
|
||||||
const uint textLength = lastBlock.position() + lastBlock.length();
|
const uint textLength = lastBlock.position() + lastBlock.length();
|
||||||
if (location.offset >= textLength)
|
if (location.offset >= textLength)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Core::EditorManager::cutForwardNavigationHistory();
|
Core::EditorManager::cutForwardNavigationHistory();
|
||||||
Core::EditorManager::addCurrentPositionToNavigationHistory();
|
Core::EditorManager::addCurrentPositionToNavigationHistory();
|
||||||
|
|
||||||
QTextCursor textCursor = m_editor->textCursor();
|
QTextCursor textCursor = m_editor->textCursor();
|
||||||
m_blockCursorSync = true;
|
m_blockCursorSync = true;
|
||||||
textCursor.setPosition(location.offset);
|
textCursor.setPosition(location.offset);
|
||||||
m_editor->setTextCursor(textCursor);
|
m_editor->setTextCursor(textCursor);
|
||||||
m_editor->centerCursor();
|
m_editor->centerCursor();
|
||||||
m_blockCursorSync = false;
|
m_blockCursorSync = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlJSOutlineWidget::focusEditor()
|
void QmlJSOutlineWidget::focusEditor()
|
||||||
|
|||||||
Reference in New Issue
Block a user