Package: musescore3 / 3.2.3+dfsg2-16

Metadata

Package Version Patches format
musescore3 3.2.3+dfsg2-16 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
backports/46 ui ambitus.diff | (download)

mscore/inspector/inspectorAmbitus.cpp | 13 9 + 4 - 0 !
1 file changed, 9 insertions(+), 4 deletions(-)

 fix #284344: ambitus not redrawn on update range


backports/47 ui ambitus.diff | (download)

libmscore/ambitus.cpp | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 fix #305941: changing octaves for ambiti doesn't work correctly


upstream/ottava size.diff | (download)

libmscore/style.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #300738: ottava (8va/8vb) number is too big


upstream/pitch ottava.diff | (download)

libmscore/note.cpp | 29 21 + 8 - 0 !
libmscore/note.h | 1 1 + 0 - 0 !
2 files changed, 22 insertions(+), 8 deletions(-)

 fix #293593 - issues with ottavas
 Corrects first problem: Status doesn't display the pitch of note that have an
 ottave line. This is solved in Note::tpcUserName().
 .
 Solves the second problem in issue 293593: Accidentals do apply if 8va sign is added.
 This is solved in Note::updateAccidental(). All calculations are based on the
 effective pitch of the a note rather than the actual pitch. The solution now
 takes to ottava signs into account by using the actual pitch.
 .
 For easily find out whether an ottava is applied, a new method ottavaCapoFret()
 is added which returns the pitch offset by an ottava (or capo fret). To prevent
 code dublication, ppitch() also use this new ottavaCapoFret() method.


backports/50 layout divider.diff | (download)

libmscore/layout.cpp | 30 16 + 14 - 0 !
1 file changed, 16 insertions(+), 14 deletions(-)

 fix #298273: divider not displayed in some cases
 Resolves: https://musescore.org/en/node/298273
 .
 System dividers were not being displayed in certain cases:
 if a fixed spacer is used, or in single page view.
 In addition, dividers were displaying that shouldn't be
 if layout changes and a system that was formerly not last on page
 suddenly becomes last on page,
 This is due to a series of errors in layoutPage()
 where the dividers are managed.
 This fix involves a number of aspects:
 1) checkDivider now takes an extra boolean parameter to force deletion
 2) we always call checkDivider with that parameter set to true
 for the last system of a page
 3) in the case where we don't stretch system distance
 (the clause checking sList, noVerticalStretch, or System layout mode),
 don't just remove dividers, but do the normal checkDivider call,
 which adds or removes dividers as appropriate
 4) in the calls to checkDivider at the end of the function
 (which handle the normal case of non-final systems on the page),
 dion't skip the checkDivider calls if a system hasFixedDownDistance.
 I believe that check was added because it is appropriate in other places
 that also check vBox, so it may have looked like this code should match.
 But it shouldn't, there is no reason to skip dividers in this case.
 Only the stretch calculations should be skipped.


backports/51 paste hairpin.diff | (download)

libmscore/chordrest.cpp | 15 6 + 9 - 0 !
libmscore/paste.cpp | 14 7 + 7 - 0 !
2 files changed, 13 insertions(+), 16 deletions(-)

 fix #299768: hairpin: when copied, all custom settings are lost and the element resets to default
 Resolves: https://musescore.org/en/node/299768.


backports/52 ui enter whole note.diff | (download)

libmscore/cmd.cpp | 5 4 + 1 - 0 !
1 file changed, 4 insertions(+), 1 deletion(-)

 fix #300926: problem selecting and entering a whole note
 Resolves: https://musescore.org/en/node/300926.
 .
 This allows a full measure rest to be changed into a "normal" rest even
 if the actual length of the rest is not being changed.


upstream/prefs radio.diff | (download)

mscore/CMakeLists.txt | 2 2 + 0 - 0 !
mscore/prefsdialog.ui | 13 9 + 4 - 0 !
mscore/radiobuttongroupbox.cpp | 49 49 + 0 - 0 !
mscore/radiobuttongroupbox.h | 37 37 + 0 - 0 !
4 files changed, 97 insertions(+), 4 deletions(-)

 fix #304466: the i/o tab of the preferences dialog should use radio buttons instead of checkboxes
 Fixed a UI problem with the I/O tab of the Preferences dialog that
 caused mutually exclusive options to be presented to the user as
 checkboxes instead of radio buttons.
 .
 The underlying technical reason for this was that the Qt framework does
 not allow group boxes to have radio buttons. This has been worked
 around by subclassing the QGroupBox class and rendering the checkboxes
 to look like radio buttons. This is sufficient for our purposes because
 the application already overrides the checkboxes' behavior to work like
 radio buttons.


