#include "insets/InsetCommand.h"
#include "insets/InsetGraphics.h"
#include "insets/InsetGraphicsParams.h"
+#include "insets/InsetInclude.h"
#include "insets/InsetTabular.h"
#include "mathed/MathData.h"
}
// Prepare the paragraphs and insets for insertion.
- // A couple of insets store buffer references so need updating.
insertion.swap(in.paragraphs());
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);
break;
}
+ case INCLUDE_CODE: {
+ InsetInclude & inc = static_cast<InsetInclude &>(*it);
+ inc.updateCommand();
+ break;
+ }
+
case BIBITEM_CODE: {
// check for duplicates
InsetCommand & bib = static_cast<InsetCommand &>(*it);
// merge the first par of the insertion with the current par
mergeParagraph(buffer.params(), pars, pit);
}
- //FIXME: We should call setBuffer() on each inserted paragraph.
- // instead, we call setBuffer() for the main inset at the beginning
- // of updateLabels()
-
- pit_type last_paste = pit + insertion.size() - 1;
// Store the new cursor position.
+ pit_type last_paste = pit + insertion.size() - 1;
+ pit_type startpit = pit;
pit = last_paste;
pos = pars[last_paste].size();
+ // FIXME Should we do it here, or should we let updateLabels() do it?
+ // Set paragraph buffers. It's important to do this right away
+ // before something calls Inset::buffer() and causes a crash.
+ for (pit_type p = startpit; p <= pit; ++p)
+ pars[p].setBuffer(const_cast<Buffer &>(buffer));
+
// Join (conditionally) last pasted paragraph with next one, i.e.,
// the tail of the spliced document paragraph
if (!empty && last_paste + 1 != pit_type(pars.size())) {