From 9b5b7587a3e36e8ef2277b48e53874ab09a5e657 Mon Sep 17 00:00:00 2001 From: Bernhard Roider Date: Mon, 14 May 2007 20:03:40 +0000 Subject: [PATCH] add comments and rtl support for cursor positioning problem git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18323 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Text2.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Text2.cpp b/src/Text2.cpp index 9992d257c2..527e32f189 100644 --- a/src/Text2.cpp +++ b/src/Text2.cpp @@ -993,8 +993,16 @@ bool Text::cursorUp(Cursor & cur) int x = cur.targetX(); cur.setTargetX(); - if (cur.pos() != pm.rows()[row].endpos() || x < cur.targetX()) + // We want to keep the x-target on subsequent up movements + // that cross beyond the end of short lines. Thus a special + // handling when the cursor is at the end of line: Use the new + // x-target only if the old one was before the end of line. + if (cur.pos() != pm.rows()[row].endpos() + || (!cur.isRTL() && x < cur.targetX()) + || (cur.isRTL() && x > cur.targetX())) { + x = cur.targetX(); + } if (!cur.selection()) { int const y = bv_funcs::getPos(cur.bv(), cur, cur.boundary()).y_; @@ -1052,8 +1060,16 @@ bool Text::cursorDown(Cursor & cur) int x = cur.targetX(); cur.setTargetX(); - if (cur.pos() != pm.rows()[row].endpos() || x < cur.targetX()) + // We want to keep the x-target on subsequent down movements + // that cross beyond the end of short lines. Thus a special + // handling when the cursor is at the end of line: Use the new + // x-target only if the old one was before the end of line. + if (cur.pos() != pm.rows()[row].endpos() + || (!cur.isRTL() && x < cur.targetX()) + || (cur.isRTL() && x > cur.targetX())) { + x = cur.targetX(); + } if (!cur.selection()) { int const y = bv_funcs::getPos(cur.bv(), cur, cur.boundary()).y_; -- 2.39.5