diff --git a/libmscore/excerpt.cpp b/libmscore/excerpt.cpp index 079da091bf4bf..5c03895875576 100644 --- a/libmscore/excerpt.cpp +++ b/libmscore/excerpt.cpp @@ -404,10 +404,18 @@ void cloneStaff(Staff* srcStaff, Staff* dstStaff) continue; if (e->track() != srcTrack) continue; - Element* ne = e->clone(); - ne->setTrack(dstTrack); - ne->setParent(seg); - score->undoAddElement(ne); + switch (e->type()) { + // exclude certain element types + // this should be same list excluded in Score::undoAddElement() + case Element::STAFF_TEXT: + case Element::HARMONY: + continue; + default: + Element* ne = e->clone(); + ne->setTrack(dstTrack); + ne->setParent(seg); + score->undoAddElement(ne); + } } if (oe->type() == Element::CHORD) { Chord* och = static_cast(ocr); diff --git a/libmscore/undo.cpp b/libmscore/undo.cpp index 5962d46c845b1..3a4668e4efd3a 100644 --- a/libmscore/undo.cpp +++ b/libmscore/undo.cpp @@ -938,6 +938,17 @@ void Score::undoAddElement(Element* element) if (staff == ostaff) ne = element; else { + if (staff->rstaff() != ostaff->rstaff()) { + switch (element->type()) { + // exclude certain element types except on corresponding staff in part + // these should be same list excluded in cloneStaff() + case Element::STAFF_TEXT: + case Element::HARMONY: + continue; + default: + break; + } + } ne = element->linkedClone(); ne->setScore(score); ne->setSelected(false);