From 2dc62d0405e1ea1722cee933e02e528bea5e0f8e Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Fri, 15 Feb 2019 15:33:23 +0100 Subject: [PATCH] DEPM: handle undo when deleting spaces Also, do not do any DEPM when the buffer is read-only. --- src/Text.h | 4 ++-- src/Text2.cpp | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Text.h b/src/Text.h index 054b6f6ee4..a177a83217 100644 --- a/src/Text.h +++ b/src/Text.h @@ -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. diff --git a/src/Text2.cpp b/src/Text2.cpp index 6ce41a6d52..d70dfc15ca 100644 --- a/src/Text2.cpp +++ b/src/Text2.cpp @@ -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 -- 2.39.2