]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Avoid duplicating mode changing commands
[lyx.git] / src / BufferView.cpp
index 9708a08aebeaf41915b9a9fc5d2c2ddfa03d96de..0212b165d1cfd2dd0ed18f06a2886b2a71860872 100644 (file)
@@ -370,13 +370,13 @@ int BufferView::leftMargin() const
 
 bool BufferView::isTopScreen() const
 {
-       return d->scrollbarParameters_.position == d->scrollbarParameters_.min;
+       return 0 == d->scrollbarParameters_.min;
 }
 
 
 bool BufferView::isBottomScreen() const
 {
-       return d->scrollbarParameters_.position == d->scrollbarParameters_.max;
+       return 0 == d->scrollbarParameters_.max;
 }
 
 
@@ -559,12 +559,17 @@ void BufferView::updateScrollbar()
        for (size_t i = last.first + 1; i != parsize; ++i)
                d->scrollbarParameters_.max += d->par_height_[i];
 
-       d->scrollbarParameters_.position = 0;
        // The reference is the top position so we remove one page.
        if (lyxrc.scroll_below_document)
                d->scrollbarParameters_.max -= minVisiblePart();
        else
                d->scrollbarParameters_.max -= d->scrollbarParameters_.page_step;
+
+       // 0 must be inside the range as it denotes the current position
+       if (d->scrollbarParameters_.max < 0)
+               d->scrollbarParameters_.max = 0;
+       if (d->scrollbarParameters_.min > 0)
+               d->scrollbarParameters_.min = 0;
 }
 
 
@@ -600,17 +605,19 @@ string BufferView::contextMenu(int x, int y) const
 }
 
 
-void BufferView::scrollDocView(int value, bool update)
+
+void BufferView::scrollDocView(int const value, bool update)
 {
-       int const offset = value - d->scrollbarParameters_.position;
+       // The scrollbar values are relative to the top of the screen, therefore the
+       // offset is equal to the target value.
 
        // No scrolling at all? No need to redraw anything
-       if (offset == 0)
+       if (value == 0)
                return;
 
        // If the offset is less than 2 screen height, prefer to scroll instead.
-       if (abs(offset) <= 2 * height_) {
-               d->anchor_ypos_ -= offset;
+       if (abs(value) <= 2 * height_) {
+               d->anchor_ypos_ -= value;
                buffer_.changed(true);
                updateHoveredInset();
                return;
@@ -872,7 +879,7 @@ void BufferView::scrollToCursor()
 }
 
 
-bool BufferView::scrollToCursor(DocIterator const & dit, bool recenter)
+bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter)
 {
        // We are not properly started yet, delay until resizing is
        // done.
@@ -1348,6 +1355,16 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                else
                        dr.screenUpdate(Update::Force | Update::FitCursor);
                dr.forceBufferUpdate();
+               // we only need to do this if we have deleted or restored a
+               // BiBTeX inset. but there is no other place to do it. one
+               // obvious idea is to try to do it in a copy constructor for
+               // InsetBibTeX, but when that is invoked, the buffer_ member 
+               // is not yet set. another idea is to look at the InsetLists
+               // of the various paragraphs. but we'd have to recurse through
+               // the contained insets to make that work. it doesn't seem to
+               // be worth it, as this will not happen that often.
+               buffer().invalidateBibfileCache();
+               buffer().removeBiblioTempFiles();
                break;
 
        case LFUN_REDO:
@@ -1358,6 +1375,9 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                else
                        dr.screenUpdate(Update::Force | Update::FitCursor);
                dr.forceBufferUpdate();
+               // see above
+               buffer().invalidateBibfileCache();
+               buffer().removeBiblioTempFiles();
                break;
 
        case LFUN_FONT_STATE:
@@ -2999,8 +3019,7 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
                bool const drawing = pi.pain.isDrawingEnabled();
                pi.pain.setDrawingEnabled(false);
                // No need to care about vertical position.
-               RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row,
-                             -d->horiz_scroll_offset_, 0);
+               RowPainter rp(pi, buffer().text(), row, -d->horiz_scroll_offset_, 0);
                rp.paintText();
                pi.pain.setDrawingEnabled(drawing);
        }