mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
Fix crash reported by Kornel.
See https://marc.info/?l=lyx-devel&m=155879185229073&w=2. The problem is that, after saving the document and reloading, the TOC is corrupted, more or less, when we run through updateBuffer. So we reset it first.
This commit is contained in:
parent
48a5b16885
commit
c4658f046f
@ -4980,6 +4980,10 @@ void Buffer::updateBuffer(UpdateScope scope, UpdateType utype) const
|
||||
setChangesPresent(false);
|
||||
|
||||
Buffer & cbuf = const_cast<Buffer &>(*this);
|
||||
// if we are reloading, then we could have a dangling TOC,
|
||||
// in effect. so we need to go ahead and reset, even though
|
||||
// we will do so again when we rebuild the TOC later.
|
||||
cbuf.tocBackend().reset();
|
||||
|
||||
// do the real work
|
||||
ParIterator parit = cbuf.par_iterator_begin();
|
||||
|
@ -204,17 +204,24 @@ bool TocBackend::updateItem(DocIterator const & dit_in)
|
||||
}
|
||||
|
||||
|
||||
void TocBackend::update(bool output_active, UpdateType utype)
|
||||
void TocBackend::reset()
|
||||
{
|
||||
for (TocList::iterator it = tocs_.begin(); it != tocs_.end(); ++it)
|
||||
it->second->clear();
|
||||
for (auto const & t: tocs_)
|
||||
t.second->clear();
|
||||
tocs_.clear();
|
||||
builders_.clear();
|
||||
resetOutlinerNames();
|
||||
if (!buffer_->isInternal()) {
|
||||
DocIterator dit;
|
||||
buffer_->inset().addToToc(dit, output_active, utype, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TocBackend::update(bool output_active, UpdateType utype)
|
||||
{
|
||||
reset();
|
||||
if (buffer_->isInternal())
|
||||
return;
|
||||
|
||||
DocIterator dit;
|
||||
buffer_->inset().addToToc(dit, output_active, utype, *this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -113,6 +113,8 @@ public:
|
||||
void setBuffer(Buffer const * buffer) { buffer_ = buffer; }
|
||||
///
|
||||
void update(bool output_active, UpdateType utype);
|
||||
///
|
||||
void reset();
|
||||
/// \return true if the item was updated.
|
||||
bool updateItem(DocIterator const & pit);
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user