diff --git a/src/Cursor.cpp b/src/Cursor.cpp index 89db3a6dd0..d431965163 100644 --- a/src/Cursor.cpp +++ b/src/Cursor.cpp @@ -2107,17 +2107,13 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded) next_row = 0; } } - top().pos() = min(tm.x2pos(pit(), next_row, xo), top().lastpos()); - int const xpos = tm.x2pos(pit(), next_row, xo); - bool const at_end_row = xpos == tm.x2pos(pit(), next_row, tm.width()); - bool const at_beg_row = xpos == tm.x2pos(pit(), next_row, 0); - - if (at_end_row && at_beg_row) - // make sure the cursor ends up on this row - boundary(false); - else - boundary(at_end_row); + Row const & real_next_row = tm.parMetrics(pit()).rows()[next_row]; + bool bound = false; + pos_type const col = tm.getColumnNearX(pit(), real_next_row, + xo, bound); + top().pos() = real_next_row.pos() + col; + boundary(bound); updateNeeded |= bv().checkDepm(*this, old); }