mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
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 e4dba53232
)
This commit is contained in:
parent
5c4c8065aa
commit
741d81ecc6
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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(),
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user