From 0629a0ddda599ec4a8be2778cf7f33a6b9e0981f Mon Sep 17 00:00:00 2001 From: Eism Date: Tue, 21 Nov 2023 17:33:29 +0200 Subject: [PATCH 1/2] fixed #20130: Fixed all potential places where a crash could occur after implementing navigation for grace notes in commit 93a98ea7455e6ede7306263a0b379a7427942dc4 --- src/engraving/dom/chord.cpp | 5 ++++- src/engraving/dom/note.cpp | 5 ++++- src/engraving/dom/segment.cpp | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/engraving/dom/chord.cpp b/src/engraving/dom/chord.cpp index 7cac18df1fc9..17008d51fab0 100644 --- a/src/engraving/dom/chord.cpp +++ b/src/engraving/dom/chord.cpp @@ -2796,7 +2796,10 @@ EngravingItem* Chord::prevElement() ChordRest* next = prevChordRest(this); if (next) { - return toChord(next)->notes().back(); + if (next->isChord()) { + return toChord(next)->notes().back(); + } + return toRest(next); } } } diff --git a/src/engraving/dom/note.cpp b/src/engraving/dom/note.cpp index 93abb0d4044c..fed3b21865c6 100644 --- a/src/engraving/dom/note.cpp +++ b/src/engraving/dom/note.cpp @@ -3273,7 +3273,10 @@ EngravingItem* Note::nextElement() } else if (isGrace()) { ChordRest* next = nextChordRest(chord()); if (next) { - return toChord(next)->notes().front(); + if (next->isChord()) { + return toChord(next)->notes().front(); + } + return toRest(next); } } diff --git a/src/engraving/dom/segment.cpp b/src/engraving/dom/segment.cpp index d50142a0d66e..42cde1ef982c 100644 --- a/src/engraving/dom/segment.cpp +++ b/src/engraving/dom/segment.cpp @@ -1667,7 +1667,10 @@ EngravingItem* Segment::prevElementOfSegment(Segment* s, EngravingItem* e, staff if (!graceNotesBefore.empty()) { ChordRest* next = prevChordRest(chord); if (next) { - return toChord(next)->notes().back(); + if (next->isChord()) { + return toChord(next)->notes().back(); + } + return toRest(next); } } From d8e19228a4bcb28698114f69313966d2b31418db Mon Sep 17 00:00:00 2001 From: Eism Date: Tue, 21 Nov 2023 17:30:04 +0200 Subject: [PATCH 2/2] Move to the next segment instead of next chord/rest --- src/engraving/dom/note.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/engraving/dom/note.cpp b/src/engraving/dom/note.cpp index fed3b21865c6..9f4a8ac79a22 100644 --- a/src/engraving/dom/note.cpp +++ b/src/engraving/dom/note.cpp @@ -3270,14 +3270,6 @@ EngravingItem* Note::nextElement() if (graceNotesAfterFirstChord) { return graceNotesAfterFirstChord->notes().front(); } - } else if (isGrace()) { - ChordRest* next = nextChordRest(chord()); - if (next) { - if (next->isChord()) { - return toChord(next)->notes().front(); - } - return toRest(next); - } } if (!m_el.empty()) {