#include "lyxrc.h"
#include "lyxtext.h"
#include "lyx_cb.h"
+#include "bufferview_funcs.h"
#include "gettext.h"
#include "LyXView.h"
#include "vc-backend.h"
extern BufferView * current_view; // called too many times in this file...
+using std::vector;
using std::find;
using std::endl;
}
-extern void MenuWrite(Buffer *);
+extern bool MenuWrite(Buffer *);
+extern bool MenuWriteAs(Buffer *);
bool BufferList::QwriteAll()
{
for(BufferStorage::iterator it = bstore.begin();
it != bstore.end(); ++it) {
if (!(*it)->isLyxClean()) {
- switch(AskConfirmation(_("Changes in document:"),
- MakeDisplayPath((*it)->fileName(),
- 50),
- _("Save document?"))) {
- case 1: // Yes
- MenuWrite((*it));
- break;
- case 2: // No
- askMoreConfirmation = true;
- unsaved += MakeDisplayPath((*it)->fileName(),
- 50);
- unsaved += "\n";
- break;
- case 3: // Cancel
- return false;
+ string fname;
+ if ((*it)->isUnnamed())
+ fname = OnlyFilename((*it)->fileName());
+ else
+ fname = MakeDisplayPath((*it)->fileName(), 50);
+ bool reask = true;
+ while(reask) {
+ switch(AskConfirmation(_("Changes in document:"),
+ fname,
+ _("Save document?"))) {
+ case 1: // Yes
+ if ((*it)->isUnnamed())
+ reask = !MenuWriteAs((*it));
+ else {
+ reask = !MenuWrite((*it));
+ }
+ break;
+ case 2: // No
+ // if we crash after this we could
+ // have no autosave file but I guess
+ // this is really inprobable (Jug)
+ if ((*it)->isUnnamed()) {
+ removeAutosaveFile((*it)->fileName());
+ }
+ askMoreConfirmation = true;
+ unsaved += MakeDisplayPath(fname, 50);
+ unsaved += "\n";
+ reask = false;
+ break;
+ case 3: // Cancel
+ return false;
+ }
}
}
}
bool BufferList::close(Buffer * buf)
{
- if (buf->getUser()) buf->getUser()->insetUnlock();
+ // CHECK
+ // Trace back why we need to use buf->getUser here.
+ // Perhaps slight rewrite is in order? (Lgb)
+ if (buf->getUser()) buf->getUser()->insetUnlock();
if (buf->paragraph && !buf->isLyxClean() && !quitting) {
- ProhibitInput();
- switch(AskConfirmation(_("Changes in document:"),
- MakeDisplayPath(buf->fileName(), 50),
- _("Save document?"))){
- case 1: // Yes
- if (buf->save()) {
- lastfiles->newFile(buf->fileName());
- } else {
- AllowInput();
+ if (buf->getUser())
+ ProhibitInput(buf->getUser());
+ string fname;
+ if (buf->isUnnamed())
+ fname = OnlyFilename(buf->fileName());
+ else
+ fname = MakeDisplayPath(buf->fileName(), 50);
+ bool reask = true;
+ while(reask) {
+ switch(AskConfirmation(_("Changes in document:"),
+ fname,
+ _("Save document?"))){
+ case 1: // Yes
+ if (buf->isUnnamed())
+ reask = !MenuWriteAs(buf);
+ else if (buf->save()) {
+ lastfiles->newFile(buf->fileName());
+ } else {
+ if (buf->getUser())
+ AllowInput(buf->getUser());
+ return false;
+ }
+ break;
+ case 2:
+ if (buf->isUnnamed()) {
+ removeAutosaveFile(buf->fileName());
+ }
+ reask = false;
+ break;
+ case 3: // Cancel
+ if (buf->getUser())
+ AllowInput(buf->getUser());
return false;
}
- break;
- case 3: // Cancel
- AllowInput();
- return false;
- }
- AllowInput();
+ }
+ if (buf->getUser())
+ AllowInput(buf->getUser());
}
bstore.release(buf);
if (!(*it)->isDepClean(mastertmpdir)) {
string writefile = mastertmpdir;
writefile += '/';
- writefile += ChangeExtension((*it)->fileName(),
- ".tex", true);
+ writefile += (*it)->getLatexName();
(*it)->makeLaTeXFile(writefile, mastertmpdir,
false, true);
(*it)->markDepClean(mastertmpdir);
bool madeit = false;
lyxerr <<_("lyx: Attempting to save"
- " document ")
- << (*it)->fileName()
- << _(" as...") << endl;
+ " document ");
+ if ((*it)->isUnnamed())
+ lyxerr << OnlyFilename((*it)->fileName());
+ else
+ lyxerr << (*it)->fileName();
+ lyxerr << _(" as...") << endl;
for (int i = 0; i < 3 && !madeit; ++i) {
string s;
// 2) In HOME directory.
// 3) In "/tmp" directory.
if (i == 0) {
+ if ((*it)->isUnnamed())
+ continue;
s = (*it)->fileName();
} else if (i == 1) {
s = AddName(GetEnvPath("HOME"),
b->paragraph = new LyXParagraph;
}
- b->markDirty();
+#warning Why mark a new document dirty? I deactivate this (Jug)
+ if (!lyxrc.new_ask_filename) {
+// b->markDirty();
+ b->setUnnamed();
+ }
b->setReadonly(false);
return b;
if (LyXVC::file_not_found_hook(s)) {
// Ask if the file should be checked out for
// viewing/editing, if so: load it.
- if (AskQuestion(_("Do you want to retrive file under version control?"))) {
+ if (AskQuestion(_("Do you want to retrieve file under version control?"))) {
// How can we know _how_ to do the checkout?
// With the current VC support it has to be,
// a RCS file since CVS do not have special ,v files.