/// 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.
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;
// Remove spaces and adapt cursor.
if (num_spaces > 0) {
+ old.recordUndo();
int const deleted =
deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
// correct cur position