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 10:16:28 +02:00
parent 9d69d99379
commit ab1434dce3
2 changed files with 24 additions and 0 deletions

View File

@ -4591,6 +4591,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
@ -4639,4 +4640,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

@ -691,6 +691,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