From 741d81ecc6d029425b4fea6815cdbb49cc7dc857 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sun, 22 Jul 2018 22:18:50 +0200 Subject: [PATCH] Do not remove character at start of paragraph when cutting The part of code that removed space at start of paragraph have been there forever, but its intent is unclear. For example, cutting text at the end of a paragraph will lead to remove space at the start of this same paragraph. The removal of this functionality is offset by a rewrite of DEPM that makes it more thorough. Fixes bug #10503. (cherry picked from commit e4dba53232bc71d5a577466e7fb4a3251944d9d8) --- src/CutAndPaste.cpp | 21 ++++++++------------- src/CutAndPaste.h | 4 ++-- src/Text.cpp | 4 ++-- src/Text3.cpp | 22 +++++++++++----------- src/TextMetrics.cpp | 2 +- src/lyxfind.cpp | 2 +- src/mathed/InsetMathNest.cpp | 2 +- 7 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 2d18abad8d..43e6278b3e 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -897,7 +897,7 @@ size_type numberOfSelections() namespace { -void cutSelectionHelper(Cursor & cur, CutStack & cuts, bool doclear, bool realcut, bool putclip) +void cutSelectionHelper(Cursor & cur, CutStack & cuts, bool realcut, bool putclip) { // This doesn't make sense, if there is no selection if (!cur.selection()) @@ -946,11 +946,6 @@ void cutSelectionHelper(Cursor & cur, CutStack & cuts, bool doclear, bool realcu cur.pos() = endpos; cur.pit() = endpit; - // sometimes necessary - if (doclear - && text->paragraphs()[begpit].stripLeadingSpaces(bp.track_changes)) - cur.fixIfBroken(); - // need a valid cursor. (Lgb) cur.clearSelection(); @@ -982,15 +977,15 @@ void cutSelectionHelper(Cursor & cur, CutStack & cuts, bool doclear, bool realcu } // namespace -void cutSelection(Cursor & cur, bool doclear, bool realcut) +void cutSelection(Cursor & cur, bool realcut) { - cutSelectionHelper(cur, theCuts, doclear, realcut, true); + cutSelectionHelper(cur, theCuts, realcut, true); } -void cutSelectionToTemp(Cursor & cur, bool doclear, bool realcut) +void cutSelectionToTemp(Cursor & cur, bool realcut) { - cutSelectionHelper(cur, tempCut, doclear, realcut, false); + cutSelectionHelper(cur, tempCut, realcut, false); } @@ -1300,7 +1295,7 @@ void pasteSimpleText(Cursor & cur, bool asParagraphs) return; cur.recordUndo(); - cutSelection(cur, true, false); + cutSelection(cur, false); if (asParagraphs) cur.text()->insertStringAsParagraphs(cur, text, cur.current_font); else @@ -1356,14 +1351,14 @@ void replaceSelectionWithString(Cursor & cur, docstring const & str) par.insertChar(pos, *cit, font, cur.buffer()->params().track_changes); // Cut the selection - cutSelection(cur, true, false); + cutSelection(cur, false); } void replaceSelection(Cursor & cur) { if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); } diff --git a/src/CutAndPaste.h b/src/CutAndPaste.h index 540397dde9..ae80ac0a31 100644 --- a/src/CutAndPaste.h +++ b/src/CutAndPaste.h @@ -59,9 +59,9 @@ void replaceSelection(Cursor & cur); * system clipboard. Set this to false to only delete the * selection. */ -void cutSelection(Cursor & cur, bool doclear = true, bool realcut = true); +void cutSelection(Cursor & cur, bool realcut = true); /// Like cutSelection, but only put to temporary cut buffer -void cutSelectionToTemp(Cursor & cur, bool doclear = true, bool realcut = true); +void cutSelectionToTemp(Cursor & cur, bool realcut = true); /// Push the current selection to the cut buffer and the system clipboard. void copySelection(Cursor const & cur); diff --git a/src/Text.cpp b/src/Text.cpp index ca2d06eabb..bdff46efec 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -1481,7 +1481,7 @@ void Text::deleteWordForward(Cursor & cur, bool const force) cursorForwardOneWord(cur); cur.setSelection(); if (force || !cur.confirmDeletion()) { - cutSelection(cur, true, false); + cutSelection(cur, false); cur.checkBufferStructure(); } } @@ -1499,7 +1499,7 @@ void Text::deleteWordBackward(Cursor & cur, bool const force) cursorBackwardOneWord(cur); cur.setSelection(); if (force || !cur.confirmDeletion()) { - cutSelection(cur, true, false); + cutSelection(cur, false); cur.checkBufferStructure(); } } diff --git a/src/Text3.cpp b/src/Text3.cpp index 41760b5a7c..2158128891 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -292,7 +292,7 @@ static bool doInsertInset(Cursor & cur, Text * text, if (cmd.action() == LFUN_INDEX_INSERT) copySelectionToTemp(cur); else - cutSelectionToTemp(cur, false, pastesel); + cutSelectionToTemp(cur, pastesel); cur.clearSelection(); gotsel = true; } else if (cmd.action() == LFUN_INDEX_INSERT) { @@ -669,7 +669,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_WORD_DELETE_FORWARD: if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); else deleteWordForward(cur, cmd.getArg(0) == "force"); finishChange(cur, false); @@ -677,7 +677,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_WORD_DELETE_BACKWARD: if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); else deleteWordBackward(cur, cmd.getArg(0) == "force"); finishChange(cur, false); @@ -685,7 +685,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_LINE_DELETE_FORWARD: if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); else tm->deleteLineForward(cur); finishChange(cur, false); @@ -1163,7 +1163,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) needsUpdate |= erase(cur); cur.resetAnchor(); } else { - cutSelection(cur, true, false); + cutSelection(cur, false); singleParUpdate = false; } moveCursor(cur, false); @@ -1193,7 +1193,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } } } else { - cutSelection(cur, true, false); + cutSelection(cur, false); singleParUpdate = false; } break; @@ -1280,7 +1280,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } */ if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); cur.insert(inset); cur.forceBufferUpdate(); if (inset->editable() && inset->asInsetText()) @@ -1472,7 +1472,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } case LFUN_CUT: - cutSelection(cur, true, true); + cutSelection(cur, true); cur.message(_("Cut")); break; @@ -1911,7 +1911,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) // true (on). if (lyxrc.auto_region_delete && cur.selection()) - cutSelection(cur, false, false); + cutSelection(cur, false); cur.clearSelection(); for (char_type c : cmd.argument()) @@ -1992,7 +1992,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) if (cmd.argument().empty() && cur.selection()) { // if command argument is empty use current selection as parameter. docstring ds = cur.selectionAsString(false); - cutSelection(cur, true, false); + cutSelection(cur, false); FuncRequest cmd0(cmd, ds); inset = createInset(cur.buffer(), cmd0); } else { @@ -2459,7 +2459,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) if (tclass.floats().typeExist(to_utf8(cmd.argument()))) { cur.recordUndo(); if (cur.selection()) - cutSelection(cur, true, false); + cutSelection(cur, false); breakParagraph(cur); if (cur.lastpos() != 0) { diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index e5345dd040..20ff864ed8 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -1573,7 +1573,7 @@ void TextMetrics::deleteLineForward(Cursor & cur) if (!cur.selection()) text_->deleteWordForward(cur); else - cap::cutSelection(cur, true, false); + cap::cutSelection(cur, false); cur.checkBufferStructure(); } } diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 4b8da77ac0..ddb13bf69f 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -1463,7 +1463,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M changeFirstCase(repl_buffer, text_uppercase, text_uppercase); } } - cap::cutSelection(cur, false, false); + cap::cutSelection(cur, false); if (cur.inTexted()) { repl_buffer.changeLanguage( repl_buffer.language(), diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index d871660d51..4b19c3ce09 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -560,7 +560,7 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_CUT: cur.recordUndo(); - cutSelection(cur, true, true); + cutSelection(cur, true); cur.message(_("Cut")); // Prevent stale position >= size crash // Probably not necessary anymore, see eraseSelection (gb 2005-10-09) -- 2.39.5