pos_type endPos = cur.selectionEnd().pos();
// keep selection info, because endPos becomes invalid after the first loop
- bool endsBeforeEndOfPar = (endPos < pars_[endPit].size());
+ bool const endsBeforeEndOfPar = (endPos < pars_[endPit].size());
// first, accept/reject changes within each individual paragraph (do not consider end-of-par)
for (pit_type pit = begPit; pit <= endPit; ++pit) {
if (pit == endPit && endPos == 0)
break; // last iteration anyway
- pos_type left = (pit == begPit ? begPos : 0);
- pos_type right = (pit == endPit ? endPos : parSize);
+ pos_type const left = (pit == begPit ? begPos : 0);
+ pos_type const right = (pit == endPit ? endPos : parSize);
if (left == right)
// there is no change here
// but we'll try the cheaper solution here.
cur.buffer()->clearReferenceCache();
+ // Do not revive deleted text
+ lyx::acceptChanges(plist, b.params());
+
// ERT paragraphs have the Language latex_language.
// This is invalid outside of ERT, so we need to
// change it to the buffer language.
for (; it != it_end; ++it)
it->changeLanguage(b.params(), latex_language, b.language());
+ /* If the inset is the only thing in paragraph and the layout
+ * is not plain, then the layout of the first paragraph of
+ * inset should be remembered.
+ * FIXME: this does not work as expected when change tracking
+ * is on However, we do not really know what to do in this
+ * case.
+ */
+ DocumentClass const & tclass = cur.buffer()->params().documentClass();
+ if (inset_it.lastpos() == 1
+ && plist[0].layout().name() != tclass.plainLayoutName())
+ cur.paragraph().makeSameLayout(plist[0]);
+
pasteParagraphList(cur, plist, b.params().documentClassPtr(),
b.errorList("Paste"));
}