refresh patches; drop those that really don’t apply
authormirabilos <tg@debian.org>
Sat, 25 Jul 2020 21:30:09 +0000 (23:30 +0200)
committermirabilos <mirabilos@evolvis.org>
Sat, 25 Jul 2020 21:30:09 +0000 (23:30 +0200)
63 files changed:
debian/patches/backports/01-playback-muted.diff
debian/patches/backports/02-playback-tied.diff
debian/patches/backports/03-playback-deleted.diff
debian/patches/backports/04-paste-breath.diff
debian/patches/backports/06-layout-volta.diff
debian/patches/backports/07-layout-clef-change.diff
debian/patches/backports/08-ui-undo-spacer.diff [deleted file]
debian/patches/backports/09-layout-1st-system.diff
debian/patches/backports/10-ui-undo-track.diff
debian/patches/backports/12-instr-change-name.diff [deleted file]
debian/patches/backports/14-crash-segments.diff
debian/patches/backports/15-crash-mxml.diff
debian/patches/backports/16-crash-workspace.diff
debian/patches/backports/16a-crash-qt514.diff
debian/patches/backports/17-crash-tremolo.diff
debian/patches/backports/18-crash-pianoroll.diff
debian/patches/backports/19-synth-state.diff
debian/patches/backports/21-synth-signed-char.diff
debian/patches/backports/22-crash-fermata.diff
debian/patches/backports/23-hang-startup.diff [deleted file]
debian/patches/backports/24-element-size.diff
debian/patches/backports/25-relayout-beams.diff
debian/patches/backports/26-crash-repeats.diff
debian/patches/backports/27-font-style.diff
debian/patches/backports/28-crash-del-stafftypechange.diff
debian/patches/backports/29-layout-barno-break.diff
debian/patches/backports/30-playback-fermata.diff
debian/patches/backports/31-ui-enter-slur.diff
debian/patches/backports/32-ui-enter-timesig.diff
debian/patches/backports/33-playback-articulations.diff
debian/patches/backports/33a-playback-articulations.diff
debian/patches/backports/34-crash-drag.diff
debian/patches/backports/35-ui-mixer-reset.diff
debian/patches/backports/37-crash-parts.diff
debian/patches/backports/38-ui-units.diff
debian/patches/backports/40-crash-del-hbox.diff
debian/patches/backports/41-crash-triplet.diff
debian/patches/backports/42-crash-no-score.diff [deleted file]
debian/patches/backports/43-playback-glitches.diff
debian/patches/backports/44-playback-repeats.diff [deleted file]
debian/patches/backports/46-ui-ambitus.diff
debian/patches/backports/47-ui-ambitus.diff
debian/patches/backports/48-layout-ottava.diff
debian/patches/backports/49-pitch-ottava.diff
debian/patches/backports/50-layout-divider.diff
debian/patches/backports/51-paste-hairpin.diff
debian/patches/backports/52-ui-enter-whole-note.diff
debian/patches/backports/53-ui-wtf.diff
debian/patches/backports/54-pitch-Cb.diff
debian/patches/backports/55-layout-timesig.diff
debian/patches/backports/56-layout-spatium.diff
debian/patches/backports/57-crash-fontname.diff
debian/patches/backports/58-blank-lines.diff
debian/patches/backports/59-blank-lines.diff
debian/patches/backports/60-desktopfile.diff [deleted file]
debian/patches/backports/61-desktopfile.diff
debian/patches/backports/62-measure-count.diff
debian/patches/backports/63-minimise-window.diff
debian/patches/backports/boldfonts-3.diff
debian/patches/experiments/log-collisions.diff
debian/patches/experiments/revert-restriking-patch.diff
debian/patches/experiments/statusline-concert-transposing-pitch.diff
debian/patches/series

index 73a567a..9824bbf 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #282165: Mute voice produces note that doesn't stop when overla
 
 --- a/mscore/exportmidi.cpp
 +++ b/mscore/exportmidi.cpp
