From 280c5d982ca1b87bf24e6cf32b4c31486b23fe67 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Mon, 10 Nov 2014 18:40:11 -0700 Subject: [PATCH] fix #38766: bad input position after timesig change --- libmscore/edit.cpp | 15 +++++++++++++++ mscore/dragdrop.cpp | 3 +++ 2 files changed, 18 insertions(+) diff --git a/libmscore/edit.cpp b/libmscore/edit.cpp index 4e6f75116b09..cdb414305904 100644 --- a/libmscore/edit.cpp +++ b/libmscore/edit.cpp @@ -431,6 +431,21 @@ bool Score::rewriteMeasures(Measure* fm, Measure* lm, const Fraction& ns) qFatal("Cannot write measures"); connectTies(true); + if (noteEntryMode()) { + // set input cursor to possibly re-written segment + int icTick = inputPos(); + Segment* icSegment = tick2segment(icTick, false, Segment::Type::ChordRest); + if (!icSegment) { + // this can happen if cursor was on a rest + // and in the rewriting it got subsumed into a full measure rest + Measure* icMeasure = tick2measure(icTick); + if (!icMeasure) // shouldn't happen, but just in case + icMeasure = firstMeasure(); + icSegment = icMeasure->first(Segment::Type::ChordRest); + } + inputState().setSegment(icSegment); + } + return true; } diff --git a/mscore/dragdrop.cpp b/mscore/dragdrop.cpp index d3b33d17384a..ad61876b7406 100644 --- a/mscore/dragdrop.cpp +++ b/mscore/dragdrop.cpp @@ -605,6 +605,9 @@ void ScoreView::dropEvent(QDropEvent* event) dragElement = 0; setDropTarget(0); // this also resets dropRectangle and dropAnchor score()->endCmd(); + // update input cursor position (must be done after layout) + if (noteEntryMode()) + moveCursor(); mscore->endCmd(); return; }