From d098016bd9a959e348e06bf65d93ac8f973b83a3 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 2 Apr 2019 14:43:22 +0200 Subject: [PATCH] QmlDesigner: Avoid jumping cursors in integrated text editor If the curser changes this should not trigger an update in the other direction. Change-Id: Ie20914f5587525f46f2941de21374f4373cec47f Reviewed-by: Tim Jenssen --- .../qmldesigner/components/texteditor/texteditorview.cpp | 5 ++++- .../qmldesigner/components/texteditor/texteditorview.h | 1 + .../qmldesigner/components/texteditor/texteditorwidget.cpp | 5 +++++ .../qmldesigner/components/texteditor/texteditorwidget.h | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp index a2bd639949f..97ff27dfd5e 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp @@ -172,7 +172,8 @@ void TextEditorView::nodeIdChanged(const ModelNode& /*node*/, const QString &/*n void TextEditorView::selectedNodesChanged(const QList &/*selectedNodeList*/, const QList &/*lastSelectedNodeList*/) { - m_widget->jumpTextCursorToSelectedModelNode(); + if (!m_errorState) + m_widget->jumpTextCursorToSelectedModelNode(); } void TextEditorView::customNotification(const AbstractView * /*view*/, const QString &identifier, const QList &/*nodeList*/, const QList &/*data*/) @@ -187,9 +188,11 @@ void TextEditorView::documentMessagesChanged(const QList &error { if (errors.isEmpty()) { m_widget->clearStatusBar(); + m_errorState = false; } else { const DocumentMessage &error = errors.constFirst(); m_widget->setStatusText(QString("%1 (Line: %2)").arg(error.description()).arg(error.line())); + m_errorState = true; } } diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.h b/src/plugins/qmldesigner/components/texteditor/texteditorview.h index 170edaaa5be..345af0052bc 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.h @@ -103,6 +103,7 @@ public: private: QPointer m_widget; Internal::TextEditorContext *m_textEditorContext; + bool m_errorState = false; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index e7c1903ca4e..d47505d70e7 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -108,15 +108,20 @@ void TextEditorWidget::updateSelectionByCursorPosition() const int cursorPosition = m_textEditor->editorWidget()->textCursor().position(); RewriterView *rewriterView = m_textEditorView->model()->rewriterView(); + m_blockRoundTrip = true; if (rewriterView) { ModelNode modelNode = rewriterView->nodeAtTextCursorPosition(cursorPosition); if (modelNode.isValid() && !m_textEditorView->isSelectedModelNode(modelNode)) m_textEditorView->setSelectedModelNode(modelNode); } + m_blockRoundTrip = false; } void TextEditorWidget::jumpTextCursorToSelectedModelNode() { + if (m_blockRoundTrip) + return; + ModelNode selectedNode; if (hasFocus()) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h index ef6f6cd110d..8f0ba40e47f 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.h @@ -72,6 +72,7 @@ private: QTimer m_updateSelectionTimer; TextEditorStatusBar *m_statusBar; bool m_blockCursorSelectionSynchronisation = false; + bool m_blockRoundTrip = false; }; } // namespace QmlDesigner