From c00234503f9e07795723222e6095c022e45ad1dd Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Wed, 30 Jan 2019 23:50:53 +0100 Subject: [PATCH] Fix DEPM at end of paragraph Remove special handling of spaces at end of paragraph. Now they are handled like interword spaces by both DEPM methods. Fix off-by-one error in loop when testing for end of paragraph. Style: use Dociterator::lastpos() instead of Paragraph::size(). Part of bug #11412. --- src/Text2.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Text2.cpp b/src/Text2.cpp index 356e4e8dd1..ae35fad0cd 100644 --- a/src/Text2.cpp +++ b/src/Text2.cpp @@ -857,15 +857,14 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur, && !oldpar.isDeleted(from - 1)) --from; pos_type to = old.pos(); - while (to < oldpar.size() - 1 + while (to < old.lastpos() && oldpar.isLineSeparator(to) && !oldpar.isDeleted(to)) ++to; int num_spaces = to - from; - - // If we are not at the extremity of the paragraph, keep one space - if (from != to && from > 0 && to < oldpar.size()) + // If we are not at the start of the paragraph, keep one space + if (from != to && from > 0) --num_spaces; // If cursor is inside range, keep one additional space @@ -874,14 +873,14 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur, // Remove spaces and adapt cursor. if (num_spaces > 0) { - pos_type const oldsize = oldpar.size(); + pos_type const oldlast = old.lastpos(); deleteSpaces(oldpar, from, to, num_spaces, cur.buffer()->params().track_changes); // correct cur position // FIXME: there can be other cursors pointing there, we should update them if (same_par) { if (cur[depth].pos() >= to) - cur[depth].pos() -= oldsize - oldpar.size(); + cur[depth].pos() -= oldlast - old.lastpos(); else if (cur[depth].pos() > from) cur[depth].pos() = min(from + 1, old.lastpos()); need_anchor_change = true; -- 2.39.2