-@@ -293,6 +293,8 @@ bool ExportMidi::write(QIODevice* device, bool midiExpandRepeats, bool exportRPN
+@@ -293,6 +293,8 @@ bool ExportMidi::write(QIODevice* device
                          for (auto i = events.begin(); i != events.end(); ++i) {
                                const NPlayEvent& event = i->second;
  
@@ -13,11 +13,9 @@ Description: fix #282165: Mute voice produces note that doesn't stop when overla
                                if (event.discard() == staffIdx + 1 && event.velo() > 0)
                                      // turn note off so we can restrike it in another track
                                      track.insert(pauseMap.addPauseTicks(i->first), MidiEvent(ME_NOTEON, channel,
-diff --git a/mscore/seq.cpp b/mscore/seq.cpp
-index 9d4e43b7a..b93718d6c 100644
 --- a/mscore/seq.cpp
 +++ b/mscore/seq.cpp
-@@ -515,16 +515,7 @@ void Seq::playEvent(const NPlayEvent& event, unsigned framePos)
+@@ -515,16 +515,7 @@ void Seq::playEvent(const NPlayEvent& ev
        {
        int type = event.type();
        if (type == ME_NOTEON) {
@@ -47,11 +45,10 @@ index 9d4e43b7a..b93718d6c 100644
  
  namespace Ms {
  
-@@ -163,6 +166,23 @@ NPlayEvent::NPlayEvent(BeatType beatType)
-             }
+@@ -164,6 +167,23 @@ NPlayEvent::NPlayEvent(BeatType beatType
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   isMuted
 +//---------------------------------------------------------
 +
@@ -68,9 +65,10 @@ index 9d4e43b7a..b93718d6c 100644
 +      return false;
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   dump
  //---------------------------------------------------------
 @@ -391,25 +411,26 @@ void EventMap::fixupMIDI()
  
        auto it = begin();
@@ -106,8 +104,6 @@ index 9d4e43b7a..b93718d6c 100644
                    }
  
              ++it;
-diff --git a/synthesizer/event.h b/synthesizer/event.h
-index 1c2721100..a16166a80 100644
 --- a/synthesizer/event.h
 +++ b/synthesizer/event.h
 @@ -254,6 +254,7 @@ class NPlayEvent : public PlayEvent {
index ab4f8eb..8b402da 100644 (file)
@@ -4,11 +4,10 @@ Description: fix #291146: Swing prevents midi rendering of tied notes
 
 --- a/libmscore/articulation.cpp
 +++ b/libmscore/articulation.cpp
-@@ -601,6 +601,30 @@ bool Articulation::isLuteFingering() const
-           || _symId == SymId::luteFingeringRHThird;
+@@ -602,6 +602,30 @@ bool Articulation::isLuteFingering() con
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   isOrnament
 +//---------------------------------------------------------
 +
@@ -32,14 +31,13 @@ Description: fix #291146: Swing prevents midi rendering of tied notes
 +          || _symId == SymId::ornamentPrecompSlide;
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   accessibleInfo
  //---------------------------------------------------------
-diff --git a/libmscore/articulation.h b/libmscore/articulation.h
-index cf9cc3df2..f151425b8 100644
 --- a/libmscore/articulation.h
 +++ b/libmscore/articulation.h
-@@ -139,6 +139,7 @@ class Articulation final : public Element {
+@@ -139,6 +139,7 @@ class Articulation final : public Elemen
        bool isAccent() const;
        bool isMarcato() const;
        bool isLuteFingering() const;
@@ -47,11 +45,9 @@ index cf9cc3df2..f151425b8 100644
  
        void doAutoplace();
        };
-diff --git a/libmscore/rendermidi.cpp b/libmscore/rendermidi.cpp
-index 26c0b58b5..69198d2f6 100644
 --- a/libmscore/rendermidi.cpp
 +++ b/libmscore/rendermidi.cpp
-@@ -2162,14 +2162,16 @@ void renderChordArticulation(Chord* chord, QList<NoteEventList> & ell, int & gat
+@@ -2162,14 +2162,16 @@ void renderChordArticulation(Chord* chor
  
  static bool shouldRenderNote(Note* n)
        {
index 66f6e13..0c8764b 100644 (file)
@@ -20,8 +20,6 @@ Description: fix #292851: Note still played after having been deleted.
                    }
                    break;
  
-diff --git a/libmscore/segment.cpp b/libmscore/segment.cpp
-index 59c8fbf79..e6d91e152 100644
 --- a/libmscore/segment.cpp
 +++ b/libmscore/segment.cpp
 @@ -584,6 +584,7 @@ void Segment::add(Element* el)
index bfd71d5..396f598 100644 (file)
@@ -12,7 +12,7 @@ Description: fix #291932: Copy-paste breaths & pauses causes bad layout of the f
 
 --- a/libmscore/paste.cpp
 +++ b/libmscore/paste.cpp
-@@ -395,6 +395,8 @@ bool Score::pasteStaff(XmlReader& e, Segment* dst, int dstStaff, Fraction scale)
+@@ -395,6 +395,8 @@ bool Score::pasteStaff(XmlReader& e, Seg
                                breath->setTrack(e.track());
                                Fraction tick = doScale ? (e.tick() - dstTick) * scale + dstTick : e.tick();
                                Measure* m = tick2measure(tick);
index 15d8e84..ad9db08 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #287871: volta line not drawn before start repeat
 
 --- a/libmscore/line.cpp
 +++ b/libmscore/line.cpp
-@@ -668,15 +668,15 @@ QPointF SLine::linePos(Grip grip, System** sys) const
+@@ -668,15 +668,15 @@ QPointF SLine::linePos(Grip grip, System
                          while (seg && seg->segmentType() != SegmentType::EndBarLine)
                                seg = seg->prev();
                          if (!seg || !seg->enabled()) {
@@ -24,7 +24,7 @@ Description: fix #287871: volta line not drawn before start repeat
                                Element* e = seg->element(0);
                                if (e && e->type() == ElementType::BAR_LINE) {
                                      BarLineType blt = toBarLine(e)->barLineType();
-@@ -985,7 +985,7 @@ void SLine::writeProperties(XmlWriter& xml) const
+@@ -985,7 +985,7 @@ void SLine::writeProperties(XmlWriter& x
        //
        bool modified = false;
        for (const SpannerSegment* seg : spannerSegments()) {
index 28077e4..15ada44 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #290061: no space betwene header and clef change
 
 --- a/libmscore/measure.cpp
 +++ b/libmscore/measure.cpp
-@@ -4106,7 +4106,8 @@ void Measure::computeMinWidth(Segment* s, qreal x, bool isSystemHeader)
+@@ -4133,7 +4133,8 @@ void Measure::computeMinWidth(Segment* s
              qreal w;
  
              if (ns) {
@@ -14,11 +14,9 @@ Description: fix #290061: no space betwene header and clef change
                          w = s->minHorizontalDistance(ns, true);
                          isSystemHeader = false;
                          }
-diff --git a/libmscore/segment.cpp b/libmscore/segment.cpp
-index 35982317c..0c99e1398 100644
 --- a/libmscore/segment.cpp
 +++ b/libmscore/segment.cpp
-@@ -2079,6 +2079,14 @@ qreal Segment::minHorizontalDistance(Segment* ns, bool systemHeaderGap) const
+@@ -2089,6 +2089,14 @@ qreal Segment::minHorizontalDistance(Seg
              // d = qMax(d, spatium());       // minimum distance is one spatium
              // w = qMax(w, minRight()) + d;
              }
diff --git a/debian/patches/backports/08-ui-undo-spacer.diff b/debian/patches/backports/08-ui-undo-spacer.diff
deleted file mode 100644 (file)
index 1983d24..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-Origin: vendor, commit:1ba9e83aa1959e8aa8e895bec616174b8615a832
-Author: Matt McClinch <mattmcclinch@gmail.com>
-Description: fix #291941: Changing spacer length with a mouse is not undoable
-
---- a/libmscore/spacer.cpp
-+++ b/libmscore/spacer.cpp
-@@ -127,6 +127,16 @@ void Spacer::startEdit(EditData& ed)
-       ed.curGrip = Grip::START;
-       }
-+//---------------------------------------------------------
-+//   startEditDrag
-+//---------------------------------------------------------
-+
-+void Spacer::startEditDrag(EditData& ed)
-+      {
-+      ElementEditData* eed = ed.getData(this);
-+      eed->pushProperty(Pid::SPACE);
-+      }
-+
- //---------------------------------------------------------
- //   editDrag
- //---------------------------------------------------------
-diff --git a/libmscore/spacer.h b/libmscore/spacer.h
-index ffa376a59..8c8e16a95 100644
---- a/libmscore/spacer.h
-+++ b/libmscore/spacer.h
-@@ -51,6 +51,7 @@ class Spacer final : public Element {
-       virtual void draw(QPainter*) const;
-       virtual bool isEditable() const { return true; }
-       virtual void startEdit(EditData&) override;
-+      virtual void startEditDrag(EditData&) override;
-       virtual void editDrag(EditData&) override;
-       virtual void updateGrips(EditData&) const override;
-       virtual void spatiumChanged(qreal, qreal);
index 9fcfa8f..df3bfc2 100644 (file)
@@ -13,7 +13,7 @@ Description: fix #293531: clef&key appear on second system after layout with gen
 
 --- a/libmscore/layout.cpp
 +++ b/libmscore/layout.cpp
-@@ -3437,8 +3437,9 @@ System* Score::collectSystem(LayoutContext& lc)
+@@ -3483,8 +3483,9 @@ System* Score::collectSystem(LayoutConte
                                if (!s->enabled())
                                      s->setEnabled(true);
                                }
index dd920c5..ee991b5 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #292024: chord symbols attached to fret diagrams in other stave
 
 --- a/libmscore/edit.cpp
 +++ b/libmscore/edit.cpp
-@@ -4420,7 +4420,7 @@ void Score::undoAddElement(Element* element)
+@@ -4420,7 +4420,7 @@ void Score::undoAddElement(Element* elem
                          // make harmony child of fret diagram if possible
                          if (ne->isHarmony()) {
                                for (Element* segel : segment->annotations()) {
diff --git a/debian/patches/backports/12-instr-change-name.diff b/debian/patches/backports/12-instr-change-name.diff
deleted file mode 100644 (file)
index 2dddc14..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-Origin: vendor, commit:b5be6f983105ab173d693c61e73da09d80de1e32
-Author: MarcSabatella <marc@outsideshore.com>
-Description: partial fix #88861: show current staff name after instrument change
-
---- a/libmscore/layout.cpp
-+++ b/libmscore/layout.cpp
-@@ -2970,7 +2970,8 @@ System* Score::collectSystem(LayoutContext& lc)
-             lc.startWithLongNames = lc.firstSystem && measure->sectionBreakElement()->startWithLongNames();
-             }
-       System* system = getNextSystem(lc);
--      system->setInstrumentNames(lc.startWithLongNames);
-+      int lcmTick = lc.curMeasure ? lc.curMeasure->tick() : 0;
-+      system->setInstrumentNames(lc.startWithLongNames, lcmTick);
-       qreal minWidth    = 0;
-       bool firstMeasure = true;
-diff --git a/libmscore/system.cpp b/libmscore/system.cpp
-index 6e65c9214..09bc94f43 100644
---- a/libmscore/system.cpp
-+++ b/libmscore/system.cpp
-@@ -595,7 +595,7 @@ void System::layout2()
- //   setInstrumentNames
- //---------------------------------------------------------
--void System::setInstrumentNames(bool longName)
-+void System::setInstrumentNames(bool longName, int tick)
-       {
-       //
-       // remark: add/remove instrument names is not undo/redoable
-@@ -612,10 +612,6 @@ void System::setInstrumentNames(bool longName)
-             return;
-             }
--      // TODO: ml is normally empty here, so we are unable to retrieve tick
--      // thus, staff name does not reflect current instrument
--
--      int tick = ml.empty() ? 0 : ml.front()->tick();
-       int staffIdx = 0;
-       for (SysStaff* staff : _staves) {
-             Staff* s = score()->staff(staffIdx);
-diff --git a/libmscore/system.h b/libmscore/system.h
-index 13d13d8b9..fd417045f 100644
---- a/libmscore/system.h
-+++ b/libmscore/system.h
-@@ -128,7 +128,7 @@ class System final : public Element {
-       void removeStaff(int);
-       int y2staff(qreal y) const;
--      void setInstrumentNames(bool longName);
-+      void setInstrumentNames(bool longName, int tick = 0);
-       int snap(int tick, const QPointF p) const;
-       int snapNote(int tick, const QPointF p, int staff) const;
-diff --git a/mscore/continuouspanel.cpp b/mscore/continuouspanel.cpp
-index b9e649c1b..86b8d1609 100644
---- a/mscore/continuouspanel.cpp
-+++ b/mscore/continuouspanel.cpp
-@@ -159,10 +159,10 @@ void ContinuousPanel::paint(const QRect&, QPainter& painter)
-                   Segment* parent = _score->tick2segment(tick);
-                   // Find maximum width for the staff name
--                  QList<StaffName>& staffNamesLong = currentStaff->part()->instrument()->longNames();
-+                  QList<StaffName>& staffNamesLong = currentStaff->part()->instrument(tick)->longNames();
-                   QString staffName = staffNamesLong.isEmpty() ? " " : staffNamesLong[0].name();
-                   if (staffName == "") {
--                        QList<StaffName>& staffNamesShort = currentStaff->part()->instrument()->shortNames();
-+                        QList<StaffName>& staffNamesShort = currentStaff->part()->instrument(tick)->shortNames();
-                         staffName = staffNamesShort.isEmpty() ? "" : staffNamesShort[0].name();
-                         }
-                   Text* newName = new Text(_score);
-@@ -345,10 +345,10 @@ void ContinuousPanel::paint(const QRect&, QPainter& painter)
-                   barLine.draw(&painter);
-                   // Draw the current staff name
--                  QList<StaffName>& staffNamesLong = currentStaff->part()->instrument()->longNames();
-+                  QList<StaffName>& staffNamesLong = currentStaff->part()->instrument(tick)->longNames();
-                   QString staffName = staffNamesLong.isEmpty() ? " " : staffNamesLong[0].name();
-                   if (staffName == "") {
--                        QList<StaffName>& staffNamesShort = currentStaff->part()->instrument()->shortNames();
-+                        QList<StaffName>& staffNamesShort = currentStaff->part()->instrument(tick)->shortNames();
-                         staffName = staffNamesShort.isEmpty() ? "" : staffNamesShort[0].name();
-                         }
index 444f203..ff78608 100644 (file)
@@ -5,7 +5,7 @@ Description: Fix #293460: Crash when loading file with orphan Segment tags
 
 --- a/libmscore/measure.cpp
 +++ b/libmscore/measure.cpp
-@@ -2368,7 +2368,7 @@ void Measure::readVoice(XmlReader& e, int staffIdx, bool irregular)
+@@ -2366,7 +2366,7 @@ void Measure::readVoice(XmlReader& e, in
                          }
                    startingBeam = beam;
                    }
@@ -14,11 +14,9 @@ Description: Fix #293460: Crash when loading file with orphan Segment tags
                    segment->read(e);
              else if (tag == "Ambitus") {
                    Ambitus* range = new Ambitus(score());
-diff --git a/libmscore/scorefile.cpp b/libmscore/scorefile.cpp
-index 55927c885..65fa46baf 100644
 --- a/libmscore/scorefile.cpp
 +++ b/libmscore/scorefile.cpp
-@@ -1287,7 +1287,8 @@ void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
+@@ -1286,7 +1286,8 @@ void Score::writeSegments(XmlWriter& xml
                          cr->writeTupletEnd(xml);
                          }
  
index 1eedf62..7b435fc 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #287475 - crash on open MusicXML file lacking time signature
 
 --- a/mscore/importmxmlpass1.cpp
 +++ b/mscore/importmxmlpass1.cpp
-@@ -2054,11 +2054,15 @@ void MusicXMLParserPass1::measure(const QString& partId,
+@@ -2054,11 +2054,15 @@ void MusicXMLParserPass1::measure(const
        // measure duration fixups
        mDura.reduce();
  
index bc8975e..e1c00f7 100644 (file)
@@ -5,7 +5,7 @@ Description: fix #291986: fix a crash on removing a custom workspace via menu
 
 --- a/mscore/workspace.cpp
 +++ b/mscore/workspace.cpp
-@@ -706,8 +706,10 @@ void Workspace::read(XmlReader& e)
+@@ -707,8 +707,10 @@ void Workspace::read(XmlReader& e)
                    QMenuBar* mb = mscore->menuBar();
                    const QObjectList menus(mb->children()); // need a copy
                    for (QObject* m : menus) {
@@ -18,7 +18,7 @@ Description: fix #291986: fix a crash on removing a custom workspace via menu
                          }
                    mb->clear();
                    menuToStringList.clear();
-@@ -809,8 +811,10 @@ void Workspace::readGlobalMenuBar()
+@@ -811,8 +813,10 @@ void Workspace::readGlobalMenuBar()
                                QMenuBar* mb = mscore->menuBar();
                                const QObjectList menus(mb->children()); // need a copy
                                for (QObject* m : menus) {
index 5a61023..99d9e71 100644 (file)
@@ -5,7 +5,7 @@ Description: fix #299654: Crash on startup with Qt 5.14
 
 --- a/mscore/workspace.cpp
 +++ b/mscore/workspace.cpp
-@@ -823,9 +823,10 @@ void Workspace::read(XmlReader& e)
+@@ -707,9 +707,10 @@ void Workspace::read(XmlReader& e)
                    QMenuBar* mb = mscore->menuBar();
                    const QObjectList menus(mb->children()); // need a copy
                    for (QObject* m : menus) {
@@ -19,7 +19,7 @@ Description: fix #299654: Crash on startup with Qt 5.14
                                }
                          }
                    mb->clear();
-@@ -931,9 +932,10 @@ void Workspace::readGlobalMenuBar()
+@@ -813,9 +814,10 @@ void Workspace::readGlobalMenuBar()
                                QMenuBar* mb = mscore->menuBar();
                                const QObjectList menus(mb->children()); // need a copy
                                for (QObject* m : menus) {
index 712acb7..8928cb4 100644 (file)
@@ -4,11 +4,10 @@ Description: fix #291698: ensure consistent state of two-notes tremolo after fil
 
 --- a/libmscore/layout.cpp
 +++ b/libmscore/layout.cpp
-@@ -2549,52 +2549,6 @@ void layoutDrumsetChord(Chord* c, const Drumset* drumset, const StaffType* st, q
-             }
+@@ -2550,52 +2550,6 @@ void layoutDrumsetChord(Chord* c, const
        }
  
--//---------------------------------------------------------
+ //---------------------------------------------------------
 -//   connectTremolo
 -//    Connect two-notes tremolo and update duration types
 -//    for the involved chords.
@@ -54,10 +53,11 @@ Description: fix #291698: ensure consistent state of two-notes tremolo after fil
 -            }
 -      }
 -
- //---------------------------------------------------------
+-//---------------------------------------------------------
  //   getNextMeasure
  //---------------------------------------------------------
-@@ -2670,7 +2624,7 @@ void Score::getNextMeasure(LayoutContext& lc)
+@@ -2670,7 +2624,7 @@ void Score::getNextMeasure(LayoutContext
              return;
              }
  
@@ -66,11 +66,9 @@ Description: fix #291698: ensure consistent state of two-notes tremolo after fil
  
        //
        // calculate accidentals and note lines,
-diff --git a/libmscore/measure.cpp b/libmscore/measure.cpp
-index 8b7713a45..fa95b6ee2 100644
 --- a/libmscore/measure.cpp
 +++ b/libmscore/measure.cpp
-@@ -2054,6 +2054,8 @@ void Measure::read(XmlReader& e, int staffIdx)
+@@ -2054,6 +2054,8 @@ void Measure::read(XmlReader& e, int sta
              e.setTick(lm->tick() + lm->ticks());
              }
        e.setCurrentMeasure(nullptr);
@@ -79,7 +77,7 @@ index 8b7713a45..fa95b6ee2 100644
        }
  
  //---------------------------------------------------------
-@@ -2523,6 +2525,52 @@ void Measure::scanElements(void* data, void (*func)(void*, Element*), bool all)
+@@ -2523,6 +2525,52 @@ void Measure::scanElements(void* data, v
              }
        }
  
@@ -132,11 +130,9 @@ index 8b7713a45..fa95b6ee2 100644
  //---------------------------------------------------------
  //   createVoice
  //    Create a voice on demand by filling the measure
-diff --git a/libmscore/measure.h b/libmscore/measure.h
-index 75ab4be6e..14654a83a 100644
 --- a/libmscore/measure.h
 +++ b/libmscore/measure.h
-@@ -194,6 +194,7 @@ class Measure final : public MeasureBase {
+@@ -194,6 +194,7 @@ class Measure final : public MeasureBase
        Segment* undoGetSegment(SegmentType st, const Fraction& f)       { return undoGetSegmentR(st, f - tick()); }
        Segment* getSegment(SegmentType st,     const Fraction& f)       { return getSegmentR(st, f - tick()); }
  
@@ -144,11 +140,9 @@ index 75ab4be6e..14654a83a 100644
  
        qreal createEndBarLines(bool);
        void barLinesSetSpan(Segment*);
-diff --git a/libmscore/read114.cpp b/libmscore/read114.cpp
-index e1ac0ff33..871f3c2c7 100644
 --- a/libmscore/read114.cpp
 +++ b/libmscore/read114.cpp
-@@ -2171,6 +2171,7 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
+@@ -2171,6 +2171,7 @@ static void readMeasure(Measure* m, int
                    }
              }
        e.checkTuplets();
@@ -156,11 +150,9 @@ index e1ac0ff33..871f3c2c7 100644
        }
  
  //---------------------------------------------------------
-diff --git a/libmscore/read206.cpp b/libmscore/read206.cpp
-index 977d95a02..7cd15a50d 100644
 --- a/libmscore/read206.cpp
 +++ b/libmscore/read206.cpp
-@@ -3360,6 +3360,7 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
+@@ -3360,6 +3360,7 @@ static void readMeasure(Measure* m, int
                    e.unknown();
              }
        e.checkTuplets();
index 7e920c7..7ac2058 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #292310: Crash when adjusting Absolute Velocity in piano roll e
 
 --- a/mscore/pianolevels.cpp
 +++ b/mscore/pianolevels.cpp
-@@ -416,7 +416,8 @@ void PianoLevels::adjustLevelLerp(int tick0, int value0, int tick1, int value1,
+@@ -416,7 +416,8 @@ void PianoLevels::adjustLevelLerp(int ti
              else {
                    int tick = noteStartTick(note, 0);
                    if (tick0 <= tick && tick <= tick1) {
index a6f5cb3..4eb5d30 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #290323: synthesizer state duplicated when changing score with
 
 --- a/libmscore/synthesizerstate.cpp
 +++ b/libmscore/synthesizerstate.cpp
-@@ -42,6 +42,7 @@ void SynthesizerState::write(XmlWriter& xml, bool force /* = false */) const
+@@ -42,6 +42,7 @@ void SynthesizerState::write(XmlWriter&
  
  void SynthesizerState::read(XmlReader& e)
        {
@@ -12,7 +12,7 @@ Description: fix #290323: synthesizer state duplicated when changing score with
        while (e.readNextStartElement()) {
              SynthesizerGroup group;
              group.setName(e.name().toString());
-@@ -54,7 +55,12 @@ void SynthesizerState::read(XmlReader& e)
+@@ -54,7 +55,12 @@ void SynthesizerState::read(XmlReader& e
                    else
                          e.unknown();
                    }
index 8553317..3c86046 100644 (file)
@@ -25,8 +25,6 @@ Description: fix #291756 explicitly-signed char fluid pitchadj
        safe_fread(&var, 1);
        return var;
        }
-diff --git a/fluid/sfont.h b/fluid/sfont.h
-index bdae46d85..20765cc18 100644
 --- a/fluid/sfont.h
 +++ b/fluid/sfont.h
 @@ -93,7 +93,7 @@ class SFont {
index cdb8c6f..54d1b60 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #294156: Incorrect segment type for fermata
 
 --- a/libmscore/measure.cpp
 +++ b/libmscore/measure.cpp
-@@ -2396,7 +2396,8 @@ void Measure::readVoice(XmlReader& e, int staffIdx, bool irregular)
+@@ -2394,7 +2394,8 @@ void Measure::readVoice(XmlReader& e, in
                    }
              }
        if (fermata) {
diff --git a/debian/patches/backports/23-hang-startup.diff b/debian/patches/backports/23-hang-startup.diff
deleted file mode 100644 (file)
index ca064b7..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Origin: vendor, commit:e482050197204b8d1458a37608d37749d2fc30f7
-Author: Peter Hieu Vu <peter.vu8@gmail.com>
-Description: fix #294010: properly calculate dash lengths to stop hanging
-
---- a/libmscore/textlinebase.cpp
-+++ b/libmscore/textlinebase.cpp
-@@ -156,7 +156,7 @@ void TextLineBaseSegment::draw(QPainter* painter) const
-                         painter->drawLines(&points[end-1], 1);
-                         end--;
-                         }
--                  numPairs = adjustedLineLength / (dash + gap);
-+                  numPairs = max(qreal(1), adjustedLineLength / (dash + gap));
-                   nDashes[1] = (adjustedLineLength - dash * (numPairs + 1)) / numPairs;
-                   pen.setDashPattern(nDashes);
-                   }
index 74a0dfa..8fca0be 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #283319: Time Signature disappears
 
 --- a/libmscore/style.cpp
 +++ b/libmscore/style.cpp
-@@ -2415,7 +2415,7 @@ bool MStyle::readProperties(XmlReader& e)
+@@ -2323,7 +2323,7 @@ bool MStyle::readProperties(XmlReader& e
                          e.readElementText();
                          }
                    else if (!strcmp("QSizeF", type)) {
index dd2ee9c..92a6fed 100644 (file)
@@ -9,7 +9,7 @@ Description: fix #294866: The direction of beamed notes does not immediately cha
 
 --- a/libmscore/chordrest.cpp
 +++ b/libmscore/chordrest.cpp
-@@ -790,6 +790,8 @@ void ChordRest::removeDeleteBeam(bool beamed)
+@@ -790,6 +790,8 @@ void ChordRest::removeDeleteBeam(bool be
              _beam->remove(this);
              if (b->empty())
                    score()->undoRemoveElement(b);
index 26ec7c8..3daba1d 100644 (file)
@@ -4,7 +4,7 @@ Description: Fix #295224: end-start-repeat crashes in timeline
 
 --- a/mscore/timeline.cpp
 +++ b/mscore/timeline.cpp
-@@ -1232,7 +1232,7 @@ void Timeline::barline_meta(Segment* seg, int* stagger, int pos)
+@@ -1232,7 +1232,7 @@ void Timeline::barline_meta(Segment* seg
                          repeat_text = QString("End repeat");
                          break;
                    case BarLineType::END_START_REPEAT:
index 81c8b5f..6a87ff9 100644 (file)
@@ -8,7 +8,7 @@ Description: fix #289908: cannot apply italic or underline to glissando text
 
 --- a/libmscore/glissando.cpp
 +++ b/libmscore/glissando.cpp
-@@ -649,7 +649,7 @@ bool Glissando::setProperty(Pid propertyId, const QVariant& v)
+@@ -649,7 +649,7 @@ bool Glissando::setProperty(Pid property
                    setFontSize(v.toReal());
                    break;
              case Pid::FONT_STYLE:
index 6c39833..ce7e6d7 100644 (file)
@@ -14,11 +14,9 @@ Description: fix #295898: Deleting a StaffTypeChange causes a crash in macOS
                          stc->setStaffType(st);
                          }
                    MeasureBase::remove(e);
-diff --git a/libmscore/staff.cpp b/libmscore/staff.cpp
-index c4d26a084..d5fe3ad90 100644
 --- a/libmscore/staff.cpp
 +++ b/libmscore/staff.cpp
-@@ -1403,8 +1403,7 @@ QVariant Staff::propertyDefault(Pid id) const
+@@ -1403,8 +1403,7 @@ QVariant Staff::propertyDefault(Pid id)
  void Staff::localSpatiumChanged(double oldVal, double newVal, Fraction tick)
        {
        Fraction etick;
index 9201221..ba63898 100644 (file)
@@ -7,7 +7,7 @@ Description: fix #292343: measure numbers restart from 1 after section break eve
 
 --- a/libmscore/layout.cpp
 +++ b/libmscore/layout.cpp
-@@ -2249,7 +2249,7 @@ int LayoutContext::adjustMeasureNo(MeasureBase* m)
+@@ -2248,7 +2248,7 @@ int LayoutContext::adjustMeasureNo(Measu
        m->setNo(measureNo);
        if (!m->irregular())          // don’t count measure
              ++measureNo;
@@ -16,7 +16,7 @@ Description: fix #292343: measure numbers restart from 1 after section break eve
              measureNo = 0;
        return measureNo;
        }
-@@ -4429,7 +4429,8 @@ void Score::doLayoutRange(const Fraction& st, const Fraction& et)
+@@ -4439,7 +4439,8 @@ void Score::doLayoutRange(const Fraction
                    lc.tick      = Fraction(0,1);
                    }
              else {
index add9fa7..ce99434 100644 (file)
@@ -5,7 +5,7 @@ Description: fix #283628: fermata "play" property does not work
 
 --- a/libmscore/score.cpp
 +++ b/libmscore/score.cpp
-@@ -512,7 +512,7 @@ void Score::rebuildTempoAndTimeSigMaps(Measure* measure)
+@@ -520,7 +520,7 @@ void Score::rebuildTempoAndTimeSigMaps(M
                          continue;
                    qreal stretch = 0.0;
                    for (Element* e : segment.annotations()) {
index 6490e4f..2e760b5 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #166116: Slurs terminate in wrong spot in voices other than 1
 
 --- a/libmscore/cmd.cpp
 +++ b/libmscore/cmd.cpp
-@@ -783,6 +783,11 @@ Segment* Score::setNoteRest(Segment* segment, int track, NoteVal nval, Fraction
+@@ -711,6 +711,11 @@ Segment* Score::setNoteRest(Segment* seg
              connectTies();
        if (nr) {
              if (_is.slur() && nr->type() == ElementType::NOTE) {
@@ -16,11 +16,9 @@ Description: fix #166116: Slurs terminate in wrong spot in voices other than 1
                    //
                    // extend slur
                    //
-diff --git a/mscore/scoreview.cpp b/mscore/scoreview.cpp
-index 127f27175..6eef6ced6 100644
 --- a/mscore/scoreview.cpp
 +++ b/mscore/scoreview.cpp
-@@ -3442,8 +3442,11 @@ void ScoreView::addSlur()
+@@ -3335,8 +3335,11 @@ void ScoreView::addSlur()
        InputState& is = _score->inputState();
        if (noteEntryMode() && is.slur()) {
              const std::vector<SpannerSegment*>& el = is.slur()->spannerSegments();
index e7824b4..c55da6b 100644 (file)
@@ -14,7 +14,7 @@ Description: fix #297477: apply alla breve to 4/4 changes to 2/2 instead
 
 --- a/libmscore/edit.cpp
 +++ b/libmscore/edit.cpp
-@@ -784,8 +784,8 @@ void Score::cmdAddTimeSig(Measure* fm, int staffIdx, TimeSig* ts, bool local)
+@@ -774,8 +774,8 @@ void Score::cmdAddTimeSig(Measure* fm, i
              for (int si = 0; si < n; ++si) {
                    TimeSig* nsig = toTimeSig(seg->element(si * VOICES));
                    nsig->undoChangeProperty(Pid::SHOW_COURTESY, ts->showCourtesySig());
index f58bb5a..208c140 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #288618: play property for articulations
 
 --- a/libmscore/rendermidi.cpp
 +++ b/libmscore/rendermidi.cpp
-@@ -507,8 +507,10 @@ static void collectMeasureEventsSimple(EventMap* events, Measure* m, Staff* staf
+@@ -511,8 +511,10 @@ static void collectMeasureEventsSimple(E
                    int channel = instr->channel(chord->upNote()->subchannel())->channel();
                    events->registerChannel(channel);
  
@@ -17,7 +17,7 @@ Description: fix #288618: play property for articulations
  
                    if ( !graceNotesMerged(chord))
                        for (Chord* c : chord->graceNotesBefore())
-@@ -879,6 +881,8 @@ static void collectMeasureEventsDefault(EventMap* events, Measure* m, Staff* sta
+@@ -883,6 +885,8 @@ static void collectMeasureEventsDefault(
                          if (singleNoteDynamics || hasArticulations || hasChangingDynamic) {
                                if (chord != 0 && hasArticulations) {
                                      for (Articulation* a : chord->articulations()) {
@@ -26,7 +26,7 @@ Description: fix #288618: play property for articulations
                                            if (velocityMiddle == -1)
                                                  velocityMiddle = velocityStart;
                                            instr->updateVelocity(&velocityStart, channel, a->articulationName());
-@@ -939,8 +943,10 @@ static void collectMeasureEventsDefault(EventMap* events, Measure* m, Staff* sta
+@@ -943,8 +947,10 @@ static void collectMeasureEventsDefault(
                          } // if instr->singleNoteDynamics()
                    else {
                          if (chord != 0) {
index 898b00b..78a4d1f 100644 (file)
@@ -9,7 +9,7 @@ Description: fix #298188: fix not playing a note if its articulation playback is
 
 --- a/libmscore/rendermidi.cpp
 +++ b/libmscore/rendermidi.cpp
-@@ -869,10 +869,16 @@ static void collectMeasureEventsDefault(EventMap* events, Measure* m, Staff* sta
+@@ -873,10 +873,16 @@ static void collectMeasureEventsDefault(
                                      singleNoteDynamics = false;
                                }
  
index efbd741..90e2bd8 100644 (file)
@@ -16,7 +16,7 @@ Description: fix #297152: crash on Ctrl+Shift+drag on Linux (under ChromeOS)
 
 --- a/mscore/scoreview.cpp
 +++ b/mscore/scoreview.cpp
-@@ -3732,8 +3732,10 @@ void ScoreView::cloneElement(Element* e)
+@@ -3628,8 +3628,10 @@ void ScoreView::cloneElement(Element* e)
              e = toSpannerSegment(e)->spanner();
        mimeData->setData(mimeSymbolFormat, e->mimeData(QPointF()));
        drag->setMimeData(mimeData);
index 66f08af..1b5f2a0 100644 (file)
@@ -4,7 +4,7 @@ Description: Fix #279024: double click on mixer's dial and sliders should reset
 
 --- a/mscore/mixertrackpart.cpp
 +++ b/mscore/mixertrackpart.cpp
-@@ -124,6 +124,7 @@ MixerTrackPart::MixerTrackPart(QWidget *parent, MixerTrackItemPtr mti, bool expa
+@@ -124,6 +124,7 @@ MixerTrackPart::MixerTrackPart(QWidget *
        panSlider->setToolTip(tr("Pan: %1").arg(QString::number(chan->pan())));
        panSlider->setMaxValue(127);
        panSlider->setMinValue(0);
index f47f0c3..b32a714 100644 (file)
@@ -11,7 +11,7 @@ Description: fix #297468: fix a crash on reading a corrupted score with linear l
 
 --- a/libmscore/layout.cpp
 +++ b/libmscore/layout.cpp
-@@ -4369,7 +4369,7 @@ void Score::doLayoutRange(const Fraction& st, const Fraction& et)
+@@ -4364,7 +4364,7 @@ void Score::doLayoutRange(const Fraction
              }
  //      if (!_systems.isEmpty())
  //            return;
index ae90005..7806b39 100644 (file)
@@ -7,7 +7,7 @@ Description: Fix #296345 : "Offset" suffix for text style fixed to "sp"
 
 --- a/mscore/editstyle.cpp
 +++ b/mscore/editstyle.cpp
-@@ -1424,9 +1424,12 @@ void EditStyle::textStyleChanged(int row)
+@@ -1330,9 +1330,12 @@ void EditStyle::textStyleChanged(int row
                          resetTextStyleOffset->setEnabled(cs->styleV(a.sid) != MScore::defaultStyle().value(a.sid));
                          break;
  
index 0589b85..0e22e81 100644 (file)
@@ -4,7 +4,7 @@ Description: Fix a crash on removing HBox from a score
 
 --- a/libmscore/box.cpp
 +++ b/libmscore/box.cpp
-@@ -458,9 +458,12 @@ void HBox::layout()
+@@ -457,9 +457,12 @@ void HBox::layout()
              setPos(x, y);
              bbox().setRect(0.0, 0.0, w, h);
              }
index 787bc4c..3e86c5e 100644 (file)
@@ -5,7 +5,7 @@ Description: fix #285040 crash when changing a triplet's rest's duration
 
 --- a/libmscore/edit.cpp
 +++ b/libmscore/edit.cpp
-@@ -4801,8 +4801,11 @@ void Score::undoAddCR(ChordRest* cr, Measure* measure, const Fraction& tick)
+@@ -4743,8 +4743,11 @@ void Score::undoAddCR(ChordRest* cr, Mea
                                      if (nt == 0)
                                            qWarning("linked tuplet not found");
                                      }
diff --git a/debian/patches/backports/42-crash-no-score.diff b/debian/patches/backports/42-crash-no-score.diff
deleted file mode 100644 (file)
index 1848424..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Origin: vendor, commit:4118680b975ad3654e6f087cd261fc0b4ed51eca
-Author: Howard-C <howardc@pku.edu.cn>
-Description: fix #300107: crash after closing a menu bar pop-up window if no score is loaded
-
---- a/mscore/plugin/qmlpluginengine.cpp
-+++ b/mscore/plugin/qmlpluginengine.cpp
-@@ -48,7 +48,9 @@ void QmlPluginEngine::beginEndCmd(MuseScore* ms, bool inUndoRedo)
-             undoRedo = true;
-       const Score* cs = ms->currentScore();
--      currScoreState = cs->masterScore()->state(); // score and excerpts have united undo stack so we are better to track master score
-+
-+      // score and excerpts have united undo stack so we are better to track master score
-+      currScoreState = cs ? cs->masterScore()->state() : ScoreContentState();
-       // TODO: most of plugins are never deleted so receivers usually never decrease
-       if (!receivers(SIGNAL(endCmd(const QMap<QString, QVariant>&))))
index c4eeec5..7989a12 100644 (file)
@@ -11,7 +11,7 @@ Description: fix #280493: fix audio glitches on note input and playback on MacOS
 
 --- a/mscore/musescore.cpp
 +++ b/mscore/musescore.cpp
-@@ -512,6 +512,9 @@ void MuseScore::preferencesChanged(bool fromWorkspace)
+@@ -541,6 +541,9 @@ void MuseScore::preferencesChanged(bool
        newWizard = 0;
        reloadInstrumentTemplates();
        updateInstrumentDialog();
@@ -21,15 +21,12 @@ Description: fix #280493: fix audio glitches on note input and playback on MacOS
        }
  
  //---------------------------------------------------------
-diff --git a/mscore/seq.cpp b/mscore/seq.cpp
-index 0c5338d07..f0239ac26 100644
 --- a/mscore/seq.cpp
 +++ b/mscore/seq.cpp
-@@ -234,6 +234,41 @@ void Seq::setScoreView(ScoreView* v)
-             }
+@@ -235,6 +235,41 @@ void Seq::setScoreView(ScoreView* v)
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   Seq::CachedPreferences::update
 +//---------------------------------------------------------
 +
@@ -64,9 +61,10 @@ index 0c5338d07..f0239ac26 100644
 +      _driver->stopTransport();
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   init
  //    return false on error
+ //---------------------------------------------------------
 @@ -246,6 +281,7 @@ bool Seq::init(bool hotPlug)
              running = false;
              return false;
@@ -102,7 +100,7 @@ index 0c5338d07..f0239ac26 100644
                                      _driver->seekTransport(utick + 2 * cs->utime2utick(qreal((_driver->bufferSize()) + 1) / qreal(MScore::sampleRate)));
                                }
                          else
-@@ -680,7 +716,7 @@ void Seq::process(unsigned framesPerPeriod, float* buffer)
+@@ -680,7 +716,7 @@ void Seq::process(unsigned framesPerPeri
        if (driverState != state) {
              // Got a message from JACK Transport panel: Play
              if (state == Transport::STOP && driverState == Transport::PLAY) {
@@ -111,7 +109,7 @@ index 0c5338d07..f0239ac26 100644
                          // Do not play while editing elements
                          if (mscore->state() != STATE_NORMAL || !isRunning() || !canStart())
                                return;
-@@ -689,18 +725,18 @@ void Seq::process(unsigned framesPerPeriod, float* buffer)
+@@ -689,18 +725,18 @@ void Seq::process(unsigned framesPerPeri
  
                          // If we just launch MuseScore and press "Play" on JACK Transport with time 0:00
                          // MuseScore doesn't seek to 0 and guiPos is uninitialized, so let's make it manually
@@ -134,7 +132,7 @@ index 0c5338d07..f0239ac26 100644
                                }
                          }
                    // Initializing instruments every time we start playback.
-@@ -801,7 +837,7 @@ void Seq::process(unsigned framesPerPeriod, float* buffer)
+@@ -801,7 +837,7 @@ void Seq::process(unsigned framesPerPeri
                                      if (playPosUTick >= loopOutUTick || cs->repeatList().utick2tick(playPosUTick) < cs->loopInTick().ticks()) {
                                            qDebug ("Process: playPosUTick = %d, cs->loopInTick().ticks() = %d, cs->loopOutTick().ticks() = %d, getCurTick() = %d, loopOutUTick = %d, playFrame = %d",
                                                              playPosUTick,      cs->loopInTick().ticks(),      cs->loopOutTick().ticks(),      getCurTick(),      loopOutUTick,    *pPlayFrame);
@@ -143,7 +141,7 @@ index 0c5338d07..f0239ac26 100644
                                                  int loopInUTick = cs->repeatList().tick2utick(cs->loopInTick().ticks());
                                                  _driver->seekTransport(loopInUTick);
                                                  if (loopInUTick != 0) {
-@@ -890,14 +926,14 @@ void Seq::process(unsigned framesPerPeriod, float* buffer)
+@@ -890,14 +926,14 @@ void Seq::process(unsigned framesPerPeri
                          // Connecting to JACK Transport if MuseScore was temporarily disconnected from it
                          if (useJackTransportSavedFlag) {
                                // Stopping fake driver
@@ -161,7 +159,7 @@ index 0c5338d07..f0239ac26 100644
                    }
              }
        else {
-@@ -952,7 +988,7 @@ void Seq::process(unsigned framesPerPeriod, float* buffer)
+@@ -952,7 +988,7 @@ void Seq::process(unsigned framesPerPeri
  void Seq::initInstruments(bool realTime)
        {
        // Add midi out ports if necessary
@@ -179,7 +177,7 @@ index 0c5338d07..f0239ac26 100644
                    if (realTime) {
                          putEvent(NPlayEvent(ME_CONTROLLER, channel->channel(), CTRL_LRPN, 0));
                          putEvent(NPlayEvent(ME_CONTROLLER, channel->channel(), CTRL_HRPN, 0));
-@@ -1205,7 +1241,7 @@ void Seq::seek(int utick)
+@@ -1206,7 +1242,7 @@ void Seq::seek(int utick)
  
  void Seq::seekRT(int utick)
        {
@@ -188,7 +186,7 @@ index 0c5338d07..f0239ac26 100644
                    utick = 0;
        seekCommon(utick);
        setPos(utick);
-@@ -1294,7 +1330,7 @@ void Seq::stopNotes(int channel, bool realTime)
+@@ -1295,7 +1331,7 @@ void Seq::stopNotes(int channel, bool re
              if (cs->midiChannel(channel) != 9)
                    send(NPlayEvent(ME_PITCHBEND,  channel, 0, 64));
              }
@@ -197,7 +195,7 @@ index 0c5338d07..f0239ac26 100644
              _synti->allNotesOff(channel);
        }
  
-@@ -1510,7 +1546,7 @@ void Seq::putEvent(const NPlayEvent& event, unsigned framePos)
+@@ -1511,7 +1547,7 @@ void Seq::putEvent(const NPlayEvent& eve
        _synti->play(event, syntiIdx);
  
        // midi
@@ -206,7 +204,7 @@ index 0c5338d07..f0239ac26 100644
              _driver->putEvent(event, framePos);
        }
  
-@@ -1738,7 +1774,7 @@ void Seq::handleTimeSigTempoChanged()
+@@ -1734,7 +1770,7 @@ void Seq::handleTimeSigTempoChanged()
  void Seq::setInitialMillisecondTimestampWithLatency()
        {
       #ifdef USE_PORTMIDI
@@ -215,11 +213,9 @@ index 0c5338d07..f0239ac26 100644
             //qDebug("PortMidi initialMillisecondTimestampWithLatency: %d = %d + %d", initialMillisecondTimestampWithLatency, unsigned(Pt_Time()), preferences.getInt(PREF_IO_PORTMIDI_OUTPUTLATENCYMILLISECONDS));
       #endif
       }
-diff --git a/mscore/seq.h b/mscore/seq.h
-index 8de8c85fe..6706b5a9f 100644
 --- a/mscore/seq.h
 +++ b/mscore/seq.h
-@@ -165,6 +165,28 @@ class Seq : public QObject, public Sequencer {
+@@ -165,6 +165,28 @@ class Seq : public QObject, public Seque
        QTimer* heartBeatTimer;
        QTimer* noteTimer;
  
@@ -248,7 +244,7 @@ index 8de8c85fe..6706b5a9f 100644
        void renderChunk(const MidiRenderer::Chunk&, EventMap*);
        void updateEventsEnd();
  
-@@ -266,6 +288,8 @@ class Seq : public QObject, public Sequencer {
+@@ -266,6 +288,8 @@ class Seq : public QObject, public Seque
  
        void setInitialMillisecondTimestampWithLatency();
        unsigned getCurrentMillisecondTimestampWithLatency(unsigned framePos) const;
diff --git a/debian/patches/backports/44-playback-repeats.diff b/debian/patches/backports/44-playback-repeats.diff
deleted file mode 100644 (file)
index 5dced75..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-Origin: vendor, commit:0dcbf2af0f744a985b39ba315185042795c618ab
-Author: James Thistlewood <jamesthistlewood@gmail.com>
-Description: fix #301340: dynamic playback after repeats does not match with score
-
---- a/libmscore/rendermidi.cpp
-+++ b/libmscore/rendermidi.cpp
-@@ -314,6 +314,7 @@ static void collectNote(EventMap* events, int channel, const Note* note, qreal v
-             // Get the velocity used for this note from the staff
-             // This allows correct playback of tremolos even without SND enabled.
-             int velo;
-+            Fraction nonUnwoundTick = Fraction::fromTicks(on - tickOffset);
-             if (config.useSND) {
-                   switch (config.method) {
-                         case DynamicsRenderMethod::FIXED_MAX:
-@@ -321,12 +322,12 @@ static void collectNote(EventMap* events, int channel, const Note* note, qreal v
-                               break;
-                         case DynamicsRenderMethod::SEG_START:
-                         default:
--                              velo = staff->velocities().val(Fraction::fromTicks(on));
-+                              velo = staff->velocities().val(nonUnwoundTick);
-                               break;
-                         }
-                   }
-             else {
--                  velo = staff->velocities().val(Fraction::fromTicks(on));
-+                  velo = staff->velocities().val(nonUnwoundTick);
-                   }
-             velo *= velocityMultiplier;
index cf48621..fafe5fd 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #284344: ambitus not redrawn on Update Range
 
 --- a/mscore/inspector/inspectorAmbitus.cpp
 +++ b/mscore/inspector/inspectorAmbitus.cpp
-@@ -144,18 +144,22 @@ void InspectorAmbitus::valueChanged(int idx)
+@@ -133,18 +133,23 @@ void InspectorAmbitus::valueChanged(int
              }
        }
  
@@ -16,9 +16,8 @@ Description: fix #284344: ambitus not redrawn on Update Range
 +//    Automatically adjust range based on the score
  //---------------------------------------------------------
  
--void Ms::InspectorAmbitus::updateRange()
-+void InspectorAmbitus::updateRange()
-       {
+ void Ms::InspectorAmbitus::updateRange()
+ {
        Ambitus* range = toAmbitus(inspector->element());
        range->updateRange();
 -      range->layout();              // redo layout
@@ -27,8 +26,9 @@ Description: fix #284344: ambitus not redrawn on Update Range
 +      range->triggerLayout();
 +      range->score()->endCmd();
 +
-       setElement(); // set Inspector values to range properties
-       valueChanged(AmbitusControl::TOPTPC); // force score to notice new range properties
-       }
+       setElement();                 // set Inspector values to range properties
+       valueChanged(AmbitusControl::TOPTPC);         // force score to notice new range properties
++      }
++
+ }
  
-+}
index 3004a89..c74d7e5 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #305941: changing octaves for ambiti doesn't work correctly
 
 --- a/libmscore/ambitus.cpp
 +++ b/libmscore/ambitus.cpp
-@@ -698,10 +698,10 @@ bool Ambitus::setProperty(Pid propertyId, const QVariant& v)
+@@ -698,10 +698,10 @@ bool Ambitus::setProperty(Pid propertyId
                    setBottomPitch(v.toInt());
                    break;
              case Pid::FBPARENTHESIS3:        // recycled property = octave of _topPitch
index 8c10086..b1234b6 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #300738: Ottava (8va/8vb) number is too big
 
 --- a/libmscore/style.cpp
 +++ b/libmscore/style.cpp
-@@ -498,7 +498,7 @@ static const StyleType styleTypes[] {
+@@ -447,7 +447,7 @@ static const StyleType styleTypes[] {
        { Sid::ottavaLineStyle,         "ottavaLineStyle",         QVariant(int(Qt::DashLine)) },
        { Sid::ottavaNumbersOnly,       "ottavaNumbersOnly",       true },
        { Sid::ottavaFontFace,          "ottavaFontFace",          "FreeSerif" },
index b9e8f3c..bcf99a1 100644 (file)
@@ -15,7 +15,7 @@ Description: fix #293593 - Issues with ottavas
 
 --- a/libmscore/note.cpp
 +++ b/libmscore/note.cpp
-@@ -763,7 +763,7 @@ int Note::tpc() const
+@@ -760,7 +760,7 @@ int Note::tpc() const
  QString Note::tpcUserName(bool explicitAccidental) const
        {
        QString pitchName = tpc2name(tpc(), NoteSpellingType::STANDARD, NoteCaseType::AUTO, explicitAccidental);
@@ -24,7 +24,7 @@ Description: fix #293593 - Issues with ottavas
        return pitchName + (explicitAccidental ? " " : "") + octaveName;
        }
  
-@@ -2045,13 +2045,14 @@ void Note::updateAccidental(AccidentalState* as)
+@@ -2095,13 +2095,14 @@ void Note::updateAccidental(AccidentalSt
  
              AccidentalVal accVal = tpc2alter(tpc());
              bool error = false;
@@ -42,11 +42,10 @@ Description: fix #293593 - Issues with ottavas
                    acci = Accidental::value2subtype(accVal);
                    // if previous tied note has same tpc, don't show accidental
                    if (_tieBack && _tieBack->startNote()->tpc1() == tpc1())
-@@ -2256,6 +2257,21 @@ void Note::setHeadGroup(NoteHead::Group val)
-       _headGroup = val;
+@@ -2306,6 +2307,21 @@ void Note::setHeadGroup(NoteHead::Group
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   ottaveCapoFret
 +//    offset added by Ottava's and Capo Fret.
 +//---------------------------------------------------------
@@ -61,10 +60,11 @@ Description: fix #293593 - Issues with ottavas
 +      return staff()->pitchOffset(ch->segment()->tick()) + capoFretId;
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   ppitch
  //    playback pitch
-@@ -2274,11 +2290,8 @@ int Note::ppitch() const
+ //---------------------------------------------------------
+@@ -2323,11 +2339,8 @@ int Note::ppitch() const
                          return div.pitch;
                    }
              }
@@ -77,11 +77,9 @@ Description: fix #293593 - Issues with ottavas
        }
  
  //---------------------------------------------------------
-diff --git a/libmscore/note.h b/libmscore/note.h
-index b0e69b797..24b42782e 100644
 --- a/libmscore/note.h
 +++ b/libmscore/note.h
-@@ -330,6 +330,7 @@ public:
+@@ -323,6 +323,7 @@ class Note final : public Element {
        void setPitch(int val);
        void setPitch(int pitch, int tpc1, int tpc2);
        int pitch() const                   { return _pitch;    }
index fec69fe..9917094 100644 (file)
@@ -41,7 +41,7 @@ Description: fix #298273: divider not displayed in some cases
              if (!divider) {
                    divider = new SystemDivider(s->score());
                    divider->setDividerType(left ? SystemDivider::Type::LEFT : SystemDivider::Type::RIGHT);
-@@ -1534,23 +1534,25 @@ static void layoutPage(Page* page, qreal restHeight)
+@@ -1534,23 +1534,25 @@ static void layoutPage(Page* page, qreal
              sList.push_back(s1);
              }
  
@@ -78,7 +78,7 @@ Description: fix #298273: divider not displayed in some cases
                          }
                    }
              return;
-@@ -1603,7 +1605,7 @@ static void layoutPage(Page* page, qreal restHeight)
+@@ -1603,7 +1605,7 @@ static void layoutPage(Page* page, qreal
              s1->rypos() = y;
              y          += s1->distance();
  
index eabf207..8a63dbd 100644 (file)
@@ -5,7 +5,7 @@ Description: fix #299768: Hairpin: when copied, all custom settings are lost and
 
 --- a/libmscore/chordrest.cpp
 +++ b/libmscore/chordrest.cpp
-@@ -617,16 +617,13 @@ Element* ChordRest::drop(EditData& data)
+@@ -616,16 +616,13 @@ Element* ChordRest::drop(EditData& data)
  
              case ElementType::HAIRPIN:
                    {
@@ -28,11 +28,9 @@ Description: fix #299768: Hairpin: when copied, all custom settings are lost and
  
              default:
                    qDebug("cannot drop %s", e->name());
-diff --git a/libmscore/paste.cpp b/libmscore/paste.cpp
-index edf7dece4..e9af8af82 100644
 --- a/libmscore/paste.cpp
 +++ b/libmscore/paste.cpp
-@@ -796,13 +796,13 @@ void Score::pasteSymbols(XmlReader& e, ChordRest* dst)
+@@ -790,13 +790,13 @@ void Score::pasteSymbols(XmlReader& e, C
                                undoAddElement(d);
                                }
                          else if (tag == "HairPin") {
index 091dddc..da1ce02 100644 (file)
@@ -8,7 +8,7 @@ Description: fix #300926: Problem selecting and entering a whole note
 
 --- a/libmscore/cmd.cpp
 +++ b/libmscore/cmd.cpp
-@@ -1248,8 +1248,11 @@ void Score::changeCRlen(ChordRest* cr, const Fraction& dstF, bool fillWithRest)
+@@ -1137,8 +1137,11 @@ void Score::changeCRlen(ChordRest* cr, c
              return;
              }
        Fraction srcF(cr->ticks());
index bfd0496..dbc42d1 100644 (file)
@@ -14,29 +14,25 @@ Description: Fix #304466: The “I/O” tab of the “Preferences” dialog shou
 
 --- a/mscore/CMakeLists.txt
 +++ b/mscore/CMakeLists.txt
-@@ -175,7 +175,7 @@ add_library(mscoreapp STATIC
-       pathlistdialog.h piano.h  pianotools.h
-       openfilelocation.h
-       playpanel.h preferences.h preferenceslistwidget.h prefsdialog.h
--      recordbutton.h resourceManager.h revision.h ruler.h scoreaccessibility.h
-+      radiobuttongroupbox.h recordbutton.h resourceManager.h revision.h ruler.h scoreaccessibility.h
+@@ -332,6 +332,7 @@ add_executable ( ${ExecutableName}
+       pathlistdialog.h piano.h pianolevels.h pianolevelschooser.h  pianolevelsfilter.h
+       pianokeyboard.h pianoroll.h pianoruler.h pianotools.h pianoview.h
+       playpanel.h pm.h preferences.h preferenceslistwidget.h prefsdialog.h
++      radiobuttongroupbox.h
+       recordbutton.h resourceManager.h revision.h ruler.h scoreaccessibility.h
        scoreBrowser.h scoreInfo.h scorePreview.h scoretab.h scoreview.h searchComboBox.h
-       selectdialog.h selectionwindow.h selectnotedialog.h selinstrument.h
-       seq.h shortcut.h shortcutcapturedialog.h simplebutton.h splitstaff.h stafftextproperties.h
-@@ -198,7 +198,7 @@ add_library(mscoreapp STATIC
+       sectionbreakprop.h selectdialog.h selectionwindow.h selectnotedialog.h selinstrument.h
+@@ -357,6 +358,7 @@ add_executable ( ${ExecutableName}
        preferences.cpp measureproperties.cpp
        seq.cpp textpalette.cpp
        timedialog.cpp symboldialog.cpp shortcutcapturedialog.cpp
--      simplebutton.cpp
-+      radiobuttongroupbox.cpp simplebutton.cpp
-       openfilelocation.cpp
++      radiobuttongroupbox.cpp
+       simplebutton.cpp musedata.cpp
        editdrumset.cpp editstaff.cpp
        timesigproperties.cpp newwizard.cpp transposedialog.cpp
-diff --git a/mscore/prefsdialog.ui b/mscore/prefsdialog.ui
-index 92520c240..d8a518ed6 100644
 --- a/mscore/prefsdialog.ui
 +++ b/mscore/prefsdialog.ui
-@@ -2704,7 +2704,7 @@
+@@ -2659,7 +2659,7 @@
        </attribute>
        <layout class="QVBoxLayout" name="verticalLayout_8">
         <item>
@@ -45,7 +41,7 @@ index 92520c240..d8a518ed6 100644
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
             <horstretch>0</horstretch>
-@@ -2729,7 +2729,7 @@
+@@ -2684,7 +2684,7 @@
          </widget>
         </item>
         <item>
@@ -54,7 +50,7 @@ index 92520c240..d8a518ed6 100644
           <property name="sizePolicy">
            <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
             <horstretch>0</horstretch>
-@@ -2909,7 +2909,7 @@ Adjusting latency can help synchronize your MIDI hardware with MuseScore's inter
+@@ -2864,7 +2864,7 @@ Adjusting latency can help synchronize y
          </widget>
         </item>
         <item>
@@ -63,7 +59,7 @@ index 92520c240..d8a518ed6 100644
           <property name="sizePolicy">
            <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
             <horstretch>0</horstretch>
-@@ -3125,7 +3125,7 @@ Adjusting latency can help synchronize your MIDI hardware with MuseScore's inter
+@@ -3080,7 +3080,7 @@ Adjusting latency can help synchronize y
          </widget>
         </item>
         <item>
@@ -72,7 +68,7 @@ index 92520c240..d8a518ed6 100644
           <property name="sizePolicy">
            <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
             <horstretch>0</horstretch>
-@@ -4280,6 +4280,11 @@ Adjusting latency can help synchronize your MIDI hardware with MuseScore's inter
+@@ -4161,6 +4161,11 @@ Adjusting latency can help synchronize y
     <extends>QToolButton</extends>
     <header>recordbutton.h</header>
    </customwidget>
@@ -84,9 +80,6 @@ index 92520c240..d8a518ed6 100644
   </customwidgets>
   <tabstops>
    <tabstop>General</tabstop>
-diff --git a/mscore/radiobuttongroupbox.cpp b/mscore/radiobuttongroupbox.cpp
-new file mode 100644
-index 000000000..1c773f454
 --- /dev/null
 +++ b/mscore/radiobuttongroupbox.cpp
 @@ -0,0 +1,49 @@
@@ -139,9 +132,6 @@ index 000000000..1c773f454
 +      }
 +
 +}
-diff --git a/mscore/radiobuttongroupbox.h b/mscore/radiobuttongroupbox.h
-new file mode 100644
-index 000000000..24b3bfe04
 --- /dev/null
 +++ b/mscore/radiobuttongroupbox.h
 @@ -0,0 +1,37 @@
index 5ed2017..73aaf61 100644 (file)
@@ -10,7 +10,7 @@ Description: fix #290987: B# and Cb octave change
 
 --- a/libmscore/note.cpp
 +++ b/libmscore/note.cpp
-@@ -763,7 +763,7 @@ int Note::tpc() const
+@@ -760,7 +760,7 @@ int Note::tpc() const
  QString Note::tpcUserName(bool explicitAccidental) const
        {
        QString pitchName = tpc2name(tpc(), NoteSpellingType::STANDARD, NoteCaseType::AUTO, explicitAccidental);
index daff645..d110d41 100644 (file)
@@ -27,11 +27,9 @@ Description: fix #282246: "other" appearance in time sig props not working.
  
              ScoreFont* font = score()->scoreFont();
              QSizeF mag(magS() * _scale);
-diff --git a/mscore/timesigproperties.cpp b/mscore/timesigproperties.cpp
-index 0edbff423..3e21a50d3 100644
 --- a/mscore/timesigproperties.cpp
 +++ b/mscore/timesigproperties.cpp
-@@ -114,6 +114,10 @@ TimeSigProperties::TimeSigProperties(TimeSig* t, QWidget* parent)
+@@ -114,6 +114,10 @@ TimeSigProperties::TimeSigProperties(Tim
                          textButton->setChecked(false);
                          otherButton->setChecked(true);
                          otherCombo->setCurrentIndex(idx);
@@ -42,7 +40,7 @@ index 0edbff423..3e21a50d3 100644
                          }
                    }
              idx++;
-@@ -134,21 +138,12 @@ TimeSigProperties::TimeSigProperties(TimeSig* t, QWidget* parent)
+@@ -134,21 +138,12 @@ TimeSigProperties::TimeSigProperties(Tim
  void TimeSigProperties::accept()
        {
        TimeSigType ts = TimeSigType::NORMAL;
index 610d210..d39003a 100644 (file)
@@ -8,7 +8,7 @@ Description: fix #188061: values in sp unit don't remain unchanged after changin
 
 --- a/mscore/pagesettings.cpp
 +++ b/mscore/pagesettings.cpp
-@@ -304,7 +304,13 @@ void PageSettings::applyToScore(Score* s)
+@@ -304,7 +304,13 @@ void PageSettings::applyToScore(Score* s
        s->undoChangeStyleVal(Sid::pageOddBottomMargin, oddPageBottomMargin->value() * f);
        s->undoChangeStyleVal(Sid::pageOddLeftMargin, oddPageLeftMargin->value() * f);
        s->undoChangeStyleVal(Sid::pageTwosided, twosided->isChecked());
index b968cf9..ca6d1fe 100644 (file)
@@ -13,16 +13,16 @@ Description: Fix #303619: MuseScore crashing when entering font name
 
 --- a/mscore/inspector/inspectorBase.cpp
 +++ b/mscore/inspector/inspectorBase.cpp
-@@ -351,7 +351,7 @@ void InspectorBase::checkDifferentValues(const InspectorItem& ii)
+@@ -344,7 +344,7 @@ void InspectorBase::checkDifferentValues
                    if (valuesAreDifferent)
                          break;
                    }
--            ii.w->setStyleSheet(valuesAreDifferent ? QString("* { color: %1; } QToolTip { color: palette(tooltiptext); }").arg(c.name()) : "");
-+            ii.w->setStyleSheet(valuesAreDifferent ? QString("* { color: %1; } QToolTip { color: palette(tooltiptext); }").arg(c.name()) : " ");
+-            ii.w->setStyleSheet(valuesAreDifferent ? QString("* { color: %1 }").arg(c.name()) : "");
++            ii.w->setStyleSheet(valuesAreDifferent ? QString("* { color: %1 }").arg(c.name()) : " ");
              }
  
        //deal with reset if only one element, or if values are the same
-@@ -366,12 +366,12 @@ void InspectorBase::checkDifferentValues(const InspectorItem& ii)
+@@ -359,12 +359,12 @@ void InspectorBase::checkDifferentValues
                          enableReset = false;
                          break;
                    case PropertyFlags::UNSTYLED:
index 2d2ad66..fe039a5 100644 (file)
@@ -4,11 +4,10 @@ Description: fix #292652: Empty lines become smaller
 
 --- a/libmscore/textbase.cpp
 +++ b/libmscore/textbase.cpp
-@@ -817,6 +817,16 @@ void TextBlock::insert(TextCursor* cursor, const QString& s)
-             }
+@@ -889,6 +889,16 @@ void TextBlock::insert(TextCursor* curso
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   insertEmptyFragment
 +//---------------------------------------------------------
 +
@@ -18,10 +17,11 @@ Description: fix #292652: Empty lines become smaller
 +            _fragments.insert(0, TextFragment(cursor, ""));
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   fragment
  //    inputs:
-@@ -1248,6 +1258,8 @@ void TextBase::createLayout()
+ //      column is the column relative to the start of the TextBlock.
+@@ -1319,6 +1329,8 @@ void TextBase::createLayout()
                    else if (c == '\n') {
                          if (rows() <= cursor.row())
                                _layout.append(TextBlock());
@@ -30,8 +30,6 @@ Description: fix #292652: Empty lines become smaller
                          _layout[cursor.row()].setEol(true);
                          cursor.setRow(cursor.row() + 1);
                          cursor.setColumn(0);
-diff --git a/libmscore/textbase.h b/libmscore/textbase.h
-index df9c266f7..fdd2795b3 100644
 --- a/libmscore/textbase.h
 +++ b/libmscore/textbase.h
 @@ -193,6 +193,7 @@ class TextBlock {
index f3d7157..5d90c5f 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #307721: blank lines ignored at top of text elements
 
 --- a/libmscore/textbase.cpp
 +++ b/libmscore/textbase.cpp
-@@ -936,11 +936,33 @@ void TextBlock::layout(TextBase* t)
+@@ -705,11 +705,33 @@ void TextBlock::layout(TextBase* t)
                          break;
                    }
              }
@@ -36,24 +36,12 @@ Description: fix #307721: blank lines ignored at top of text elements
 +            _lineSpacing = qMax(_lineSpacing, fm.lineSpacing());
 +            }
        else {
-             const auto fiLast = --_fragments.end();
-             for (auto fi = _fragments.begin(); fi != _fragments.end(); ++fi) {
-@@ -955,8 +977,9 @@ void TextBlock::layout(TextBase* t)
-                               voffset *= superScriptOffset;
-                         f.pos.setY(voffset);
-                         }
--                  else
-+                  else {
-                         f.pos.setY(0.0);
-+                        }
-                   // Optimization: don't calculate character position
-                   // for the next fragment if there is no next fragment
-@@ -982,6 +1005,24 @@ void TextBlock::layout(TextBase* t)
-       _bbox.translate(rx, 0.0);
+             for (TextFragment& f : _fragments) {
+                   f.pos.setX(x);
+@@ -744,6 +766,24 @@ void TextBlock::layout(TextBase* t)
        }
  
-+//---------------------------------------------------------
+ //---------------------------------------------------------
 +//   fragmentsWithoutEmpty
 +//---------------------------------------------------------
 +
@@ -71,12 +59,13 @@ Description: fix #307721: blank lines ignored at top of text elements
 +      return list;
 +      }
 +
- //---------------------------------------------------------
++//---------------------------------------------------------
  //   xpos
  //---------------------------------------------------------
-@@ -1138,8 +1179,9 @@ void TextBlock::insert(TextCursor* cursor, const QString& s)
  
- void TextBlock::insertEmptyFragmentIfNeeded(TextCursor* cursor)
+@@ -894,8 +934,9 @@ void TextBlock::insert(TextCursor* curso
+ void TextBlock::insertEmptyFragment(TextCursor* cursor)
        {
 -      if (_fragments.size() == 0 || _fragments.at(0).text != "")
 +      if (_fragments.size() == 0 || _fragments.at(0).text.isEmpty()) {
@@ -85,16 +74,7 @@ Description: fix #307721: blank lines ignored at top of text elements
        }
  
  //---------------------------------------------------------
-@@ -1148,7 +1190,7 @@ void TextBlock::insertEmptyFragmentIfNeeded(TextCursor* cursor)
- void TextBlock::removeEmptyFragment()
-       {
--      if (_fragments.size() > 0 && _fragments.at(0).text == "")
-+      if (_fragments.size() > 0 && _fragments.at(0).text.isEmpty())
-             _fragments.removeAt(0);
-       }
-@@ -1375,7 +1417,7 @@ void TextFragment::changeFormat(FormatId id, QVariant data)
+@@ -1116,7 +1157,7 @@ void TextFragment::changeFormat(FormatId
  //   split
  //---------------------------------------------------------
  
@@ -103,7 +83,7 @@ Description: fix #307721: blank lines ignored at top of text elements
        {
        TextBlock tl;
  
-@@ -1395,6 +1437,8 @@ TextBlock TextBlock::split(int column)
+@@ -1136,6 +1177,8 @@ TextBlock TextBlock::split(int column)
                                }
                          for (; i != _fragments.end(); i = _fragments.erase(i))
                                tl._fragments.append(*i);
@@ -112,7 +92,7 @@ Description: fix #307721: blank lines ignored at top of text elements
                          return tl;
                          }
                    ++idx;
-@@ -1406,6 +1450,8 @@ TextBlock TextBlock::split(int column)
+@@ -1147,6 +1190,8 @@ TextBlock TextBlock::split(int column)
        TextFragment tf("");
        if (_fragments.size() > 0)
              tf.format = _fragments.last().format;
@@ -121,16 +101,16 @@ Description: fix #307721: blank lines ignored at top of text elements
        tl._fragments.append(tf);
        return tl;
        }
-@@ -1566,7 +1612,7 @@ static qreal parseNumProperty(const QString& s)
+@@ -1307,7 +1352,7 @@ static qreal parseNumProperty(const QStr
  
  void TextBase::createLayout()
        {
 -      _layout.clear();
 +      _layout.clear();  // deletes the text fragments so we lose all formatting information
-       TextCursor cursor(this);
+       TextCursor cursor((Text*)this);
        cursor.init();
  
-@@ -1955,8 +2001,9 @@ void TextBase::genText() const
+@@ -1696,8 +1741,9 @@ void TextBase::genText() const
  
        for (const TextBlock& block : _layout) {
              for (const TextFragment& f : block.fragments()) {
@@ -142,11 +122,9 @@ Description: fix #307721: blank lines ignored at top of text elements
                    const CharFormat& format = f.format;
                    if (fmt.bold() != format.bold()) {
                          if (format.bold())
-diff --git a/libmscore/textbase.h b/libmscore/textbase.h
-index de3cd594b..3356fa9dd 100644
 --- a/libmscore/textbase.h
 +++ b/libmscore/textbase.h
-@@ -196,6 +196,7 @@ class TextBlock {
+@@ -189,6 +189,7 @@ class TextBlock {
        void layout(TextBase*);
        const QList<TextFragment>& fragments() const { return _fragments; }
        QList<TextFragment>& fragments()             { return _fragments; }
@@ -154,20 +132,18 @@ index de3cd594b..3356fa9dd 100644
        const QRectF& boundingRect() const           { return _bbox; }
        QRectF boundingRect(int col1, int col2, const TextBase*) const;
        int columns() const;
-@@ -205,7 +206,7 @@ class TextBlock {
-       QString remove(int column, TextCursor*);
-       QString remove(int start, int n, TextCursor*);
+@@ -197,7 +198,7 @@ class TextBlock {
+       QString remove(int column);
+       QString remove(int start, int n);
        int column(qreal x, TextBase*) const;
 -      TextBlock split(int column);
 +      TextBlock split(int column, TextCursor* cursor);
        qreal xpos(int col, const TextBase*) const;
        const CharFormat* formatAt(int) const;
        const TextFragment* fragment(int col) const;
-diff --git a/libmscore/textedit.cpp b/libmscore/textedit.cpp
-index 5f7898c3a..601ebf8e2 100644
 --- a/libmscore/textedit.cpp
 +++ b/libmscore/textedit.cpp
-@@ -521,15 +521,21 @@ void SplitJoinText::join(EditData* ed)
+@@ -448,15 +448,21 @@ void SplitJoinText::join(EditData* ed)
        CharFormat* charFmt = c.format();         // take current format
        int col             = t->textBlock(line-1).columns();
        int eol             = t->textBlock(line).eol();
@@ -190,7 +166,7 @@ index 5f7898c3a..601ebf8e2 100644
        if (ed)
              *t->cursor(*ed) = c;
        c.text()->setTextInvalid();
-@@ -543,7 +549,7 @@ void SplitJoinText::split(EditData* ed)
+@@ -470,7 +476,7 @@ void SplitJoinText::split(EditData* ed)
        t->triggerLayout();
  
        CharFormat* charFmt = c.format();         // take current format
diff --git a/debian/patches/backports/60-desktopfile.diff b/debian/patches/backports/60-desktopfile.diff
deleted file mode 100644 (file)
index 9454388..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Origin: vendor, commit:745038c30d31db55fb0c6c5cbaca69fa6f2dda4a
-Author: Dmitri Ovodok <dmitrio95@yandex.ru>
-Description: Add a missing semicolon for MIME types in .desktop file for AppImage
-
---- a/build/Linux+BSD/mscore.desktop.in
-+++ b/build/Linux+BSD/mscore.desktop.in
-@@ -15,4 +15,4 @@ Type=Application
- Categories=Qt;Audio;Sequencer;Midi;AudioVideoEditing;Music;AudioVideo;
- Keywords=music;notation;composition;composing;arranging;making;sheet music;music notation software;lead sheet;leadsheet;score;full score;scorewriter;MIDI;musicxml;playback;instrument;
- Keywords[de]=Musik;Noten;Musiknoten;Komposition;Komponieren;Arrangieren;Notenblatt;Notenblätter;Notationsprogramm;Musiknotationsprogramm;Musiknotation;Tabulatur;MIDI;musicxml;Instrument;
--MimeType=application/x-musescore;application/x-musescore+xml;application/vnd.recordare.musicxml;application/vnd.recordare.musicxml+xml;audio/midi;application/x-bww;application/x-biab;application/x-capella;audio/x-gtp;application/x-musedata;application/x-overture;audio/x-ptb;application/x-sf2;application/x-sf3
-+MimeType=application/x-musescore;application/x-musescore+xml;application/vnd.recordare.musicxml;application/vnd.recordare.musicxml+xml;audio/midi;application/x-bww;application/x-biab;application/x-capella;audio/x-gtp;application/x-musedata;application/x-overture;audio/x-ptb;application/x-sf2;application/x-sf3;
index 2dd7449..a4869b0 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #307593: prevent duplicated icon on Ubuntu
 
 --- a/build/Linux+BSD/mscore.desktop.in
 +++ b/build/Linux+BSD/mscore.desktop.in
-@@ -10,6 +10,7 @@ Comment[fr]=Gravure de partitions musicales
+@@ -10,6 +10,7 @@ Comment[fr]=Gravure de partitions musica
  Exec=mscore@MSCORE_INSTALL_SUFFIX@ %F
  Icon=mscore@MSCORE_INSTALL_SUFFIX@
  StartupNotify=true
index ef905e0..010cc3d 100644 (file)
@@ -8,7 +8,7 @@ Description: Fix #306333 - Various type of edits change the measure count
 
 --- a/libmscore/layout.cpp
 +++ b/libmscore/layout.cpp
-@@ -4530,8 +4530,8 @@ void Score::doLayoutRange(const Fraction& st, const Fraction& et)
+@@ -4445,8 +4445,8 @@ void Score::doLayoutRange(const Fraction
                    if (sectionBreak && sectionBreak->startWithMeasureOne())
                          lc.measureNo = 0;
                    else
index a9a949b..ffc91d6 100644 (file)
@@ -9,9 +9,9 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
  it won't take focus). This is enough to avoid triggering the issue
  which happens only if Play Panel or Mixer is docked.
 
---- a/mscore/mixer/mixer.cpp
-+++ b/mscore/mixer/mixer.cpp
-@@ -240,7 +240,7 @@ void Mixer::retranslate(bool firstTime)
+--- a/mscore/mixer.cpp
++++ b/mscore/mixer.cpp
+@@ -237,7 +237,7 @@ void Mixer::retranslate(bool firstTime)
  void Mixer::closeEvent(QCloseEvent* ev)
        {
        emit closed(false);
@@ -20,7 +20,7 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        }
  
  //---------------------------------------------------------
-@@ -249,11 +249,18 @@ void Mixer::closeEvent(QCloseEvent* ev)
+@@ -246,11 +246,18 @@ void Mixer::closeEvent(QCloseEvent* ev)
  
  void Mixer::showEvent(QShowEvent* e)
        {
@@ -44,7 +44,7 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        }
  
  
-@@ -263,8 +270,9 @@ void Mixer::showEvent(QShowEvent* e)
+@@ -260,8 +267,9 @@ void Mixer::showEvent(QShowEvent* e)
  
  void Mixer::hideEvent(QHideEvent* e)
        {
@@ -56,7 +56,7 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        }
  
  
-@@ -276,7 +284,7 @@ bool Mixer::eventFilter(QObject* obj, QEvent* e)
+@@ -273,7 +281,7 @@ bool Mixer::eventFilter(QObject* obj, QE
        {
        if (enablePlay->eventFilter(obj, e))
              return true;
@@ -65,7 +65,7 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        }
  
  //---------------------------------------------------------
-@@ -288,7 +296,7 @@ void Mixer::keyPressEvent(QKeyEvent* ev) {
+@@ -285,7 +293,7 @@ void Mixer::keyPressEvent(QKeyEvent* ev)
              close();
              return;
              }
@@ -74,7 +74,7 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        }
  
  //---------------------------------------------------------
-@@ -297,7 +305,7 @@ void Mixer::keyPressEvent(QKeyEvent* ev) {
+@@ -294,7 +302,7 @@ void Mixer::keyPressEvent(QKeyEvent* ev)
  
  void Mixer::changeEvent(QEvent *event)
        {
@@ -83,11 +83,9 @@ Description: fix #298820: fix inability to minimize MuseScore on Linux with Gnom
        if (event->type() == QEvent::LanguageChange)
              retranslate();
        }
-diff --git a/mscore/playpanel.cpp b/mscore/playpanel.cpp
-index 980f31d6c..467850a86 100644
 --- a/mscore/playpanel.cpp
 +++ b/mscore/playpanel.cpp
-@@ -136,7 +136,7 @@ void PlayPanel::speedChanged()
+@@ -126,7 +126,7 @@ void PlayPanel::relTempoChanged()
  void PlayPanel::closeEvent(QCloseEvent* ev)
        {
        emit closed(false);
@@ -96,7 +94,7 @@ index 980f31d6c..467850a86 100644
        }
  
  //---------------------------------------------------------
-@@ -151,7 +151,7 @@ void PlayPanel::closeEvent(QCloseEvent* ev)
+@@ -141,7 +141,7 @@ void PlayPanel::closeEvent(QCloseEvent*
  void PlayPanel::hideEvent(QHideEvent* ev)
        {
        MuseScore::saveGeometry(this);
@@ -105,7 +103,7 @@ index 980f31d6c..467850a86 100644
        }
  
  //---------------------------------------------------------
-@@ -160,10 +160,15 @@ void PlayPanel::hideEvent(QHideEvent* ev)
+@@ -150,10 +150,15 @@ void PlayPanel::hideEvent(QHideEvent* ev
  
  void PlayPanel::showEvent(QShowEvent* e)
        {
@@ -125,7 +123,7 @@ index 980f31d6c..467850a86 100644
        }
  
  //---------------------------------------------------------
-@@ -174,7 +179,7 @@ bool PlayPanel::eventFilter(QObject* obj, QEvent* e)
+@@ -164,7 +169,7 @@ bool PlayPanel::eventFilter(QObject* obj
        {
        if (enablePlay->eventFilter(obj, e))
              return true;
@@ -134,7 +132,7 @@ index 980f31d6c..467850a86 100644
        }
  
  void PlayPanel::keyPressEvent(QKeyEvent* ev) {
-@@ -182,7 +187,7 @@ void PlayPanel::keyPressEvent(QKeyEvent* ev) {
+@@ -172,7 +177,7 @@ void PlayPanel::keyPressEvent(QKeyEvent*
              close();
              return;
              }
@@ -143,7 +141,7 @@ index 980f31d6c..467850a86 100644
        }
  
  //---------------------------------------------------------
-@@ -453,7 +458,7 @@ void PlayPanel::speedSliderReleased(int)
+@@ -406,7 +411,7 @@ void PlayPanel::tempoSliderReleased(int)
  
  void PlayPanel::changeEvent(QEvent *event)
        {
index 0699821..8af8836 100644 (file)
@@ -4,7 +4,7 @@ Description: fix #307075 : Bold and underlined text is not displayed properly
 
 --- a/libmscore/textbase.cpp
 +++ b/libmscore/textbase.cpp
-@@ -752,13 +752,15 @@ void TextFragment::draw(QPainter* p, const TextBase* t) const
+@@ -521,13 +521,15 @@ void TextFragment::draw(QPainter* p, con
        f.setPointSizeF(f.pointSizeF() * MScore::pixelRatio);
  #ifndef Q_OS_MACOS
        qreal mm = p->worldTransform().m11();
index 94f4477..2615e1c 100644 (file)
@@ -11,9 +11,9 @@ Justification: depends on experiments/revert-restriking-patch.diff
  #include "libmscore/sig.h"
 +#include "libmscore/tie.h"
  #include "event.h"
- namespace Ms {
-@@ -376,6 +377,30 @@ void EventList::insert(const Event& e)
+ #include "libmscore/staff.h"
+ #include "libmscore/instrument.h"
+@@ -396,6 +397,30 @@ void EventList::insert(const Event& e)
  //   class EventMap::fixupMIDI
  //---------------------------------------------------------
  
@@ -44,16 +44,16 @@ Justification: depends on experiments/revert-restriking-patch.diff
  void EventMap::fixupMIDI()
        {
        /* track info for each of the 128 possible MIDI notes */
-@@ -410,6 +435,12 @@ void EventMap::fixupMIDI()
+@@ -431,6 +456,12 @@ void EventMap::fixupMIDI()
                    else if (++np > 1) {
                          /* already playing */
                          discard = true;
 +                        /* log the collision */
 +                        fprintf(stderr, "MIDI collision detected: newly played...\n");
-+                        logCollisionNotes(&(it->second));
++                        logCollisionNotes(&event);
 +                        fprintf(stderr, " ... interferes with already playing...\n");
-+                        logCollisionNotes(info[it->second.channel()].event[it->second.pitch()]);
++                        logCollisionNotes(info[event.channel()].event[event.pitch()]);
 +                        fprintf(stderr, " ... which will continue to sound.\n");
                          /* carry over the corresponding score notes */
-                         info[it->second.channel()].event[it->second.pitch()]->notes.insert(info[it->second.channel()].event[it->second.pitch()]->notes.end(), it->second.notes.begin(), it->second.notes.end());
+                         info[event.channel()].event[event.pitch()]->notes.insert(info[event.channel()].event[event.pitch()]->notes.end(), event.notes.begin(), event.notes.end());
                          }
index 287e9b3..8bf107a 100644 (file)
@@ -22,11 +22,10 @@ Forwarded: https://github.com/musescore/MuseScore/pull/3797
        events->insert(std::pair<int, NPlayEvent>(onTime, ev));
 --- a/mscore/exportmidi.cpp
 +++ b/mscore/exportmidi.cpp
-@@ -292,19 +292,9 @@ bool ExportMidi::write(QIODevice* device
+@@ -295,18 +295,9 @@ bool ExportMidi::write(QIODevice* device
  
-                         for (auto i = events.begin(); i != events.end(); ++i) {
-                               const NPlayEvent& event = i->second;
--
+                               if (event.isMuted())
+                                     continue;
 -                              if (event.discard() == staffIdx + 1 && event.velo() > 0)
 -                                    // turn note off so we can restrike it in another track
 -                                    track.insert(pauseMap.addPauseTicks(i->first), MidiEvent(ME_NOTEON, channel,
@@ -44,45 +43,30 @@ Forwarded: https://github.com/musescore/MuseScore/pull/3797
                                if (port != eventPort || channel != eventChannel)
 --- a/mscore/seq.cpp
 +++ b/mscore/seq.cpp
-@@ -517,22 +517,15 @@ void Seq::playEvent(const NPlayEvent& ev
+@@ -552,12 +552,6 @@ void Seq::playEvent(const NPlayEvent& ev
+       int type = event.type();
        if (type == ME_NOTEON) {
-             bool mute = false;
--            const Note* note = event.note();
--            if (note) {
-+            if (!event.notes.empty()) {
-+                  const Note* note  = event.notes[0];
-                   Staff* staff      = note->staff();
-                   Instrument* instr = staff->part()->instrument(note->chord()->tick());
-                   const Channel* a = instr->playbackChannel(note->subchannel(), cs);
-                   mute = a->mute() || a->soloMute() || !staff->playbackVoice(note->voice());
-                   }
--            if (!mute) {
+             if (!event.isMuted()) {
 -                  if (event.discard()) { // ignore noteoff but restrike noteon
 -                        if (event.velo() > 0)
 -                              putEvent(NPlayEvent(ME_NOTEON, event.channel(), event.pitch(), 0) ,framePos);
 -                        else
 -                              return;
 -                        }
-+            if (!mute)
                    putEvent(event, framePos);
--                  }
+                   }
              }
-       else if (type == ME_CONTROLLER || type == ME_PITCHBEND)
-             putEvent(event, framePos);
-@@ -1584,29 +1577,22 @@ void Seq::heartBeatTimeout()
+@@ -1611,29 +1605,22 @@ void Seq::heartBeatTimeout()
                          break;
              const NPlayEvent& n = guiPos->second;
              if (n.type() == ME_NOTEON) {
 -                  const Note* note1 = n.note();
 -                  if (n.velo()) {
-+                  for (auto it = n.notes.cbegin(); it != n.notes.cend(); ++it) {
-+                        const Note* note1 = *it;
-                         while (note1) {
-                               for (ScoreElement* se : note1->linkList()) {
-                                     if (!se->isNote())
-                                           continue;
-                                     Note* currentNote = toNote(se);
+-                        while (note1) {
+-                              for (ScoreElement* se : note1->linkList()) {
+-                                    if (!se->isNote())
+-                                          continue;
+-                                    Note* currentNote = toNote(se);
 -                                    currentNote->setMark(true);
 -                                    markedNotes.append(currentNote);
 -                                    r |= currentNote->canvasBoundingRect();
@@ -91,11 +75,13 @@ Forwarded: https://github.com/musescore/MuseScore/pull/3797
 -                              }
 -                        }
 -                  else {
--                        while (note1) {
--                              for (ScoreElement* se : note1->linkList()) {
--                                    if (!se->isNote())
--                                          continue;
--                                    Note* currentNote = toNote(se);
++                  for (auto it = n.notes.cbegin(); it != n.notes.cend(); ++it) {
++                        const Note* note1 = *it;
+                         while (note1) {
+                               for (ScoreElement* se : note1->linkList()) {
+                                     if (!se->isNote())
+                                           continue;
+                                     Note* currentNote = toNote(se);
 -                                    currentNote->setMark(false);
 +                                    if (n.velo()) {
 +                                          currentNote->setMark(true);
@@ -123,41 +109,52 @@ Forwarded: https://github.com/musescore/MuseScore/pull/3797
              out << qSetFieldWidth(5) << "   Type  = ";
 --- a/synthesizer/event.cpp
 +++ b/synthesizer/event.cpp
-@@ -391,28 +391,37 @@ void EventMap::fixupMIDI()
+@@ -172,8 +172,8 @@ NPlayEvent::NPlayEvent(BeatType beatType
+ bool NPlayEvent::isMuted() const
+       {
+-      const Note* n = note();
+-      if (n) {
++      if (!notes.empty()) {
++            const Note* n = notes[0];
+             MasterScore* cs = n->masterScore();
+             Staff* staff = n->staff();
+             Instrument* instr = staff->part()->instrument(n->tick());
+@@ -411,6 +411,8 @@ void EventMap::fixupMIDI()
  
        auto it = begin();
        while (it != end()) {
 +            bool discard = false;
 +
+             NPlayEvent& event = it->second;
              /* ME_NOTEOFF is never emitted, no need to check for it */
-             if (it->second.type() == ME_NOTEON) {
-                   unsigned short np = info[it->second.channel()].nowPlaying[it->second.pitch()];
-                   if (it->second.velo() == 0) {
+             if (event.type() == ME_NOTEON && !event.isMuted()) {
+@@ -418,22 +420,30 @@ void EventMap::fixupMIDI()
+                   if (event.velo() == 0) {
                          /* already off (should not happen) or still playing? */
                          if (np == 0 || --np > 0)
--                              it->second.setDiscard(1);
+-                              event.setDiscard(1);
 +                              discard = true;
                          else {
                                /* hoist NOTEOFF to same track as NOTEON */
-                               it->second.setOriginatingStaff(info[it->second.channel()].event[it->second.pitch()]->getOriginatingStaff());
+                               event.setOriginatingStaff(info[event.channel()].event[event.pitch()]->getOriginatingStaff());
 +                              /* copy linked Notes */
-+                              it->second.notes = info[it->second.channel()].event[it->second.pitch()]->notes;
++                              event.notes = info[event.channel()].event[event.pitch()]->notes;
                                }
                          }
--                  else {
--                        if (++np > 1)
--                              /* restrike, possibly on different track */
--                              it->second.setDiscard(info[it->second.channel()].event[it->second.pitch()]->getOriginatingStaff() + 1);
--                        info[it->second.channel()].event[it->second.pitch()] = &(it->second);
 +                  else if (++np > 1) {
 +                        /* already playing */
 +                        discard = true;
 +                        /* carry over the corresponding score notes */
-+                        info[it->second.channel()].event[it->second.pitch()]->notes.insert(info[it->second.channel()].event[it->second.pitch()]->notes.end(), it->second.notes.begin(), it->second.notes.end());
++                        info[event.channel()].event[event.pitch()]->notes.insert(info[event.channel()].event[event.pitch()]->notes.end(), event.notes.begin(), event.notes.end());
++                        }
+                   else {
+-                        if (++np > 1)
+-                              /* restrike, possibly on different track */
+-                              event.setDiscard(info[event.channel()].event[event.pitch()]->getOriginatingStaff() + 1);
+                         info[event.channel()].event[event.pitch()] = &event;
                          }
-+                  else
-+                        info[it->second.channel()].event[it->second.pitch()] = &(it->second);
-                   info[it->second.channel()].nowPlaying[it->second.pitch()] = np;
+                   info[event.channel()].nowPlaying[event.pitch()] = np;
                    }
  
 -            ++it;
@@ -192,6 +189,6 @@ Forwarded: https://github.com/musescore/MuseScore/pull/3797
        void setOriginatingStaff(int i) { _origin = i; }
 -      void setDiscard(int d) { _discard = d; }
 -      int discard() const { return _discard; }
+       bool isMuted() const;
        };
  
- //---------------------------------------------------------
index 0d4114b..05a240d 100644 (file)
@@ -14,7 +14,7 @@ Forwarded: https://github.com/musescore/MuseScore/pull/5036
 
 --- a/libmscore/note.cpp
 +++ b/libmscore/note.cpp
-@@ -2754,6 +2754,13 @@ QString Note::accessibleInfo() const
+@@ -2771,6 +2771,13 @@ QString Note::accessibleInfo() const
              pitchName = chord()->noStem() ? QObject::tr("Beat slash") : QObject::tr("Rhythm slash");
        else if (staff()->isDrumStaff(tick()) && drumset)
              pitchName = qApp->translate("drumset", drumset->name(pitch()).toUtf8().constData());
index 58cb1e5..e09d5a3 100644 (file)
@@ -24,11 +24,9 @@ backports/04-paste-breath.diff
 backports/05-layout-hairpin-dynamic.diff
 backports/06-layout-volta.diff
 backports/07-layout-clef-change.diff
-backports/08-ui-undo-spacer.diff
 backports/09-layout-1st-system.diff
 backports/10-ui-undo-track.diff
 backports/11-ui-keys-move.diff
-backports/12-instr-change-name.diff
 backports/14-crash-segments.diff
 backports/15-crash-mxml.diff
 backports/16-crash-workspace.diff
@@ -39,7 +37,6 @@ backports/19-synth-state.diff
 backports/20-tour-loop.diff
 backports/21-synth-signed-char.diff
 backports/22-crash-fermata.diff
-backports/23-hang-startup.diff
 backports/24-element-size.diff
 backports/25-relayout-beams.diff
 backports/26-crash-repeats.diff
@@ -59,9 +56,7 @@ backports/38-ui-units.diff
 backports/39-layout-spacer.diff
 backports/40-crash-del-hbox.diff
 backports/41-crash-triplet.diff
-backports/42-crash-no-score.diff
 backports/43-playback-glitches.diff
-backports/44-playback-repeats.diff
 backports/45-pianoroll-xml.diff
 backports/46-ui-ambitus.diff
 backports/47-ui-ambitus.diff
@@ -77,7 +72,6 @@ backports/56-layout-spatium.diff
 backports/57-crash-fontname.diff
 backports/58-blank-lines.diff
 backports/59-blank-lines.diff
-backports/60-desktopfile.diff
 backports/61-desktopfile.diff
 backports/62-measure-count.diff
 backports/63-minimise-window.diff