commit e4dba53232bc71d5a577466e7fb4a3251944d9d8
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Sun Jul 22 22:18:50 2018 +0200

    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 329d3f9..0f269b2 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 d1d48d0..a67d1b5 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 d7540c8..70f8eaa 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 0f40ec2..c4cf664 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 82b9ebb..2b0903c 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 398f110..0e79172 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 ca3b01e..362af4a 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)

Reply via email to