}
-void BufferView::setBuffer(Buffer * b)
+Buffer * BufferView::setBuffer(Buffer * b)
{
LYXERR(Debug::INFO) << BOOST_CURRENT_FUNCTION
<< "[ b = " << b << "]" << endl;
// If we're quitting lyx, don't bother updating stuff
if (quitting) {
buffer_ = 0;
- return;
+ return 0;
}
//FIXME Fix for bug 3440 is here.
offset_ref_ = 0;
if (!buffer_)
- return;
+ return 0;
LYXERR(Debug::INFO) << BOOST_CURRENT_FUNCTION
<< "Buffer addr: " << buffer_ << endl;
if (graphics::Previews::status() != LyXRC::PREVIEW_OFF)
graphics::Previews::get().generateBufferPreviews(*buffer_);
+ return buffer_;
}
/// set the buffer we are viewing.
/// \todo FIXME: eventually, we will create a new BufferView
/// when switching Buffers, so this method should go.
- void setBuffer(Buffer * b);
+ /// returns the buffer currently set
+ Buffer * setBuffer(Buffer * b);
/// return the buffer being viewed.
Buffer * buffer() const;
// parentfilename will be used in case when we switch to a child
// document (hence when child_document is true)
string parentfilename;
- if (oldBuffer) {
+ if (oldBuffer)
parentfilename = oldBuffer->fileName();
- disconnectBuffer();
- }
if (!b && theBufferList().empty())
getDialogs().hideBufferDependent();
- work_area_->bufferView().setBuffer(b);
+ Buffer * newBuffer = work_area_->bufferView().setBuffer(b);
- //FIXME This would be a little simpler if setBuffer returned the buffer.
- Buffer * newBuffer = work_area_->bufferView().buffer();
if (newBuffer) {
- if (child_document && newBuffer->getMasterBuffer() != oldBuffer) {
+ //Are we closing an oldBuffer which was a child document?
+ if (!b && oldBuffer && oldBuffer->getMasterBuffer() != oldBuffer)
+ // Update the labels and section numbering of its master Buffer.
+ updateLabels(*oldBuffer->getMasterBuffer());
+ //Are we opening a new child document?
+ else if (child_document && newBuffer->getMasterBuffer() != oldBuffer) {
// Set the parent name of the child document.
// This makes insertion of citations and references in the child work,
// when the target is in the parent or another child document.
// Update the labels and section numbering to the new master Buffer.
updateLabels(*newBuffer->getMasterBuffer());
}
-
- if (!b && oldBuffer && oldBuffer->getMasterBuffer() != oldBuffer)
- // We are closing oldBuffer which was a child document so we
- // must update the labels and section numbering of its master
- // Buffer.
- updateLabels(*oldBuffer->getMasterBuffer());
-
+ //Now that all the updating of the old buffer has been done, we can
+ //connect the new buffer. Note that this will also disconnect the old
+ //buffer, if such there is.
+ //FIXME Is it clear that this should go right here? Or should it go
+ //earlier before the previous if (in which case we'd remove the "else")?
connectBuffer(*newBuffer);
/* FIXME: We need to rebuild the Toc dialog before the others even
// hidden. This should go here because some dialogs (eg ToC)
// require bv_->text.
getDialogs().updateBufferDependent(true);
- }
+ } else
+ //Disconnect the old buffer...there's no new one.
+ disconnectBuffer();
if (quitting)
return;
/// connect to signals in the given buffer
void connectBuffer(Buffer & buf);
/// disconnect from signals in the given buffer
+ /// NOTE: Do not call this unless you really want no buffer
+ /// to be connected---for example, when closing the last open
+ /// buffer. If you are switching buffers, just call
+ /// connectBuffer(), and the old buffer will be disconnected
+ /// automatically. This ensures that we do not leave LyX in a
+ /// state in which no buffer is connected.
void disconnectBuffer();
/// BufferView messages signal connection