From 173e640cf8923223dd066068bd5e6eb21b6beaa2 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Tue, 10 Dec 2013 23:51:09 -0700 Subject: [PATCH] fix #23879: unlink chord symbols within score/part Don't duplicate chord symbols between linked staves within a score/part. Treat staff text similarly. --- libmscore/excerpt.cpp | 16 ++++++++++++---- libmscore/undo.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/libmscore/excerpt.cpp b/libmscore/excerpt.cpp index 079da091bf4b..5c0389587557 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 5962d46c845b..3a4668e4efd3 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);