// File already open?
Buffer * checkBuffer = theBufferList().getBuffer(filename);
if (checkBuffer) {
- // sometimes (when setting the master buffer from a child)
+ // Sometimes (when setting the master buffer from a child)
// we accept a dirty buffer right away (otherwise we'd get
- // an infinite loop (bug 5514)
- if (checkBuffer->isClean() || acceptDirty)
+ // an infinite loop (bug 5514).
+ // We also accept a dirty buffer when the document has not
+ // yet been saved to disk.
+ if (checkBuffer->isClean() || acceptDirty || !filename.exists())
return checkBuffer;
- docstring const file = makeDisplayPath(filename.absFilename(), 20);
+ docstring const file = makeDisplayPath(filename.absFileName(), 20);
docstring const text = bformat(_(
"The document %1$s is already loaded and has unsaved changes.\n"
"Do you want to abandon your changes and reload the version on disk?"), file);
if (!filename.isReadableFile()) {
docstring text = bformat(_("The file %1$s exists but is not "
"readable by the current user."),
- from_utf8(filename.absFilename()));
+ from_utf8(filename.absFileName()));
Alert::error(_("File not readable!"), text);
return 0;
}
- Buffer * b = theBufferList().newBuffer(filename.absFilename());
+ Buffer * b = theBufferList().newBuffer(filename.absFileName());
if (!b) {
// Buffer creation is not possible.
return 0;
}
if (!b->loadLyXFile(filename)) {
+ // do not save an emergency file when releasing the buffer
+ b->markClean();
theBufferList().release(b);
return 0;
}
docstring text = bformat(_("The document %1$s does not yet "
"exist.\n\nDo you want to create a new document?"),
- from_utf8(filename.absFilename()));
+ from_utf8(filename.absFileName()));
if (!Alert::prompt(_("Create new document?"),
text, 0, 1, _("&Create"), _("Cancel")))
- return newFile(filename.absFilename(), string(), true);
+ return newFile(filename.absFileName(), string(), true);
return 0;
}
if (!tname.empty()) {
if (!b->readFile(tname)) {
- docstring const file = makeDisplayPath(tname.absFilename(), 50);
+ docstring const file = makeDisplayPath(tname.absFileName(), 50);
docstring const text = bformat(
_("The specified document template\n%1$s\ncould not be read."),
file);
if (!isNamed) {
b->setUnnamed();
b->setFileName(filename);
- }
+ } else
+ // in this case, the user chose the filename, so we assume that she
+ // really does want this file.
+ b->markDirty();
b->setReadonly(false);
b->setFullyLoaded(true);
}
while (theBufferList().exists(filename) || filename.isReadableFile());
- return newFile(filename.absFilename(), templatename, false);
+ return newFile(filename.absFileName(), templatename, false);
}
if (!fname.exists())
return 0;
- buffer = theBufferList().newBuffer(fname.absFilename());
+ buffer = theBufferList().newBuffer(fname.absFileName());
if (!buffer)
// Buffer creation is not possible.
return 0;