upstream/pitch Cb B#.diff | (download)

libmscore/note.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #290987: b# and cb octave change
 Resolves: https://musescore.org/en/node/290987.
 .
 Make sure that B#, B##, Cb, and Cbb describe themselves as being in the
 correct octave. This is accomplished by calculating the octave based on
 what the pitch would be if there were no accidental. Thus, there is no
 need to special-case certain tpcs.


backports/55 layout timesig.diff | (download)

libmscore/timesig.cpp | 10 8 + 2 - 0 !
mscore/timesigproperties.cpp | 23 13 + 10 - 0 !
2 files changed, 21 insertions(+), 12 deletions(-)

 fix #282246: "other" appearance in time sig props not working.
 This bug occurs when the user chooses an "other" time signature
 property. This fix works by changing the implementation to be closer to
 MuseScore 2. This works by simply only checking to use the numbers if
 the numerator string is empty. This way, if the denominator string is
 empty, the numerator string which will have the custom symbol, will line
 up in the middle. This was how the implementation worked in MuseScore 2.


backports/56 layout spatium.diff | (download)

mscore/pagesettings.cpp | 8 7 + 1 - 0 !
1 file changed, 7 insertions(+), 1 deletion(-)

 fix #188061: values in sp unit don't remain unchanged after changing spatium
 This is simply because `Score::spatiumChanged()` isn't called after
 applying changes in Page Settings dialogue. It is called for the
 preview score in the dialogue though, so the preview score has the
 correct display, but not the main score.


upstream/crash fontname.diff | (download)

mscore/inspector/inspectorBase.cpp | 6 3 + 3 - 0 !
1 file changed, 3 insertions(+), 3 deletions(-)

 fix #303619: musescore crashing when entering font name
 Resolves: https://musescore.org/en/node/303619.
 .
 Passing an empty string to QWidget::setStyleSheet() causes the widget's
 current style sheet to be removed, thus causing the widget's style to be
 inherited from its parent. This creates a problem in QComboBox::showPopup(),
 where it becomes possible that a pointer to a QStyle object could used after
 the object itself has been destroyed. A style sheet of " " can be used to
 override any previous style sheet without invalidating the current QStyle
 object.


backports/58 blank lines.diff | (download)

libmscore/textbase.cpp | 12 12 + 0 - 0 !
libmscore/textbase.h | 1 1 + 0 - 0 !
2 files changed, 13 insertions(+)

 fix #292652: empty lines become smaller


backports/58b empty lines.diff | (download)

libmscore/textbase.cpp | 32 26 + 6 - 0 !
libmscore/textbase.h | 7 4 + 3 - 0 !
libmscore/textedit.cpp | 6 3 + 3 - 0 !
3 files changed, 33 insertions(+), 12 deletions(-)

 fix #303087:
 Fixed a bug where the cursor would be on the wrong height
 after deleting all chars in a line


backports/59 blank lines.diff | (download)

libmscore/textbase.cpp | 56 51 + 5 - 0 !
libmscore/textbase.h | 3 2 + 1 - 0 !
libmscore/textedit.cpp | 10 8 + 2 - 0 !
3 files changed, 61 insertions(+), 8 deletions(-)

 fix #307721: blank lines ignored at top of text elements


upstream/wmclass.diff | (download)

build/Linux+BSD/mscore.desktop.in | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 fix #307593: prevent duplicated icon on ubuntu


backports/62 measure count.diff | (download)

libmscore/layout.cpp | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 fix #306333 - various type of edits change the measure count
 After a modification, a re-layout is triggered starting at the beginning of the
 system. The measure number of the first measure of the system is taken adding 1
 to the measure number of the last measure of previous system. However it was not
 taken into account whether that measure was excluded from measure count.


backports/63 minimise window.diff | (download)

