commit 741d81ecc6d029425b4fea6815cdbb49cc7dc857
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.
(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 2d18aba..43e6278 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 540397d..ae80ac0 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 ca2d06e..bdff46e 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 41760b5..2158128 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 e5345dd..20ff864 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 4b8da77..ddb13bf 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 d871660..4b19c3c 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)