Skip to content

Commit

Permalink
Merge pull request #24205 from Nekotizimo/23936-range-keysig-timesig-…
Browse files Browse the repository at this point in the history
…clef

Fix undoing then reapplying range selections and restoring clefs/key sigs/time sigs in effect after applying them to range
  • Loading branch information
mike-spa committed Sep 24, 2024
2 parents d36cf71 + a9ce857 commit 058263c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
7 changes: 5 additions & 2 deletions src/engraving/dom/select.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -610,9 +610,12 @@ void Selection::updateSelectedElements()
return;
}

if (s2 && s2 == s2->measure()->first() && !(s2->measure()->prevMeasure() && s2->measure()->prevMeasure()->coveringMMRestOrThis())) {
if (s2 && s2 == s2->measure()->first()) {
// we want the last segment of the previous measure (unless it's part of a MMrest)
s2 = s2->prev1();
Measure* prevMeasure = s2->measure()->prevMeasure();
if (!(prevMeasure && prevMeasure != prevMeasure->coveringMMRestOrThis())) {
s2 = s2->prev1();
}
}

setRange(s1, s2, staffStart, staffEnd);
Expand Down
10 changes: 5 additions & 5 deletions src/notation/internal/notationinteraction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1848,22 +1848,22 @@ bool NotationInteraction::applyPaletteElement(mu::engraving::EngravingItem* elem
}
}
if (m2 || e2) {
// restore original clef/keysig/timesig
// restore clef/keysig/timesig that was in effect at end of selection
mu::engraving::Staff* staff = score->staff(i);
mu::engraving::Fraction tick1 = sel.startSegment()->tick();
mu::engraving::Fraction tick2 = sel.endSegment()->tick();
mu::engraving::EngravingItem* oelement = nullptr;
switch (element->type()) {
case mu::engraving::ElementType::CLEF:
{
mu::engraving::Clef* oclef = engraving::Factory::createClef(score->dummy()->segment());
oclef->setClefType(staff->clef(tick1));
oclef->setClefType(staff->clef(tick2));
oelement = oclef;
break;
}
case mu::engraving::ElementType::KEYSIG:
{
mu::engraving::KeySig* okeysig = engraving::Factory::createKeySig(score->dummy()->segment());
okeysig->setKeySigEvent(staff->keySigEvent(tick1));
okeysig->setKeySigEvent(staff->keySigEvent(tick2));
Key ck = okeysig->concertKey();
okeysig->setKey(ck);
oelement = okeysig;
Expand All @@ -1872,7 +1872,7 @@ bool NotationInteraction::applyPaletteElement(mu::engraving::EngravingItem* elem
case mu::engraving::ElementType::TIMESIG:
{
mu::engraving::TimeSig* otimesig = engraving::Factory::createTimeSig(score->dummy()->segment());
otimesig->setFrom(staff->timeSig(tick1));
otimesig->setFrom(staff->timeSig(tick2));
oelement = otimesig;
break;
}
Expand Down

0 comments on commit 058263c

Please sign in to comment.