mscore/mixer.cpp | 30 19 + 11 - 0 !
mscore/playpanel.cpp | 23 14 + 9 - 0 !
2 files changed, 33 insertions(+), 20 deletions(-)

 fix #298820: fix inability to minimize musescore on linux with gnome-based desktop environments
 The issue happens if some QML view is opened, e.g. a plugin dock or,
 more importantly, Palettes panel. Fixes the issue by leaving the code
 in Mixer and Play Panel forcing a window to take focus only in cases
 when it might make sense: when opening the corresponding widget and
 when unminimizing MuseScore if the widget is in floating state (otherwise
 it won't take focus). This is enough to avoid triggering the issue
 which happens only if Play Panel or Mixer is docked.


backports/change staff name.diff | (download)

mscore/editstaff.cpp | 46 29 + 17 - 0 !
mscore/editstaff.h | 2 1 + 1 - 0 !
mscore/propertymenu.cpp | 23 17 + 6 - 0 !
3 files changed, 47 insertions(+), 24 deletions(-)

 fix #88861: allow mid-score staff name changes


backports/plugin remove el.diff | (download)

mscore/plugin/api/elements.cpp | 45 45 + 0 - 0 !
mscore/plugin/api/elements.h | 15 15 + 0 - 0 !
mscore/plugin/api/qmlpluginapi.cpp | 13 13 + 0 - 0 !
mscore/plugin/api/qmlpluginapi.h | 1 1 + 0 - 0 !
4 files changed, 74 insertions(+)

 fix #291790, fix #267604: restore chord.remove() and chord.add() methods.
 Restore the add and remove QML methods for the
 Chord object. Adds exposed Element.parent property.
 These existed in v2.x. Finally it adds a removeElement
 method to PluginAPI for general element disposal.


backports/plugin select.diff | (download)

mscore/CMakeLists.txt | 2 2 + 0 - 0 !
mscore/plugin/api/qmlpluginapi.cpp | 3 3 + 0 - 0 !
mscore/plugin/api/score.h | 8 8 + 0 - 0 !
mscore/plugin/api/scoreelement.h | 11 10 + 1 - 0 !
mscore/plugin/api/selection.cpp | 32 32 + 0 - 0 !
mscore/plugin/api/selection.h | 54 54 + 0 - 0 !
mtest/CMakeLists.txt | 1 1 + 0 - 0 !
7 files changed, 110 insertions(+), 1 deletion(-)

 fix #291708: expose score.selection object to access to gui selected elements.
 This commit exposes the Score.selection.elements list
 enabling QML scripts to manipulate on user selected score elements.
 The expectation is that additional selection information will be
 provided on this object in the future.


backports/plugin onRun.diff | (download)

mscore/plugin/mscorePlugins.cpp | 8 7 + 1 - 0 !
1 file changed, 7 insertions(+), 1 deletion(-)

 fix #72416: fix onrun() being executed in a wrong instance of dock and dialog plugins


backports/plugin size.diff | (download)

mscore/plugin/mscorePlugins.cpp | 6 6 + 0 - 0 !
1 file changed, 6 insertions(+)

 fix dock plugins appearing with zero height
 Plugin should assign reasonable values to implicitHeight/implicitWidth
 (or, less preferably, height/width) properties for this to work
 properly.


backports/plugin qml.diff | (download)

mscore/musescore.h | 2 1 + 1 - 0 !
mscore/plugin/mscorePlugins.cpp | 12 8 + 4 - 0 !
mscore/plugin/pluginManager.cpp | 4 2 + 2 - 0 !
3 files changed, 11 insertions(+), 7 deletions(-)

 fix #275268: don't list non-plugin qml files in plugin manager


backports/plugin parent.diff | (download)

mscore/plugin/api/elements.cpp | 3 3 + 0 - 0 !
mscore/plugin/api/scoreelement.cpp | 2 2 + 0 - 0 !
2 files changed, 5 insertions(+)

 plugins: fix a crash on getting element's parent if parent is null


backports/5507.patch | (download)

libmscore/cmd.cpp | 17 11 + 6 - 0 !
1 file changed, 11 insertions(+), 6 deletions(-)

 fix #292648: make courtesy accidentals stay if notes are
 changed using Ctrl+Up/Down


backports/crash F9.diff | (download)

mscore/musescore.cpp | 7 2 + 5 - 0 !
mscore/musescore.h | 1 0 + 1 - 0 !
2 files changed, 2 insertions(+), 6 deletions(-)

 fix #309333: crash hiding palettes
 Resolves: https://musescore.org/en/node/309333
 .
 Crash happens on trying to set the focus upon closing the palette,
 we try to restore the previous focused widget.
 But it may no longer be valid.
 .
 Changed to return focus to the score view if possible,
 otherwise let Qt worry about it.


upstream/silence qdebug.diff | (download)

libmscore/xmlreader.cpp | 1 0 + 1 - 0 !
1 file changed, 1 deletion(-)

 silence some qdebug output
upstream/statusline pitch onofftime.diff | (download)

libmscore/note.cpp | 21 19 + 2 - 0 !
1 file changed, 19 insertions(+), 2 deletions(-)

 indicate pitch and on/off time in the status line
 - indicate sounding pitch if the global concert pitch toggle
   is off and the current instrument has an actual pitch,
   i.e. not beat/rhythm slashes or drums; this will show the
   identical pitch for nn-transposing instruments by design
   (to show were currently in transposing pitch mode, but the
   current instrument is not transposing) which helps debugging
 - indicate tuning (if any) after the sounding pitch (either mode)
 - show on/off times if at least one of them is nn-standard
 .
 The first change partially addresses node #283120.
 The on/off time was requested in node #290900#comment-927933
 (velocity is too hard, sorry about that).
upstream/improve mscore font.diff | (download)

fonts/mscore/genttf | 17 14 + 3 - 0 !
fonts/mscore/metadata.json | 41 20 + 21 - 0 !
fonts/mscore/mscore.sfd | 19123 8473 + 10650 - 0 !
3 files changed, 8507 insertions(+), 10674 deletions(-)

 merge parnassus accidentals into mscore
 and fix a couple of issues
 .
 Note: debian/upstream/mscore.ttf was generated by me with FontForge
 from the fully patched mscore.sfd; FontForge at package build time
 would have been more problematic
upstream/fix accidental paren pos.diff | (download)

libmscore/accidental.cpp | 5 3 + 2 - 0 !
1 file changed, 3 insertions(+), 2 deletions(-)

 honour symbol advance width from font when drawing accidentals
 more specifically, accidentals in parenthess (or other enclosing
 symbols) now have the advance width of the enclosing glyph and the
 glyph from the accidental itself honoured fixing asymmetric render
 of a parenthesised 
upstream/smufl fixes.diff | (download)

fonts/gootville/metadata.json | 30380 15190 + 15190 - 0 !
fonts/mscore/metadata.json | 8 4 + 4 - 0 !
fonts/smufl/classes.json | 7532 3766 + 3766 - 0 !
fonts/smufl/glyphnames.json | 21206 10603 + 10603 - 0 !
fonts/smufl/ranges.json | 6838 3419 + 3419 - 0 !
fonttools/.gitignore | 3 3 + 0 - 0 !
fonttools/smufl2sym-cmd-SymId.jq | 5 5 + 0 - 0 !
fonttools/smufl2sym-cmd-debug.jq | 2 2 + 0 - 0 !
fonttools/smufl2sym-cmd-symNames.jq | 3 3 + 0 - 0 !
fonttools/smufl2sym-cmd-symUserNames.jq | 7 7 + 0 - 0 !
fonttools/smufl2sym-in-trans.json | 221 221 + 0 - 0 !
fonttools/smufl2sym.bat | 31 31 + 0 - 0 !
fonttools/smufl2sym.sh | 36 36 + 0 - 0 !
libmscore/sym.cpp | 264 138 + 126 - 0 !
libmscore/sym.h | 10 7 + 3 - 0 !
15 files changed, 33435 insertions(+), 33111 deletions(-)

 update smufl metadata, fixing a typo and reducing indent
 plus drop redundant whitespace at EOL in JSON files
 and regenerate sym.* from it
upstream/sprintf.diff | (download)

mscore/playpanel.cpp | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 fix possible buffer overflow
 compiler warning, very unlikely to hit in production
 .
 Better fix would be QString::asprintf() but Qt discourages that
 for some unconceivable reason...
upstream/crash frame dblclick.diff | (download)

mscore/editelement.cpp | 3 3 + 0 - 0 !
1 file changed, 3 insertions(+)

 fix #300855: trying to add text to a vertical/horizontal
 frame after double click causes crash
 .
 The crash is caused by ed.getData(t) failing and returning nullptr,
 where t is the newly added text element and ed is the score edit data.
 The interesting thing is that this didn't return nullptr when not in
 edit mode already before adding the text - it was only a problem when
 adding text when already in edit mode. The line of relevance that is
 the root of this whole problem is, in ScoreView::changeState:
 .
 if (s == state)
       return;
 .
 where s is the new state and state is the current one. This is right at
 the start, so if we're already in edit mode, then the crucial
 startEdit() call further down the function won't happen. Of course,
 startEdit is the bit that's responsible for clearing the edit data and
 adding the new edit data for the new text element. So, when it doesn't
 run, there's no edit data for the new text. And when there's no edit
 data, getData fails. And when getData fails, text->cursor(ed) crashes
 on a Q_ASSERT.


upstream/crash frame spacer.diff | (download)

libmscore/system.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #303611: adding fixed spacer can clash
 with vertical frame below, causing a crash.


upstream/fix ins hframe.diff | (download)

libmscore/box.cpp | 4 4 + 0 - 0 !
1 file changed, 4 insertions(+)

 fix #306612: insert horizontal frame in front of frame using palette
 .
 Resolves: https://musescore.org/en/node/306612
 .
 You can select a frame and insert any other type of frame in front
 using the palette, but you cannot insert a horizontal frame this way.
 Cause is simple: missing handler for this in acceptDrop() and drop().
 Fix is trivial.


backports/fix add img to frame.diff | (download)

mscore/propertymenu.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #307720: assertion failure adding image to vertical frame
 .
 Resolves: https://musescore.org/en/node/307720
 .
 we are tryng to cast an element to an HBox that isn't necessarily one.
 No reason to do this; it works just fine without the cast.


upstream/crash voice tied.diff | (download)

libmscore/undo.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #307900: crash when switching voices if notes are tied


backports/crash nested boxen.diff | (download)

libmscore/measurebase.cpp | 26 26 + 0 - 0 !
libmscore/measurebase.h | 3 2 + 1 - 0 !
2 files changed, 28 insertions(+), 1 deletion(-)

 fix #307841: crashes and more with hbox within vbox
 .
 Resolves: https://musescore.org/en/node/307841
 .
 When adding an hbox within a vbox,
 we never set its tick,
 and as a result other operations that depend on the tick
 (like triggering layout) do not work correctly.
 This is fixed by overriding HBox::tick() to check the parent.
 It was also necessary to alter MeasureBase::triggerLayout(),
 as it actually did nothing for hbox-within-vbox,
 because it checks for prev() and next() which are nullptr here.
 That check is needed to avoid triggering layout for measurebases
 that are not yet added to the score.
 This problem is solved here by checking the parent,
 just as is done for the tick itself.


upstream/corrupt ins frame.diff | (download)

libmscore/edit.cpp | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 fix #307929: corruption when inserting frame in front of nested frame
 .
 Resolves: https://musescore.org/en/node/307929
 .
 If you try to insert a frame in front of a horizontal frame
 that itself is nested within a vertical frame,
 the list of measurebases for the scores gets corrupted,
 since the horizontal frame is not actually part of the list.
 Solution here is to make sure we get the top level measurebase
 that contains the current measurebase.
 In most cases, it's the same thing,
 but this will return the vertical frame in the case at hand.


backports/fix frame breaks.diff | (download)

libmscore/edit.cpp | 7 4 + 3 - 0 !
libmscore/layout.cpp | 38 31 + 7 - 0 !
libmscore/layoutbreak.h | 2 1 + 1 - 0 !
libmscore/measurebase.cpp | 16 16 + 0 - 0 !
libmscore/measurebase.h | 1 1 + 0 - 0 !
5 files changed, 53 insertions(+), 11 deletions(-)

 fix #288098, #307301, #305958, #295629: interactions between breaks and frames
 .
 Resolves: https://musescore.org/en/node/288098
 Resolves: https://musescore.org/en/node/307301
 Resolves: https://musescore.org/en/node/305958
 Resolves: https://musescore.org/en/node/295629
 .
 A number of bugs all turn out to be related to a single root cause,
 where we don't correctly handle checking for section breaks in the
 presence of frames.
 In the case of the long instrument name showing inappropriately, it's
 because in the case where the previous systems is just a frame, we
 don't see any measure, so we fall back to relying on the layout of the
 previous system having already set up the context for us. This isn't
 necessarily valid when doing partial layout.
 So we need to check more thoroughly here, accepting a frame if it has a
 section break itself, but otherwise searching backwards looking for
 frame with a break or a measure.
 That is, we need to skip break-less frames when looking to see if we
 are starting a section. I have therefore implemented such a function.
 .
 This turns out to also fix an issue with horizontal frames, where a
 break on a horizontal frame ending a system was being ignored for the
 purpose of setting long names.
 .
 The same applies to the new first system indent facility, so while
 these bugs are not recent regressions, they take on new importance in
 3.6.
 .
 The new function is also used to fix a related by with measure numbers,
 where a frame could get in the way of resetting them after a section
 break. It is used again to solve the corresponding issue on MusicXML
 export.
 .
 Along the way I discovered a bug leading to an assertion failure when
 deleting breaks attached to frames, so I needed to fix that by making
 sure LayoutBreak::measure() doesn't assume its parent is in fact an
 actual Measure as opposed to a MeasureBase.


backports/fix frame breaks 2.diff | (download)

libmscore/layout.cpp | 6 3 + 3 - 0 !
1 file changed, 3 insertions(+), 3 deletions(-)

 fix #317747: measure number appears after section break
 Resolves: https://musescore.org/en/node/317747#comment-1063687
 .
 In implementing a bunch of related fixes for the behavior of
 section breaks followed by frames or breaks *on* frames*
 in https://github.com/musescore/MuseScore/pull/7026/,
 I introduced a new function designed to find relevant section breaks.
 However, I missed one opportunity to use this function
 (even though I left a TODO for this),
 and in one place where I did call the function,
 I neglected to actually use its return value.
 As a result, in one situation where it previously worked
 to place the section break on a frame
 but failed when placing the frame after the section break,
 my change merely reversed these two cases.
 .
 This commit fixes those two oversights.
 In these two places where the code previously assumed
 we had a MeasureBase that made sense to check for section breaks,
 we now call findPotentialSectionBreak() to look backwards.
 This ensures we don't miss breaks on or before frames
 in these two places in the code.


upstream/fix lyrics init.diff | (download)

libmscore/lyrics.h | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 fix initialization of lyricslinesegment members
 .
 Fixes random hanging on PNG export of some scores, see
 https://musescore.org/en/node/293523#comment-940874


upstream/fix lyrics even style.diff | (download)

libmscore/style.cpp | 12 6 + 6 - 0 !
1 file changed, 6 insertions(+), 6 deletions(-)

 fix #290947: lyrics: frame, border and highlight styling regressions
 .
 where these for even lyrics can't get set and if tried odd lyrics are
 getting set instead


upstream/fix lyrics yoff parts.diff | (download)

libmscore/lyrics.cpp | 3 2 + 1 - 0 !
1 file changed, 2 insertions(+), 1 deletion(-)

 fix #295357: lyrics y offset in parts lost on save/reload
 .
 In 3.0 - 3.0.5, it was not possible to change the Y position of lyrics.
 You could try, and an offset would be recorded, but it would have no effect on layout.
 Starting with 3.1, it became possible to change the Y position for lyrics.
 For compatibility, we cleared the Y offset when reading  3.0 - 3.0.5 scores,
 since it would have been ignored originally.
 However, the code doing the version check fails in parts,
 because mscoreVersion() returns an empty string in that case.
 This change simply amends the check to use masterScore() rather than score(),
 so parts no longer return an empty version,
 and also adds an explicit check for the version being empty,
 so the check works correctly in test mode,
 where this field is often empty even for the master score.


backports/initElementStyle later.diff | (download)

libmscore/articulation.cpp | 2 1 + 1 - 0 !
libmscore/dynamic.cpp | 2 1 + 1 - 0 !
libmscore/fermata.cpp | 2 1 + 1 - 0 !
libmscore/textline.cpp | 4 2 + 2 - 0 !
4 files changed, 5 insertions(+), 5 deletions(-)

 make sure initelementstyle() is called after
 initialising the member to provide style settings are overwritten
 by the member initialisation.


gh9000/c41a06bc809f0f17349988e8be764dc3c760722c.diff | (download)

libmscore/rest.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #321809: crash when pasting note(head) onto mmrest


gh9000/745ae112a14dab30be263762f942136cc0629dcf.diff | (download)

libmscore/noteentry.cpp | 24 13 + 11 - 0 !
1 file changed, 13 insertions(+), 11 deletions(-)

 fix #274126 crash when entering music on top of an unterminated slur by midi


gh9000/3681b72032f35e731ff3e2bc933528a9ae594777.diff | (download)

libmscore/noteentry.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #321716: fix entering 8th notes in realtime midi input modes
 When comparing a Fraction (ticks2measureEnd) to the TDuration of the note being entered
 (is.duration()), the Fraction is implicitly converted by the TDuration(const Fraction&) ctor.
 Because of extra logic in TDuration, this can trigger a Q_ASSERT and crash Musescore in case the
 remaining Fraction cannot be exactly converted into a proper TDuration.  In this case, this point is
 reached when ticks2measureEnd = 5/8 and is.duration() = 1/8.
 .
 Since what we really want here is to compare the Fraction to the exact note duration (and not the
 other way around), we can just do an exact comparison between is.duration().fraction() and
 ticks2measureEnd to achieve the same goal.


gh9000/994ca186ddac51f5f8b036b63d0cb29056b53c6e.diff | (download)

libmscore/ambitus.cpp | 10 10 + 0 - 0 !
libmscore/ambitus.h | 2 2 + 0 - 0 !
2 files changed, 12 insertions(+)

 fix gh#9447: crash on removing accidental from ambitus
 Fixed by just ignoring the operation, i.e. not removing the accidental.
 Instead do this via the Inspector.


gh9000/fix divbyzero.diff | (download)

libmscore/fraction.h | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 part of a bugfix thats generally useful


gh9000/af53da9b4dae7e32edab41d1233e17331af6826a.diff | (download)

libmscore/edit.cpp | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 fix #328337: crash on deleting time signatures in front of multimeasure rests


gh9000/8c4b4f69264deb398dc4767c9d2cf1f4da3447c7.diff | (download)

mscore/events.cpp | 9 9 + 0 - 0 !
1 file changed, 9 insertions(+)

 fix #324840: ctrl+scrollwheel zoom on linux x11
 With recent libinput versions zooming with Ctrl+Scrollwheel would zoom
 in huge steps. This change enforces the previous behavior for Linux
 only.


gh9000/f39e81f8d1f4ec7fb1367b2f175a887634474583.diff | (download)

midi/midifile.cpp | 11 9 + 2 - 0 !
miditools/midifile.cpp | 11 9 + 2 - 0 !
2 files changed, 18 insertions(+), 4 deletions(-)

 fix #310158: don't null terminate midi text meta events


gh9000/b359c3d4131cb58b868107f0dc64c9c0e705749c.diff | (download)

mscore/alsa.cpp | 1 1 + 0 - 0 !
mscore/alsamidi.h | 2 1 + 1 - 0 !
mscore/mididriver.cpp | 8 7 + 1 - 0 !
3 files changed, 9 insertions(+), 2 deletions(-)

 fix gh#10407: alsa sequencer device leaks when toggling midi on/off


gh9000/2c5901551af50cb703d182a684fc265ea6b7a4ee.diff | (download)

libmscore/edit.cpp | 6 6 + 0 - 0 !
1 file changed, 6 insertions(+)

 fix gh#10653: crash converting to whole note twice, on a certain score.


gh9000/3a2ebebd69744347677022862cadfad5f0b40923.diff | (download)

libmscore/cmd.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #332925: half duration shortcut crashes musescore when time signature is 5/4


gh9000/8bb0d3e12382aedc865730dc4047b1830c4d928f.diff | (download)

libmscore/range.cpp | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 fix #333979: crash when changing time signature on a 'hanging' slur


gh9000/c7c294cb7166f5e1ab0da445e9493d14ac01c9b6.diff | (download)

libmscore/rendermidi.cpp | 2 2 + 0 - 0 !
libmscore/score.h | 1 1 + 0 - 0 !
2 files changed, 3 insertions(+)

 fix #324232: after a midi export without expanding repeats, those are not played in the current session anymore either


gh9000/67826dec1a820bbfaa341ec5211c05215eb205e0.diff | (download)

mscore/exportmidi.cpp | 18 10 + 8 - 0 !
mscore/exportmidi.h | 2 1 + 1 - 0 !
2 files changed, 11 insertions(+), 9 deletions(-)

 fix #207346: restrict first track to timing events
 Currently, exported MIDI files will have data events in the first MIDI
 track. While this is not forbidden by the standard, the industry
 convention is to only put timing related events in the first track, in
 which case it is called a tempo track. MuseScore should follow that
 convention because a lot of the available software assumes this
 convention. This has been discussed and agreed upon in:
 https://musescore.org/en/node/207346