If a file is saved as, reset its master if it has any, thus preventing a crash (bug 8161)

This commit is contained in:
Juergen Spitzmueller 2012-05-19 14:03:50 +02:00
parent c3fef458c7
commit 993fa89009
3 changed files with 27 additions and 0 deletions

View File

@ -4417,6 +4417,7 @@ bool Buffer::saveAs(FileName const & fn)
// we need to check that the locations of child buffers
// are still valid.
checkChildBuffers();
checkMasterBuffer();
return true;
} else {
// save failed
@ -4465,4 +4466,25 @@ void Buffer::checkChildBuffers()
d->position_to_children.clear();
}
// If a child has been saved under a different name/path, it might have been
// orphaned. Therefore the master needs to be reset (bug 8161).
void Buffer::checkMasterBuffer()
{
Buffer const * const master = masterBuffer();
if (master == this)
return;
// necessary to re-register the child (bug 5873)
// FIXME: clean up updateMacros (here, only
// child registering is needed).
master->updateMacros();
// (re)set master as master buffer, but only
// if we are a real child
if (master->isChild(this))
setParent(master);
else
setParent(0);
}
} // namespace lyx

View File

@ -662,6 +662,8 @@ public:
WordLangTuple & word_lang, docstring_list & suggestions) const;
///
void checkChildBuffers();
///
void checkMasterBuffer();
/// compute statistics between \p from and \p to
/// \p from initial position

View File

@ -97,6 +97,9 @@ What's new
* DOCUMENT INPUT/OUTPUT
- Fix crash when saving a child document to a new name/directory and attempting
to view/export the document afterwards (bug 8161).
- Fixed an infinite loop when exporting a file with list
or bibliography environments to DocBook (bug 7914).