X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferList.cpp;h=c253282b795c029ea244769362d4fee5d9e6ca5c;hb=d1858b89d0828c3fe8f4e898f609aaed93333d33;hp=c0700b4f879ccaf74bf9a9146dfdb5213fdb54b9;hpb=bfad09a073b0e086c9657c7f9b90ddde960f9980;p=lyx.git diff --git a/src/BufferList.cpp b/src/BufferList.cpp index c0700b4f87..c253282b79 100644 --- a/src/BufferList.cpp +++ b/src/BufferList.cpp @@ -92,23 +92,47 @@ BufferList::const_iterator BufferList::end() const void BufferList::release(Buffer * buf) { - LASSERT(buf, /**/); + // We may leak here, but we probably do not need to + // shut down. + LASSERT(buf, return); BufferStorage::iterator const it = find(bstore.begin(), bstore.end(), buf); if (it != bstore.end()) { Buffer * tmp = (*it); - LASSERT(tmp, /**/); bstore.erase(it); + LASSERT(tmp, return); delete tmp; } } -Buffer * BufferList::newBuffer(string const & s, bool const ronly) +Buffer * BufferList::newInternalBuffer(string const & s) +{ + Buffer * const buf = createNewBuffer(s); + if (buf) { + buf->setInternal(true); + binternal.push_back(buf); + } + return buf; +} + + +Buffer * BufferList::newBuffer(string const & s) +{ + Buffer * const buf = createNewBuffer(s); + if (buf) { + LYXERR(Debug::INFO, "Assigning to buffer " << bstore.size()); + bstore.push_back(buf); + } + return buf; +} + + +Buffer * BufferList::createNewBuffer(string const & s) { auto_ptr tmpbuf; try { - tmpbuf.reset(new Buffer(s, ronly)); + tmpbuf.reset(new Buffer(s)); } catch (ExceptionMessage const & message) { if (message.type_ == ErrorException) { Alert::error(message.title_, message.details_); @@ -119,12 +143,6 @@ Buffer * BufferList::newBuffer(string const & s, bool const ronly) } } tmpbuf->params().useClassDefaults(); - if (tmpbuf->isInternal()) { - binternal.push_back(tmpbuf.get()); - } else { - LYXERR(Debug::INFO, "Assigning to buffer " << bstore.size()); - bstore.push_back(tmpbuf.get()); - } return tmpbuf.release(); } @@ -136,10 +154,9 @@ void BufferList::closeAll() } -FileNameList const & BufferList::fileNames() const +FileNameList BufferList::fileNames() const { - static FileNameList nvec; - nvec.clear(); + FileNameList nvec; BufferStorage::const_iterator it = bstore.begin(); BufferStorage::const_iterator end = bstore.end(); for (; it != end; ++it) { @@ -176,13 +193,14 @@ Buffer * BufferList::getBuffer(unsigned int choice) Buffer * BufferList::next(Buffer const * buf) const { - LASSERT(buf, /**/); + // Something is wrong, but we can probably survive it. + LASSERT(buf, return 0); if (bstore.empty()) return 0; BufferStorage::const_iterator it = find(bstore.begin(), bstore.end(), buf); - LASSERT(it != bstore.end(), /**/); + LASSERT(it != bstore.end(), return 0); ++it; Buffer * nextbuf = (it == bstore.end()) ? bstore.front() : *it; return nextbuf; @@ -191,13 +209,14 @@ Buffer * BufferList::next(Buffer const * buf) const Buffer * BufferList::previous(Buffer const * buf) const { - LASSERT(buf, /**/); + // Something is wrong, but we can probably survive it. + LASSERT(buf, return 0); if (bstore.empty()) return 0; BufferStorage::const_iterator it = find(bstore.begin(), bstore.end(), buf); - LASSERT(it != bstore.end(), /**/); + LASSERT(it != bstore.end(), return 0); Buffer * previousbuf = (it == bstore.begin()) ? bstore.back() : *(it - 1); return previousbuf; @@ -205,8 +224,10 @@ Buffer * BufferList::previous(Buffer const * buf) const void BufferList::updateIncludedTeXfiles(string const & masterTmpDir, - OutputParams const & runparams) + OutputParams const & runparams_in) { + OutputParams runparams = runparams_in; + runparams.is_child = true; BufferStorage::iterator it = bstore.begin(); BufferStorage::iterator end = bstore.end(); for (; it != end; ++it) { @@ -217,6 +238,7 @@ void BufferList::updateIncludedTeXfiles(string const & masterTmpDir, (*it)->markDepClean(masterTmpDir); } } + runparams.is_child = false; } @@ -246,11 +268,13 @@ bool BufferList::exists(FileName const & fname) const namespace { + struct equivalent_to : public binary_function { bool operator()(FileName const & x, FileName const & y) const { return equivalent(x, y); } }; + } @@ -322,7 +346,7 @@ void BufferList::recordCurrentAuthor(Author const & author) int BufferList::bufferNum(FileName const & fname) const { - FileNameList const & buffers = fileNames(); + FileNameList const buffers(fileNames()); FileNameList::const_iterator cit = find(buffers.begin(), buffers.end(), fname); if (cit == buffers.end())