#include "support/lassert.h"
#include "support/limited_stack.h"
#include "support/lstrings.h"
+#include "support/TempFile.h"
#include "frontends/alert.h"
#include "frontends/Clipboard.h"
pit_type pit = cur.pit();
pos_type pos = cur.pos();
bool need_update = false;
+
+ if (parlist.empty())
+ return PasteReturnValue(pit, pos, need_update);
+
InsetText * target_inset = cur.inset().asInsetText();
if (!target_inset) {
InsetTabular * it = cur.inset().asInsetTabular();
target_inset = it? it->cell(cur.idx())->asInsetText() : 0;
}
LASSERT(target_inset, return PasteReturnValue(pit, pos, need_update));
- ParagraphList & pars = target_inset->paragraphs();
- if (parlist.empty())
- return PasteReturnValue(pit, pos, need_update);
-
- BOOST_ASSERT (pos <= pars[pit].size());
+ ParagraphList & pars = target_inset->paragraphs();
+ LASSERT(pos <= pars[pit].size(),
+ return PasteReturnValue(pit, pos, need_update));
// Make a copy of the CaP paragraphs.
ParagraphList insertion = parlist;
- DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
// Now remove all out of the pars which is NOT allowed in the
// new environment and set also another font if that is required.
}
// set the paragraphs to plain layout if necessary
+ DocumentClassConstPtr newDocClass = buffer.params().documentClassPtr();
if (cur.inset().usePlainLayout()) {
bool forcePlainLayout = cur.inset().forcePlainLayout();
Layout const & plainLayout = newDocClass->plainLayout();
if (forcePlainLayout || parLayout == defaultLayout)
par->setLayout(plainLayout);
}
- } else { // check if we need to reset from plain layout
+ } else { // check if we need to reset from plain layout
Layout const & defaultLayout = newDocClass->defaultLayout();
Layout const & plainLayout = newDocClass->plainLayout();
ParagraphList::iterator const end = insertion.end();
// new temporary directory, etc) every time, and then to destroy it. So maybe
// it's worth just keeping this one around.
// FIXME THREAD
+ static TempFile tempfile("clipboard.internal");
+ tempfile.setAutoRemove(false);
static Buffer * staticbuffer = theBufferList().newInternalBuffer(
- FileName::tempName("clipboard.internal").absFileName());
+ tempfile.name().absFileName());
// These two things only really need doing the first time.
staticbuffer->setUnnamed(true);
it->setLayout(newtc[name]);
}
- // character styles
+ // character styles and hidden table cells
InsetIterator const i_end = inset_iterator_end(in);
for (InsetIterator it = inset_iterator_begin(in); it != i_end; ++it) {
- if (it->lyxCode() != FLEX_CODE)
+ InsetCode const code = it->lyxCode();
+ if (code == FLEX_CODE) {
// FIXME: Should we verify all InsetCollapsable?
- continue;
-
- docstring const layoutName = it->layoutName();
- docstring const & n = newone->insetLayout(layoutName).name();
- bool const is_undefined = n.empty() ||
- n == DocumentClass::plainInsetLayout().name();
- if (!is_undefined)
- continue;
-
- // The flex inset is undefined in newtc
- docstring const oldname = from_utf8(oldtc.name());
- docstring const newname = from_utf8(newtc.name());
- docstring s;
- if (oldname == newname)
- s = bformat(_("Flex inset %1$s is undefined after "
- "reloading `%2$s' layout."), layoutName, oldname);
- else
- s = bformat(_("Flex inset %1$s is undefined because of "
- "conversion from `%2$s' layout to `%3$s'."),
- layoutName, oldname, newname);
- // To warn the user that something had to be done.
- errorlist.push_back(ErrorItem(
- _("Undefined flex inset"),
- s, it.paragraph().id(), it.pos(), it.pos() + 1));
+ docstring const layoutName = it->layoutName();
+ docstring const & n = newone->insetLayout(layoutName).name();
+ bool const is_undefined = n.empty() ||
+ n == DocumentClass::plainInsetLayout().name();
+ if (!is_undefined)
+ continue;
+
+ // The flex inset is undefined in newtc
+ docstring const oldname = from_utf8(oldtc.name());
+ docstring const newname = from_utf8(newtc.name());
+ docstring s;
+ if (oldname == newname)
+ s = bformat(_("Flex inset %1$s is undefined after "
+ "reloading `%2$s' layout."), layoutName, oldname);
+ else
+ s = bformat(_("Flex inset %1$s is undefined because of "
+ "conversion from `%2$s' layout to `%3$s'."),
+ layoutName, oldname, newname);
+ // To warn the user that something had to be done.
+ errorlist.push_back(ErrorItem(
+ _("Undefined flex inset"),
+ s, it.paragraph().id(), it.pos(), it.pos() + 1));
+ } else if (code == TABULAR_CODE) {
+ // The recursion above does not catch paragraphs in "hidden" cells,
+ // i.e., ones that are part of a multirow or multicolum. So we need
+ // to handle those separately.
+ // This is the cause of bug #9049.
+ InsetTabular * table = it->asInsetTabular();
+ table->setLayoutForHiddenCells(newtc);
+ }
}
}