diff --git a/libmscore/cmd.cpp b/libmscore/cmd.cpp index 559b40793bebc..4b768c6c21783 100644 --- a/libmscore/cmd.cpp +++ b/libmscore/cmd.cpp @@ -277,11 +277,9 @@ void Score::update(bool resetCmdState) CmdState& cs = ms->cmdState(); ms->deletePostponed(); if (cs.layoutRange()) { - cs.lock(); for (Score* s : ms->scoreList()) s->doLayoutRange(cs.startTick(), cs.endTick()); updateAll = true; - cs.unlock(); } } diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index dfd43bbb20958..62b7b547e9d9f 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -4334,12 +4334,25 @@ void Score::doLayout() doLayoutRange(Fraction(0,1), Fraction(-1,1)); } +//--------------------------------------------------------- +// CmdStateLocker +//--------------------------------------------------------- + +class CmdStateLocker { + Score* score; + public: + CmdStateLocker(Score* s) : score(s) { score->cmdState().lock(); } + ~CmdStateLocker() { score->cmdState().unlock(); } + }; + //--------------------------------------------------------- // doLayoutRange //--------------------------------------------------------- void Score::doLayoutRange(const Fraction& st, const Fraction& et) { + CmdStateLocker cmdStateLocker(this); + Fraction stick(st); Fraction etick(et); Q_ASSERT(!(stick == Fraction(-1,1) && etick == Fraction(-1,1)));