commit 2dc62d0405e1ea1722cee933e02e528bea5e0f8e
Author: Jean-Marc Lasgouttes <[email protected]>
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