commit 2dc62d0405e1ea1722cee933e02e528bea5e0f8e
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Fri Feb 15 15:33:23 2019 +0100

    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 054b6f6..a177a83 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 6ce41a6..d70dfc1 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

Reply via email to