Fix bug 3171: switching document jumps always back to last saved bookmark

http://bugzilla.lyx.org/show_bug.cgi?id=3171

* LyXFunc::closeBuffer(): remove code that is already done on Buffer deletion thanks to the Buffer::closing() signal connection to LyXView. Setting the Buffer twice was part of the reason of the bug.

* BufferView::setBuffer(): properly update the metrics if we move to a saved cursor position.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18830 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-06-19 17:57:40 +00:00
parent 3cf838c4d1
commit 608603a31d
2 changed files with 14 additions and 11 deletions

View File

@ -214,6 +214,12 @@ void BufferView::setBuffer(Buffer * b)
cursor_.push(buffer_->inset());
cursor_.resetAnchor();
buffer_->text().setCurrentFont(cursor_);
// Update the metrics now that we have a proper Cursor.
updateMetrics(false);
// FIXME: This code won't be needed once we switch to
// "one Buffer" / "one BufferView".
if (buffer_->getCursor().size() > 0 &&
buffer_->getAnchor().size() > 0)
{
@ -227,12 +233,17 @@ void BufferView::setBuffer(Buffer * b)
// Make sure that the restored cursor is not broken. This can happen for
// example if this Buffer has been modified by another view.
cursor_.fixIfBroken();
if (fitCursor())
// Update the metrics if the cursor new position was off screen.
updateMetrics(false);
}
updateMetrics(false);
if (graphics::Previews::status() != LyXRC::PREVIEW_OFF)
graphics::Previews::get().generateBufferPreviews(*buffer_);
}
void BufferView::resize()
{
if (!buffer_)

View File

@ -2089,16 +2089,8 @@ void LyXFunc::closeBuffer()
// goto bookmark to update bookmark pit.
for (size_t i = 0; i < LyX::ref().session().bookmarks().size(); ++i)
gotoBookmark(i+1, false, false);
if (theBufferList().close(lyx_view_->buffer(), true) && !quitting) {
if (theBufferList().empty()) {
// need this otherwise SEGV may occur while
// trying to set variables that don't exist
// since there's no current buffer
lyx_view_->getDialogs().hideBufferDependent();
} else {
lyx_view_->setBuffer(theBufferList().first());
}
}
theBufferList().close(lyx_view_->buffer(), true);
}