From: Jean-Marc Lasgouttes Date: Wed, 24 Apr 2013 10:04:49 +0000 (+0200) Subject: Fix bug #3199: change-next may leave empty lines behind X-Git-Tag: 2.0.7~108 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=0d4bc37fe6e5b56694e50e5a568244ca018cd19f;p=features.git 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...). --- diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index a4ae870930..862d01096b 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -412,20 +412,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(); @@ -444,8 +439,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(); @@ -473,12 +467,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); } diff --git a/status.20x b/status.20x index 922ea2df1f..146ccdaa1f 100644 --- a/status.20x +++ b/status.20x @@ -58,6 +58,8 @@ What's new - Fix crash when saving document with module that is not present (bug 8523). +- Fix bug where searching for next change may leave an empty paragraph + where cursor was (bug 3199). * DOCUMENTATION AND LOCALIZATION