@@ -3359,30 +3359,18 @@ bool TextBase::editNonTextual(EditData& ed)
33593359 return false ;
33603360 }
33613361
3362- bool leftRightKey = ed.key == Key_Left || ed.key == Key_Right;
3363- bool altMod = ed.modifiers & AltModifier;
3364- bool shiftMod = ed.modifiers & ShiftModifier;
3365-
3366- bool changeAnchorType = shiftMod && altMod && leftRightKey;
3367- if (changeAnchorType) {
3368- undoChangeProperty (Pid::ANCHOR_TO_END_OF_PREVIOUS, !anchorToEndOfPrevious (), propertyFlags (Pid::ANCHOR_TO_END_OF_PREVIOUS));
3369- }
3370- bool doesntNeedMoveSeg = changeAnchorType && ((ed.key == Key_Left && anchorToEndOfPrevious ())
3371- || (ed.key == Key_Right && !anchorToEndOfPrevious ()));
3372- if (doesntNeedMoveSeg) {
3373- checkMeasureBoundariesAndMoveIfNeed ();
3374- return true ;
3375- }
3376-
3377- bool moveSeg = shiftMod && (leftRightKey || ed.key == Key_Home || ed.key == Key_End);
3378- if (moveSeg) {
3362+ Segment* oldSeg = toSegment (parent ());
3363+ if (ed.modifiers & ShiftModifier
3364+ && (ed.key == Key_Left || ed.key == Key_Right || ed.key == Key_Home || ed.key == Key_End)) {
33793365 bool moved = moveSegment (ed);
3380- EditTimeTickAnchors::updateAnchors (this , track ());
3366+ if (oldSeg != toSegment (parent ())) {
3367+ EditTimeTickAnchors::updateAnchors (this , track ());
3368+ }
33813369 checkMeasureBoundariesAndMoveIfNeed ();
33823370 return moved;
33833371 }
33843372
3385- if (shiftMod ) {
3373+ if (ed. modifiers & ShiftModifier ) {
33863374 return false ;
33873375 }
33883376
@@ -3462,11 +3450,28 @@ bool TextBase::moveSegment(const EditData& ed)
34623450 }
34633451
34643452 Segment* newSeg = nullptr ;
3465- Segment* prevSeg = curSeg;
3466- if (anchorToEndOfPrevious () && prevSeg->prev1ChordRestOrTimeTick ()) {
3467- curSeg = prevSeg->prev1ChordRestOrTimeTick ();
3453+
3454+ bool beforeFirstSeg = false ;
3455+
3456+ if (anchorToEndOfPrevious ()) {
3457+ if (curSeg->prev1ChordRestOrTimeTick ()) {
3458+ if (ed.key == Key_Right || ed.key == Key_End) {
3459+ curSeg = curSeg->prev1ChordRestOrTimeTick ();
3460+ }
3461+ } else {
3462+ beforeFirstSeg = true ;
3463+ }
3464+ }
3465+
3466+ if (ed.modifiers & AltModifier) {
3467+ undoChangeProperty (Pid::ANCHOR_TO_END_OF_PREVIOUS, !anchorToEndOfPrevious (), propertyFlags (Pid::ANCHOR_TO_END_OF_PREVIOUS));
3468+ } else {
3469+ undoResetProperty (Pid::ANCHOR_TO_END_OF_PREVIOUS);
3470+ }
3471+
3472+ if (beforeFirstSeg) {
3473+ return true ;
34683474 }
3469- bool endAnchor = false ;
34703475
34713476 switch (ed.key ) {
34723477 case Key_Left: {
@@ -3487,7 +3492,6 @@ bool TextBase::moveSegment(const EditData& ed)
34873492 Measure* m = score ()->lastMeasure ();
34883493 EditTimeTickAnchors::updateAnchors (m, staffIdx ());
34893494 newSeg = m->getChordRestOrTimeTickSegment (m->endTick ());
3490- endAnchor = true ;
34913495 }
34923496 } else {
34933497 newSeg = curSeg->next1ChordRestOrTimeTick ();
@@ -3510,21 +3514,14 @@ bool TextBase::moveSegment(const EditData& ed)
35103514 Measure* m = score ()->lastMeasure ();
35113515 EditTimeTickAnchors::updateAnchors (m, staffIdx ());
35123516 newSeg = m->getChordRestOrTimeTickSegment (m->endTick ());
3513- endAnchor = true ;
35143517 }
35153518 break ;
35163519 }
35173520 default :
35183521 break ;
35193522 }
35203523
3521- if (endAnchor && !anchorToEndOfPrevious ()) {
3522- undoChangeProperty (Pid::ANCHOR_TO_END_OF_PREVIOUS, true , propertyFlags (Pid::ANCHOR_TO_END_OF_PREVIOUS));
3523- } else if (!(ed.modifiers & AltModifier) && anchorToEndOfPrevious ()) {
3524- undoResetProperty (Pid::ANCHOR_TO_END_OF_PREVIOUS);
3525- }
3526-
3527- if (!newSeg || newSeg == prevSeg) {
3524+ if (!newSeg) {
35283525 return false ;
35293526 }
35303527
0 commit comments