mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-05 13:26:21 +00:00
Fix bug #3199: change-next may leave empty lines behind
Using Cursor::setCursor or even BufferView::setCursor is often a bad idea since it does not run DEPM. In this case (and other cases in f&replace code) it is better to use BufferView::mouseSetCursor (which should maybe be renamed...).
This commit is contained in:
parent
959d2c5264
commit
77bf805155
@ -417,20 +417,15 @@ bool findPreviousChange(BufferView * bv)
|
||||
|
||||
bool findChange(BufferView * bv, bool next)
|
||||
{
|
||||
if (bv->cursor().selection()) {
|
||||
// set the cursor at the beginning or at the end of the selection
|
||||
// before searching. Otherwise, the current change will be found.
|
||||
if (next != (bv->cursor().top() > bv->cursor().normalAnchor()))
|
||||
bv->cursor().setCursorToAnchor();
|
||||
}
|
||||
|
||||
DocIterator cur = bv->cursor();
|
||||
Cursor cur(*bv);
|
||||
cur.setCursor(next ? bv->cursor().selectionEnd()
|
||||
: bv->cursor().selectionBegin());
|
||||
|
||||
// Are we within a change ? Then first search forward (backward),
|
||||
// clear the selection and search the other way around (see the end
|
||||
// of this function). This will avoid changes to be selected half.
|
||||
bool search_both_sides = false;
|
||||
DocIterator tmpcur = cur;
|
||||
Cursor tmpcur = cur;
|
||||
// Leave math first
|
||||
while (tmpcur.inMathed())
|
||||
tmpcur.pop_back();
|
||||
@ -449,8 +444,7 @@ bool findChange(BufferView * bv, bool next)
|
||||
if (!findChange(cur, next))
|
||||
return false;
|
||||
|
||||
bv->cursor().setCursor(cur);
|
||||
bv->cursor().resetAnchor();
|
||||
bv->mouseSetCursor(cur, false);
|
||||
|
||||
CursorSlice & tip = cur.top();
|
||||
|
||||
@ -478,12 +472,11 @@ bool findChange(BufferView * bv, bool next)
|
||||
}
|
||||
}
|
||||
|
||||
// Now put cursor to end of selection:
|
||||
bv->cursor().setCursor(cur);
|
||||
bv->cursor().setSelection();
|
||||
|
||||
if (search_both_sides) {
|
||||
bv->cursor().setSelection(false);
|
||||
if (!search_both_sides) {
|
||||
// Now set the selection.
|
||||
bv->mouseSetCursor(cur, true);
|
||||
} else {
|
||||
bv->mouseSetCursor(cur, false);
|
||||
findChange(bv, !next);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user