X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FCutAndPaste.cpp;h=ecb4cbcafbaddca26dd6d71779a35775eea70975;hb=4df7d8ab1ae443119057562fb76c2e438c053eef;hp=e7a17f17200eedce34dca0f2c9e4cc9ce562e7eb;hpb=3aecc2c4fff1dc1408a34f61b6a6a7a028a55efc;p=lyx.git diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index e7a17f1720..ecb4cbcafb 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -221,8 +221,12 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist, InsetIterator const i_end = inset_iterator_end(in); for (InsetIterator it = inset_iterator_begin(in); it != i_end; ++it) { + // Even though this will also be done later, it has to be done here + // since, e.g., InsetLabel::updateCommand() is going to try to access + // the buffer() member. + it->setBuffer(const_cast(buffer)); switch (it->lyxCode()) { - + case LABEL_CODE: { // check for duplicates InsetCommand & lab = static_cast(*it); @@ -427,14 +431,16 @@ void copySelectionHelper(Buffer const & buf, ParagraphList const & pars, // ERT paragraphs have the Language latex_language. // This is invalid outside of ERT, so we need to change it // to the buffer language. - if (it->ownerCode() == ERT_CODE || it->ownerCode() == LISTINGS_CODE) { + if (it->ownerCode() == ERT_CODE || it->ownerCode() == LISTINGS_CODE) it->changeLanguage(buf.params(), latex_language, buf.language()); - } + it->setInsetOwner(0); } - // do not copy text (also nested in insets) which is marked as deleted - acceptChanges(copy_pars, buf.params()); + // do not copy text (also nested in insets) which is marked as deleted, + // unless the whole selection was deleted + if (!isFullyDeleted(copy_pars)) + acceptChanges(copy_pars, buf.params()); DocumentClass * d = const_cast(dc); cutstack.push(make_pair(copy_pars, d)); @@ -736,7 +742,11 @@ void copySelectionToStack(Cursor const & cur, CutStack & cutstack) copySelectionHelper(*cur.buffer(), pars, par, cur.selEnd().pit(), pos, cur.selEnd().pos(), cur.buffer()->params().documentClassPtr(), cutstack); - dirtyTabularStack(false); + + // Reset the dirty_tabular_stack_ flag only when something + // is copied to the clipboard (not to the selectionBuffer). + if (&cutstack == &theCuts) + dirtyTabularStack(false); } if (cur.inMathed()) {