diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h index 4806bf41b97..e360736c8ba 100644 --- a/src/plugins/qmldesigner/core/include/rewriterview.h +++ b/src/plugins/qmldesigner/core/include/rewriterview.h @@ -137,7 +137,7 @@ public: QList errors() const; void clearErrors(); - void addErrors(const QList &errors); + void setErrors(const QList &errors); void addError(const Error &error); QMap extractText(const QList &nodes) const; diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp index ea754e2efa6..4308c951724 100644 --- a/src/plugins/qmldesigner/core/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp @@ -376,9 +376,9 @@ void RewriterView::clearErrors() emit errorsChanged(m_errors); } -void RewriterView::addErrors(const QList &errors) +void RewriterView::setErrors(const QList &errors) { - m_errors.append(errors); + m_errors = errors; emit errorsChanged(m_errors); } diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp index f3e0d57fbe3..3b844749e2d 100644 --- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp @@ -104,7 +104,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen QList errors; foreach (const QmlError &qmlError, doc.errors()) errors.append(RewriterView::Error(qmlError)); - m_rewriterView->addErrors(errors); + m_rewriterView->setErrors(errors); } setActive(false); diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 51c4c53981b..71a5159a31f 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -281,27 +281,30 @@ void DocumentWidget::setAutoSynchronization(bool sync) if (sync) { // text editor -> visual editor - if (!m_document->model()) { - QList errors = m_document->loadMaster(m_textBuffer.data()); + if (!document()->model()) { + // first initialization + QList errors = document()->loadMaster(m_textBuffer.data()); if (!errors.isEmpty()) { disable(errors); - } else { - connect(m_document, SIGNAL(qmlErrorsChanged(QList)), - this, SLOT(updateErrorStatus(QList))); } } - if (m_document->model() && m_document->qmlErrors().isEmpty()) { + if (document()->model() && document()->qmlErrors().isEmpty()) { // set selection to text cursor - RewriterView *rewriter = m_document->rewriterView(); + RewriterView *rewriter = document()->rewriterView(); const int cursorPos = m_textBuffer->textCursor().position(); ModelNode node = nodeForPosition(cursorPos); if (node.isValid()) { rewriter->setSelectedModelNodes(QList() << node); } + enable(); } + + connect(document(), SIGNAL(qmlErrorsChanged(QList)), + this, SLOT(updateErrorStatus(QList))); + } else { - if (m_document->model() && m_document->qmlErrors().isEmpty()) { - RewriterView *rewriter = m_document->rewriterView(); + if (document()->model() && document()->qmlErrors().isEmpty()) { + RewriterView *rewriter = document()->rewriterView(); // visual editor -> text editor ModelNode selectedNode; if (!rewriter->selectedModelNodes().isEmpty()) @@ -319,6 +322,9 @@ void DocumentWidget::setAutoSynchronization(bool sync) } } } + + disconnect(document(), SIGNAL(qmlErrorsChanged(QList)), + this, SLOT(updateErrorStatus(QList))); } } @@ -350,7 +356,7 @@ void DocumentWidget::updateErrorStatus(const QList &errors) { if (m_isDisabled && errors.isEmpty()) { enable(); - } else if (!m_isDisabled && !errors.isEmpty()) { + } else if (!errors.isEmpty()) { disable(errors); } }