Generalize Buffer::autoSave() for both the threaded as the forked process call. Also move out the resetAutosaveTimers as this is the task of the frontend as the core shouldn't know about any timer.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36325 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Vincent van Ravesteijn 2010-11-17 02:18:12 +00:00
parent a0916d4fef
commit 208acbc728
3 changed files with 31 additions and 16 deletions

View File

@ -2025,6 +2025,7 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
case LFUN_BUFFER_AUTO_SAVE: case LFUN_BUFFER_AUTO_SAVE:
autoSave(); autoSave();
resetAutosaveTimers();
break; break;
case LFUN_BRANCH_ADD: { case LFUN_BRANCH_ADD: {
@ -3270,23 +3271,36 @@ void Buffer::moveAutosaveFile(support::FileName const & oldauto) const
} }
// Perfect target for a thread... bool Buffer::autoSave() const
void Buffer::autoSave() const
{ {
if (d->bak_clean || isReadonly()) { Buffer const * buf = d->cloned_buffer_ ? d->cloned_buffer_ : this;
// We don't save now, but we'll try again later if (buf->d->bak_clean || isReadonly())
resetAutosaveTimers(); return true;
return;
}
// emit message signal.
message(_("Autosaving current document...")); message(_("Autosaving current document..."));
AutoSaveBuffer autosave(*this, getAutosaveFileName()); buf->d->bak_clean = true;
FileName const fname = getAutosaveFileName();
if (d->cloned_buffer_) {
// If this buffer is cloned, we assume that
// we are running in a separate thread already.
FileName const tmp_ret = FileName::tempName("lyxauto");
if (!tmp_ret.empty()) {
writeFile(tmp_ret);
// assume successful write of tmp_ret
if (tmp_ret.moveTo(fname))
return true;
}
// failed to write/rename tmp_ret so try writing direct
return writeFile(fname);
} else {
/// This function is deprecated as the frontend needs to take care
/// of cloning the buffer and autosaving it in another thread. It
/// is still here to allow (QT_VERSION < 0x040400).
AutoSaveBuffer autosave(*this, fname);
autosave.start(); autosave.start();
return true;
d->bak_clean = true; }
resetAutosaveTimers();
} }

View File

@ -235,8 +235,8 @@ private:
public: public:
/// \name Functions involved in autosave and emergency files. /// \name Functions involved in autosave and emergency files.
//@{ //@{
/// /// Save an autosave file to #filename.lyx#
void autoSave() const; bool autoSave() const;
/// save emergency file /// save emergency file
/// \return a status message towards the user. /// \return a status message towards the user.
docstring emergencyWrite(); docstring emergencyWrite();

View File

@ -1530,6 +1530,7 @@ void GuiView::autoSave()
d.autosave_watcher_.setFuture(f); d.autosave_watcher_.setFuture(f);
#else #else
buffer->autoSave(); buffer->autoSave();
resetAutosaveTimers();
#endif #endif
} }