fix #30041
This commit is contained in:
parent
212898437c
commit
8547e27734
4 changed files with 10 additions and 24 deletions
|
@ -300,7 +300,7 @@ Element* KeySig::drop(const DropData& data)
|
|||
}
|
||||
else {
|
||||
// apply to all staves:
|
||||
foreach(Staff* s, score()->staves())
|
||||
foreach(Staff* s, score()->rootScore()->staves())
|
||||
score()->undoChangeKeySig(s, tick(), k.key());
|
||||
}
|
||||
return this;
|
||||
|
|
|
@ -1783,15 +1783,18 @@ void Score::createMMRests()
|
|||
ns = mmr->undoGetSegment(Segment::Type::KeySig, m->tick());
|
||||
for (int staffIdx = 0; staffIdx < _staves.size(); ++staffIdx) {
|
||||
int track = staffIdx * VOICES;
|
||||
KeySig* ts = static_cast<KeySig*>(cs->element(track));
|
||||
KeySig* ts = static_cast<KeySig*>(cs->element(track));
|
||||
KeySig* nts = static_cast<KeySig*>(ns->element(track));
|
||||
if (ts) {
|
||||
if (ns->element(track) == 0) {
|
||||
if (!nts) {
|
||||
KeySig* nks = ts->clone();
|
||||
nks->setParent(ns);
|
||||
undo(new AddElement(nks));
|
||||
}
|
||||
else {
|
||||
//TODO: check if same key signature
|
||||
if (nts->keySigEvent() != ts->keySigEvent()) {
|
||||
undo(new ChangeKeySig(nts, ts->keySigEvent(), nts->showCourtesy()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -736,7 +736,7 @@ Segment* Measure::findSegment(Segment::Type st, int t)
|
|||
for (s = first(); s && s->tick() < t; s = s->next())
|
||||
;
|
||||
for (; s && s->tick() == t; s = s->next()) {
|
||||
if (s->segmentType() == st)
|
||||
if (s->segmentType() & st)
|
||||
return s;
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -465,25 +465,7 @@ void Score::undoChangeKeySig(Staff* ostaff, int tick, Key key)
|
|||
lks->linkTo(nks);
|
||||
else
|
||||
lks = nks;
|
||||
}
|
||||
//
|
||||
// change all following generated keysigs
|
||||
//
|
||||
Measure* lm = measure->nextMeasure();
|
||||
for (; lm; lm = lm->nextMeasure()) {
|
||||
Segment* s = lm->findSegment(Segment::Type::KeySig | Segment::Type::KeySigAnnounce, lm->tick());
|
||||
if (!s)
|
||||
continue;
|
||||
KeySig* ks = static_cast<KeySig*>(s->element(track));
|
||||
if (!ks)
|
||||
continue;
|
||||
if (!ks->generated())
|
||||
break;
|
||||
if (ks->key() != key) {
|
||||
KeySigEvent kse = ks->keySigEvent();
|
||||
kse.setKey(key);
|
||||
undo(new ChangeKeySig(ks, kse, ks->showCourtesy()));
|
||||
}
|
||||
cmdUpdateNotes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1891,6 +1873,7 @@ void ChangeKeySig::flip()
|
|||
|
||||
keysig->setKeySigEvent(ks);
|
||||
keysig->setShowCourtesy(showCourtesy);
|
||||
keysig->measure()->setDirty();
|
||||
|
||||
int tick = keysig->segment()->tick();
|
||||
// update keys if keysig was not generated
|
||||
|
|
Loading…
Reference in a new issue