diff --git a/libmscore/cmd.cpp b/libmscore/cmd.cpp index dfa9108e58162..c00bd868569b8 100644 --- a/libmscore/cmd.cpp +++ b/libmscore/cmd.cpp @@ -553,22 +553,16 @@ Segment* Score::setNoteRest(Segment* segment, int track, NoteVal nval, Fraction // // extend slur // - Chord* e = static_cast(nr)->chord(); - int stick = 0; - Element* ee = _is.slur()->startElement(); - if (!ee) - stick = e->tick(); - else if (ee->isChordRest()) - stick = static_cast(ee)->tick(); - else if (ee->type() == Element::Type::NOTE) - stick = static_cast(ee)->chord()->tick(); - if (stick == e->tick()) { - _is.slur()->setTick(stick); - _is.slur()->setStartElement(e); - } - else { - _is.slur()->setTick2(e->tick()); - _is.slur()->setEndElement(e); + Chord* chord = static_cast(nr)->chord(); + _is.slur()->undoChangeProperty(P_ID::SPANNER_TICK2, chord->tick()); + for (Element* e : _is.slur()->linkList()) { + Slur* slur = static_cast(e); + for (Element* e : chord->linkList()) { + if (e->score() == slur->score() && e->track() == slur->track2()) { + slur->score()->undo(new ChangeSpannerElements(slur, slur->startElement(), e)); + break; + } + } } setLayoutAll(true); } diff --git a/libmscore/undo.cpp b/libmscore/undo.cpp index 998e8716ca652..90fc120b61d30 100644 --- a/libmscore/undo.cpp +++ b/libmscore/undo.cpp @@ -3337,7 +3337,7 @@ void ChangeProperty::flip() << property ; #endif - if (id == P_ID::SPANNER_TICK) + if (id == P_ID::SPANNER_TICK || id == P_ID::SPANNER_TICK2) element->score()->removeSpanner(static_cast(element)); QVariant v = element->getProperty(id); @@ -3347,7 +3347,7 @@ void ChangeProperty::flip() else element->setProperty(id, property); - if (id == P_ID::SPANNER_TICK) + if (id == P_ID::SPANNER_TICK || id == P_ID::SPANNER_TICK2) element->score()->addSpanner(static_cast(element)); property = v; propertyStyle = ps;