mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Fix bug #8837: LyX hangs on selection
The code that checks whether the cursor was at the end of a row in Cursor::upDowninText was not able to set boundary correctly. This causes a hang in because the cursor got stuck on a line and there is an infinite loop BufferView::dispatch when trying to go down. The fix is to avoid using the watered-down TextMetrics::x2pos wrapper around getColumnNearX and use the real thing instead. Eventually, the last user of x2pos (InsetTabular) should be fixed and the method should go away.
This commit is contained in:
parent
a27333144d
commit
264ea28cbd
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user