commit ed9e7d41f5823eea682d3a0f405e8e287e8bd8dd
Author: Juergen Spitzmueller <[email protected]>
Date: Thu Sep 14 19:26:20 2023 +0200
Do not paste deleted text with CT on (#12900)
---
src/CutAndPaste.cpp | 42 +++++++++++++++++++++++++-----------------
1 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp
index 5e9a84a..fde103a 100644
--- a/src/CutAndPaste.cpp
+++ b/src/CutAndPaste.cpp
@@ -109,6 +109,21 @@ struct PasteReturnValue {
bool needupdate;
};
+
+/// return true if the whole ParagraphList is deleted
+static bool isFullyDeleted(ParagraphList const & pars)
+{
+ pit_type const pars_size = static_cast<pit_type>(pars.size());
+
+ // check all paragraphs
+ for (pit_type pit = 0; pit < pars_size; ++pit) {
+ if (!pars[pit].empty()) // prevent assertion failure
+ if (!pars[pit].isDeleted(0, pars[pit].size()))
+ return false;
+ }
+ return true;
+}
+
PasteReturnValue
pasteSelectionHelper(DocIterator const & cur, ParagraphList const & parlist,
DocumentClassConstPtr oldDocClass, cap::BranchAction
branchAction,
@@ -279,12 +294,20 @@ pasteSelectionHelper(DocIterator const & cur,
ParagraphList const & parlist,
}
if (lyxrc.ct_markup_copied) {
- // Only change to inserted if ct is active,
+ // Only remove deleted text and change
+ // the rest to inserted if ct is active,
// otherwise leave markup as is
- if (buffer.params().track_changes)
+ if (buffer.params().track_changes) {
+ if (!isFullyDeleted(insertion))
+ tmpbuf->acceptChanges(0,
tmpbuf->size());
+ else
+ tmpbuf->rejectChanges(0,
tmpbuf->size());
tmpbuf->setChange(Change(Change::INSERTED));
+ }
} else
// Resolve all markup to inserted or unchanged
+ // Deleted text has already been removed on copy
+ // (copySelectionHelper)
tmpbuf->setChange(Change(buffer.params().track_changes ?
Change::INSERTED :
Change::UNCHANGED));
}
@@ -667,21 +690,6 @@ void putClipboard(ParagraphList const & paragraphs,
}
-/// return true if the whole ParagraphList is deleted
-static bool isFullyDeleted(ParagraphList const & pars)
-{
- pit_type const pars_size = static_cast<pit_type>(pars.size());
-
- // check all paragraphs
- for (pit_type pit = 0; pit < pars_size; ++pit) {
- if (!pars[pit].empty()) // prevent assertion failure
- if (!pars[pit].isDeleted(0, pars[pit].size()))
- return false;
- }
- return true;
-}
-
-
void copySelectionHelper(Buffer const & buf, Text const & text,
pit_type startpit, pit_type endpit,
int start, int end, DocumentClassConstPtr dc, CutStack & cutstack)
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs