]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.C
* allow resizing of detached panel
[lyx.git] / src / BufferView.C
index d1d768ac36b652dc994091710f066efa08d17265..9c0b961567d35c5e771d3f40e445b9f6d8155567 100644 (file)
@@ -197,7 +197,8 @@ void BufferView::setBuffer(Buffer * b)
                }
        }
 
-       update();
+       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;
                                }
                }
@@ -367,25 +370,22 @@ std::pair<bool, bool> BufferView::update(Update::flags flags)
        // The second drawing step is done in WorkArea::redraw() if needed.
 
        // Case when no explicit update is requested.
-       if (!(flags & (Update::SinglePar | Update::Force))) {
-               if (fitCursor() || multiParSel()) {
-                       // a CoordCache update is needed
-                       updateMetrics(false);
-                       // tell the frontend to update the screen.
-                       return make_pair(true, false);
-               }
+       if (!flags) {
                // no need to do anything.
                return make_pair(false, false);
        }
 
-       // We are now in the case (Update::SinglePar | Update::Force)
-       bool single_par = flags & Update::SinglePar;
+       bool full_metrics = flags & Update::Force;
+       if (flags & Update::MultiParSel)
+               full_metrics |= multiParSel();
+
+       bool const single_par = !full_metrics;
        updateMetrics(single_par);
 
-       // Don't forget to do check for fitCursor() and multiParSel().
-       fitCursor();
-       multiParSel();
+       if (flags & Update::FitCursor && fitCursor())
+               updateMetrics(false);
 
+       // tell the frontend to update the screen.
        return make_pair(true, single_par);
 }
 
@@ -476,6 +476,7 @@ void BufferView::scrollDocView(int value)
        t.redoParagraph(*this, anchor_ref_);
        int const h = t.getPar(anchor_ref_).height();
        offset_ref_ = int((bar * t.paragraphs().size() - anchor_ref_) * h);
+       updateMetrics(false);
 }