From: Abdelrazak Younes Date: Wed, 10 Jan 2007 10:59:18 +0000 (+0000) Subject: fix cursor movements. X-Git-Tag: 1.6.10~11236 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=31cbae750d98c65de43af2e6c19a86e706998e73;p=lyx.git fix cursor movements. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16638 a592a061-630c-0410-9148-cb99ea01b6c8 --- 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;