diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index ef4e3cb2f78..a1855f0b652 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -1387,12 +1387,22 @@ WriteLocker::WriteLocker(Model *model) WriteLocker::~WriteLocker() { if (!m_model->m_writeLock) - qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!"; + qWarning() << "QmlDesigner: WriterLocker out of sync!!!"; // FIXME: Enable it again Q_ASSERT(m_model->m_writeLock); m_model->m_writeLock = false; } +void WriteLocker::unlock(Model *model) +{ + model->d->m_writeLock = false; +} + +void WriteLocker::lock(Model *model) +{ + model->d->m_writeLock = true; +} + } // namespace Internal Model::Model() diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index c001e7fd6d1..e0d22621bb0 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -78,6 +78,9 @@ public: WriteLocker(ModelPrivate *model); ~WriteLocker(); + static void unlock(Model *model); + static void lock(Model *model); + private: QPointer m_model; }; diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index bb15a359b37..66438fa6d54 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -28,17 +28,18 @@ #include "texttomodelmerger.h" #include "modeltotextmerger.h" -#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include +#include #include #include @@ -799,7 +800,9 @@ void RewriterView::resetToLastCorrectQml() m_textModifier->textDocument()->undo(); m_textModifier->textDocument()->clearUndoRedoStacks(QTextDocument::RedoStack); ModelAmender differenceHandler(m_textToModelMerger.data()); + Internal::WriteLocker::unlock(model()); m_textToModelMerger->load(m_textModifier->text(), differenceHandler); + Internal::WriteLocker::lock(model()); leaveErrorState(); }