From: Vincent van Ravesteijn Date: Wed, 17 Nov 2010 02:18:12 +0000 (+0000) Subject: Generalize Buffer::autoSave() for both the threaded as the forked process call. Also... X-Git-Tag: 2.0.0~1836 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=208acbc7280740452699d3bd5cf2eeadc7ace350;p=features.git 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 --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index e2aa726664..c9d0b63800 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2025,6 +2025,7 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) case LFUN_BUFFER_AUTO_SAVE: autoSave(); + resetAutosaveTimers(); break; case LFUN_BRANCH_ADD: { @@ -3270,23 +3271,36 @@ void Buffer::moveAutosaveFile(support::FileName const & oldauto) const } -// Perfect target for a thread... -void Buffer::autoSave() const +bool Buffer::autoSave() const { - if (d->bak_clean || isReadonly()) { - // We don't save now, but we'll try again later - resetAutosaveTimers(); - return; - } + Buffer const * buf = d->cloned_buffer_ ? d->cloned_buffer_ : this; + if (buf->d->bak_clean || isReadonly()) + return true; - // emit message signal. message(_("Autosaving current document...")); - AutoSaveBuffer autosave(*this, getAutosaveFileName()); - autosave.start(); - - d->bak_clean = true; - - resetAutosaveTimers(); + 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(); + return true; + } } diff --git a/src/Buffer.h b/src/Buffer.h index 35d1da1b42..68f8b88317 100644 --- a/src/Buffer.h +++ b/src/Buffer.h @@ -235,8 +235,8 @@ private: public: /// \name Functions involved in autosave and emergency files. //@{ - /// - void autoSave() const; + /// Save an autosave file to #filename.lyx# + bool autoSave() const; /// save emergency file /// \return a status message towards the user. docstring emergencyWrite(); diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 249968cdfb..f8a15cdccc 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1530,6 +1530,7 @@ void GuiView::autoSave() d.autosave_watcher_.setFuture(f); #else buffer->autoSave(); + resetAutosaveTimers(); #endif }