X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.C;h=2935ba27dc66b00f6686c0bb0a509387ba58cfd2;hb=286a8e2676d6fb8d289a42e5aa7401334da807e6;hp=0689719a21a0eea22895f06402c09ce41141aef3;hpb=34600f50555b69405589cecaa1f765c2e02064c0;p=lyx.git diff --git a/src/BufferView.C b/src/BufferView.C index 0689719a21..2935ba27dc 100644 --- a/src/BufferView.C +++ b/src/BufferView.C @@ -197,7 +197,8 @@ void BufferView::setBuffer(Buffer * b) } } - updateMetrics(false); + if (buffer_) + updateMetrics(false); if (buffer_ && graphics::Previews::status() != LyXRC::PREVIEW_OFF) graphics::Previews::get().generateBufferPreviews(*buffer_); @@ -278,7 +279,9 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles) if (it.pit() == pit) { // restored pos may be bigger than it->size setCursor(makeDocIterator(it, min(pos, it->size()))); - update(Update::FitCursor); + // No need to update the metrics if fitCursor returns false. + if (fitCursor()) + updateMetrics(false); break; } } @@ -372,6 +375,14 @@ std::pair BufferView::update(Update::flags flags) return make_pair(false, false); } + if (flags == Update::FitCursor) { + bool const fit_cursor = fitCursor(); + if (fit_cursor) + updateMetrics(false); + // tell the frontend to update the screen. + return make_pair(fit_cursor, false); + } + bool full_metrics = flags & Update::Force; if (flags & Update::MultiParSel) full_metrics |= multiParSel(); @@ -642,7 +653,11 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd) case LFUN_CHANGE_NEXT: case LFUN_ALL_CHANGES_ACCEPT: case LFUN_ALL_CHANGES_REJECT: - flag.enabled(buffer_); // FIXME: Change tracking (MG) + // TODO: context-sensitive enabling of LFUNs + // In principle, these command should only be enabled if there + // is a change in the document. However, without proper + // optimizations, this will inevitably result in poor performance. + flag.enabled(buffer_); break; case LFUN_BUFFER_TOGGLE_COMPRESSION: {