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 &>(buffer));
switch (it->lyxCode()) {
-
+
case LABEL_CODE: {
// check for duplicates
InsetCommand & lab = static_cast<InsetCommand &>(*it);
// 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<DocumentClass *>(dc);
cutstack.push(make_pair(copy_pars, d));
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()) {