mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-21 23:09:40 +00:00
Fix #7923: Don't clone all the children on autosave.
We split Buffer::clone() into various routines that know whether to clone the children. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40357 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
e5fea4dabb
commit
1ae948e136
@ -462,13 +462,13 @@ Buffer::~Buffer()
|
||||
}
|
||||
|
||||
|
||||
Buffer * Buffer::clone() const
|
||||
Buffer * Buffer::cloneFromMaster() const
|
||||
{
|
||||
BufferMap bufmap;
|
||||
cloned_buffers.push_back(new CloneList());
|
||||
CloneList * clones = cloned_buffers.back();
|
||||
|
||||
masterBuffer()->clone(bufmap, clones);
|
||||
masterBuffer()->cloneWithChildren(bufmap, clones);
|
||||
|
||||
// make sure we got cloned
|
||||
BufferMap::const_iterator bit = bufmap.find(this);
|
||||
@ -479,7 +479,7 @@ Buffer * Buffer::clone() const
|
||||
}
|
||||
|
||||
|
||||
void Buffer::clone(BufferMap & bufmap, CloneList * clones) const
|
||||
void Buffer::cloneWithChildren(BufferMap & bufmap, CloneList * clones) const
|
||||
{
|
||||
// have we already been cloned?
|
||||
if (bufmap.find(this) != bufmap.end())
|
||||
@ -502,7 +502,7 @@ void Buffer::clone(BufferMap & bufmap, CloneList * clones) const
|
||||
dit.setBuffer(buffer_clone);
|
||||
Buffer * child = const_cast<Buffer *>(it->second.second);
|
||||
|
||||
child->clone(bufmap, clones);
|
||||
child->cloneWithChildren(bufmap, clones);
|
||||
BufferMap::iterator const bit = bufmap.find(child);
|
||||
LASSERT(bit != bufmap.end(), continue);
|
||||
Buffer * child_clone = bit->second;
|
||||
@ -520,6 +520,14 @@ void Buffer::clone(BufferMap & bufmap, CloneList * clones) const
|
||||
}
|
||||
|
||||
|
||||
Buffer * Buffer::cloneBufferOnly() const {
|
||||
Buffer * buffer_clone = new Buffer(fileName().absFileName(), false, this);
|
||||
// we won't be cloning the children
|
||||
buffer_clone->d->children_positions.clear();
|
||||
return buffer_clone;
|
||||
}
|
||||
|
||||
|
||||
bool Buffer::isClone() const
|
||||
{
|
||||
return d->cloned_buffer_;
|
||||
|
@ -168,8 +168,11 @@ public:
|
||||
/// Destructor
|
||||
~Buffer();
|
||||
|
||||
///
|
||||
Buffer * clone() const;
|
||||
/// Clones the entire structure of which this Buffer is part, starting
|
||||
/// with the master and cloning all the children, too.
|
||||
Buffer * cloneFromMaster() const;
|
||||
/// Just clones this single Buffer. For autosave.
|
||||
Buffer * cloneBufferOnly() const;
|
||||
///
|
||||
bool isClone() const;
|
||||
|
||||
@ -232,7 +235,7 @@ private:
|
||||
///
|
||||
typedef std::map<Buffer const *, Buffer *> BufferMap;
|
||||
///
|
||||
void clone(BufferMap &, CloneList *) const;
|
||||
void cloneWithChildren(BufferMap &, CloneList *) const;
|
||||
/// save timestamp and checksum of the given file.
|
||||
void saveCheckSum() const;
|
||||
/// read a new file
|
||||
|
@ -1575,7 +1575,7 @@ void GuiView::autoSave()
|
||||
#if (QT_VERSION >= 0x040400)
|
||||
GuiViewPrivate::busyBuffers.insert(buffer);
|
||||
QFuture<docstring> f = QtConcurrent::run(GuiViewPrivate::autosaveAndDestroy,
|
||||
buffer, buffer->clone());
|
||||
buffer, buffer->cloneBufferOnly());
|
||||
d.autosave_watcher_.setFuture(f);
|
||||
#else
|
||||
buffer->autoSave();
|
||||
@ -3122,7 +3122,7 @@ bool GuiView::GuiViewPrivate::asyncBufferProcessing(
|
||||
QFuture<Buffer::ExportStatus> f = QtConcurrent::run(
|
||||
asyncFunc,
|
||||
used_buffer,
|
||||
used_buffer->clone(),
|
||||
used_buffer->cloneFromMaster(),
|
||||
format);
|
||||
setPreviewFuture(f);
|
||||
last_export_format = used_buffer->params().bufferFormat();
|
||||
|
Loading…
x
Reference in New Issue
Block a user