diff --git a/src/Buffer.cpp b/src/Buffer.cpp index ad119bdbf1..54c34c20db 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -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 diff --git a/src/Buffer.h b/src/Buffer.h index 3c4d0f40d0..fc02c6a05d 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -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