From e4dba53232bc71d5a577466e7fb4a3251944d9d8 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. --- 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 329d3f9248..0f269b27e4 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -905,7 +905,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()) @@ -954,11 +954,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(); @@ -990,15 +985,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); } @@ -1308,7 +1303,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 @@ -1364,14 +1359,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 d1d48d01d1..a67d1b5a59 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 d7540c8712..70f8eaa472 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -1484,7 +1484,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(); } } @@ -1502,7 +1502,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 0f40ec2dc6..c4cf664802 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) { @@ -713,7 +713,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); @@ -721,7 +721,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); @@ -729,7 +729,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); @@ -1207,7 +1207,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); @@ -1237,7 +1237,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } } } else { - cutSelection(cur, true, false); + cutSelection(cur, false); singleParUpdate = false; } break; @@ -1322,7 +1322,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()) @@ -1514,7 +1514,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } case LFUN_CUT: - cutSelection(cur, true, true); + cutSelection(cur, true); cur.message(_("Cut")); break; @@ -1919,7 +1919,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()) @@ -2000,7 +2000,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 { @@ -2469,7 +2469,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 82b9ebb160..2b0903c750 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -1564,7 +1564,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 398f11072b..0e79172fe5 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 ca3b01e4db..362af4ac20 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