diff --git a/src/BufferView.C b/src/BufferView.C index 7e084ad548..31bb27145c 100644 --- a/src/BufferView.C +++ b/src/BufferView.C @@ -1238,6 +1238,8 @@ void BufferView::setCursor(DocIterator const & dit) dit[i].inset().edit(cursor_, true); cursor_.setCursor(dit); + // remember new position. + cursor_.setTargetX(); cursor_.selection() = false; } @@ -1281,6 +1283,7 @@ bool BufferView::mouseSetCursor(LCursor & cur) cursor_ = cur; cursor_.clearSelection(); + // remember new position. cursor_.setTargetX(); finishUndo(); return update; diff --git a/src/text.C b/src/text.C index 7e841e122b..86110e8811 100644 --- a/src/text.C +++ b/src/text.C @@ -1724,6 +1724,8 @@ void LyXText::setCursorFromCoordinates(LCursor & cur, int const x, int const y) << endl; setCursor(cur, pit, pos, true, bound); + // remember new position. + cur.setTargetX(); } diff --git a/src/text2.C b/src/text2.C index 6b13d5b5d8..ca16466462 100644 --- a/src/text2.C +++ b/src/text2.C @@ -985,13 +985,16 @@ bool LyXText::cursorUp(LCursor & cur) ParagraphMetrics const & pm = tm.parMetrics(cur.pit()); int row; - int const x = cur.targetX(); - if (cur.pos() && cur.boundary()) row = pm.pos2row(cur.pos()-1); else row = pm.pos2row(cur.pos()); + // remember current position only if we are not at the end of a row. + if (cur.pos() != pm.rows()[row].endpos()) + cur.setTargetX(); + int const x = cur.targetX(); + if (!cur.selection()) { int const y = bv_funcs::getPos(cur.bv(), cur, cur.boundary()).y_; LCursor old = cur; @@ -1041,13 +1044,16 @@ bool LyXText::cursorDown(LCursor & cur) ParagraphMetrics const & pm = tm.parMetrics(cur.pit()); int row; - int const x = cur.targetX(); - if (cur.pos() && cur.boundary()) row = pm.pos2row(cur.pos()-1); else row = pm.pos2row(cur.pos()); + // remember current position only if we are not at the end of a row. + if (cur.pos() != pm.rows()[row].endpos()) + cur.setTargetX(); + int const x = cur.targetX(); + if (!cur.selection()) { int const y = bv_funcs::getPos(cur.bv(), cur, cur.boundary()).y_; LCursor old = cur;