http://bugzilla.lyx.org/show_bug.cgi?id=3427
As I cannot reproduce the problem on Windows, please test the patch on Unix. This patch has already been committed to trunk last week.
Abdel.
Index: src/BufferView.cpp =================================================================== --- src/BufferView.cpp (revision 19770) +++ src/BufferView.cpp (working copy) @@ -126,7 +126,7 @@ : width_(0), height_(0), buffer_(0), wh_(0), cursor_(*this), multiparsel_cache_(false), anchor_ref_(0), offset_ref_(0), - intl_(new Intl), last_inset_(0) + need_centering_(false), intl_(new Intl), last_inset_(0) { xsel_cache_.set = false; intl_->initKeyMapper(lyxrc.use_kbmap); @@ -593,19 +593,34 @@ } -void BufferView::center() +void BufferView::updateOffsetRef() { + // No need to update offset_ref_ in this case. + if (!need_centering_) + return; + + // We are not properly started yet, delay until resizing is + // done. + if (height_ == 0) + return; + CursorSlice & bot = cursor_.bottom(); TextMetrics & tm = text_metrics_[bot.text()]; - pit_type const pit = bot.pit(); - tm.redoParagraph(pit); - ParagraphMetrics const & pm = tm.parMetrics(pit); - anchor_ref_ = pit; - offset_ref_ = bv_funcs::coordOffset(*this, cursor_, cursor_.boundary()).y_ - + pm.ascent() - height_ / 2; + ParagraphMetrics const & pm = tm.parMetrics(bot.pit()); + Point p = bv_funcs::coordOffset(*this, cursor_, cursor_.boundary()); + offset_ref_ = p.y_ + pm.ascent() - height_ / 2; + + need_centering_ = false; } +void BufferView::center() +{ + anchor_ref_ = cursor_.bottom().pit(); + need_centering_ = true; +} + + FuncStatus BufferView::getStatus(FuncRequest const & cmd) { FuncStatus flag; @@ -1481,6 +1496,8 @@ if (!singlepar) tm.redoParagraph(pit); + updateOffsetRef(); + int y0 = tm.parMetrics(pit).ascent() - offset_ref_; // Redo paragraphs above anchor if necessary. Index: src/BufferView.h =================================================================== --- src/BufferView.h (revision 19769) +++ src/BufferView.h (working copy) @@ -290,6 +290,10 @@ pit_type anchor_ref_; /// int offset_ref_; + /// + void updateOffsetRef(); + /// + bool need_centering_; /// keyboard mapping object. boost::scoped_ptr<Intl> const intl_; Index: status.15x =================================================================== --- status.15x (revision 19770) +++ status.15x (working copy) @@ -82,6 +82,8 @@ - Reset current cursor font when going to a bookmark. +- Fix Document Largely Off-screen on Opening (Bug 3427). + * DOCUMENTATION - Fix installation links for Hebrew (bug 4165)