DEPM: handle undo when deleting spaces

Also, do not do any DEPM when the buffer is read-only.
This commit is contained in:
Jean-Marc Lasgouttes 2019-02-15 15:33:23 +01:00
parent dbe963a1ef
commit 2dc62d0405
2 changed files with 7 additions and 2 deletions

View File

@ -301,13 +301,13 @@ public:
/// delete double spaces, leading spaces, and empty paragraphs around old cursor.
/// \retval true if a change has happened and we need a redraw.
/// FIXME: replace Cursor with DocIterator. This is not possible right
/// now because recordUndo() is called which needs a Cursor.
/// Handles undo.
static bool deleteEmptyParagraphMechanism(Cursor & cur,
Cursor & old, bool & need_anchor_change);
/// delete double spaces, leading spaces, and empty paragraphs
/// from \first to \last paragraph
/// Does NOT handle undo (responsibility of the caller)
void deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool trackChanges);
/// To resolve macros properly the texts get their DocIterator.

View File

@ -819,6 +819,10 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
Paragraph & oldpar = old.paragraph();
bool const trackChanges = cur.buffer()->params().track_changes;
// We do not do anything on read-only documents
if (cur.buffer()->isReadonly())
return false;
// We allow all kinds of "mumbo-jumbo" when freespacing.
if (oldpar.isFreeSpacing())
return false;
@ -879,6 +883,7 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
// Remove spaces and adapt cursor.
if (num_spaces > 0) {
old.recordUndo();
int const deleted =
deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
// correct cur position