]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Amend 207eaeee9071cb
[lyx.git] / src / Buffer.cpp
index 29dfe4bfe233e877170399bda5343dab7c3728ef..f4a02ca4e521f35048b2026bc8c8d6719091841a 100644 (file)
@@ -41,7 +41,6 @@
 #include "LaTeXFeatures.h"
 #include "LaTeX.h"
 #include "Layout.h"
-#include "Lexer.h"
 #include "LyXAction.h"
 #include "LyX.h"
 #include "LyXRC.h"
@@ -95,6 +94,7 @@
 #include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/gzstream.h"
+#include "support/Lexer.h"
 #include "support/lstrings.h"
 #include "support/mutex.h"
 #include "support/os.h"
@@ -5559,19 +5559,28 @@ Buffer::ReadStatus Buffer::reload()
        docstring const disp_fn = makeDisplayPath(d->filename.absFileName());
 
        // clear parent. this will get reset if need be.
+       Buffer const * oldparent = d->parent();
        d->setParent(nullptr);
        ReadStatus const status = loadLyXFile();
+       // The inset members in cursors held by buffer views are now wrong.
+       workAreaManager().sanitizeCursors();
+       setBusy(false);
        if (status == ReadSuccess) {
                updateBuffer();
                changed(true);
                updateTitles();
+               // reset parent if this hasn't been done yet
+               // but only if this is still its child (e.g.,
+               // not after the former child has been saved as...) 
+               if (!d->parent() && oldparent && oldparent->isFullyLoaded()
+                   && oldparent->isChild(this))
+                       d->setParent(oldparent);
                markClean();
                message(bformat(_("Document %1$s reloaded."), disp_fn));
                d->undo_.clear();
        } else {
                message(bformat(_("Could not reload document %1$s."), disp_fn));
        }
-       setBusy(false);
        removePreviews();
        updatePreviews();
        errors("Parse");