diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index fe7356366c1..251bbf92b85 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -31,6 +31,7 @@ #include "rewritererror.h" #include +#include #include namespace QmlJS { @@ -170,6 +171,7 @@ protected: // functions void setModificationGroupActive(bool active); void applyModificationGroupChanges(); void applyChanges(); + void amendQmlText(); private: //variables TextModifier *m_textModifier = nullptr; @@ -185,7 +187,8 @@ private: //variables QList m_warnings; RewriterTransaction m_removeDefaultPropertyTransaction; QString m_rewritingErrorMessage; - QString lastCorrectQmlSource; + QString m_lastCorrectQmlSource; + QTimer m_amendTimer; }; } //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 7e9c9b273d3..8d6ba3ecc84 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -53,6 +53,8 @@ RewriterView::RewriterView(DifferenceHandling differenceHandling, QObject *paren m_modelToTextMerger(new Internal::ModelToTextMerger(this)), m_textToModelMerger(new Internal::TextToModelMerger(this)) { + m_amendTimer.setSingleShot(true); + connect(&m_amendTimer, &QTimer::timeout, this, &RewriterView::amendQmlText); } RewriterView::~RewriterView() @@ -79,7 +81,7 @@ void RewriterView::modelAttached(Model *model) ModelAmender differenceHandler(m_textToModelMerger.data()); const QString qmlSource = m_textModifier->text(); if (m_textToModelMerger->load(qmlSource, differenceHandler)) - lastCorrectQmlSource = qmlSource; + m_lastCorrectQmlSource = qmlSource; } void RewriterView::modelAboutToBeDetached(Model * /*model*/) @@ -411,6 +413,18 @@ void RewriterView::applyChanges() } } +void RewriterView::amendQmlText() +{ + emitCustomNotification(StartRewriterAmend); + + const QString newQmlText = m_textModifier->text(); + + ModelAmender differenceHandler(m_textToModelMerger.data()); + if (m_textToModelMerger->load(newQmlText, differenceHandler)) + m_lastCorrectQmlSource = newQmlText; + emitCustomNotification(EndRewriterAmend); +} + Internal::ModelNodePositionStorage *RewriterView::positionStorage() const { return m_positionStorage.data(); @@ -714,22 +728,17 @@ void RewriterView::qmlTextChanged() #endif switch (m_differenceHandling) { - case Validate: { - ModelValidator differenceHandler(m_textToModelMerger.data()); - if (m_textToModelMerger->load(newQmlText, differenceHandler)) - lastCorrectQmlSource = newQmlText; - break; - } + case Validate: { + ModelValidator differenceHandler(m_textToModelMerger.data()); + if (m_textToModelMerger->load(newQmlText, differenceHandler)) + m_lastCorrectQmlSource = newQmlText; + break; + } - case Amend: - default: { - emitCustomNotification(StartRewriterAmend); - ModelAmender differenceHandler(m_textToModelMerger.data()); - if (m_textToModelMerger->load(newQmlText, differenceHandler)) - lastCorrectQmlSource = newQmlText; - emitCustomNotification(EndRewriterAmend); - break; - } + case Amend: { + m_amendTimer.start(400); + break; + } } } }