]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Fulfill promise to Andre: TextClass_ptr --> TextClassPtr.
[lyx.git] / src / BufferView.cpp
index 66f64dfe6f55041a2d772e113a54eb339382130c..f1cf7c1f817537b7ec37bd203b6ad709db3d4f5f 100644 (file)
@@ -339,6 +339,7 @@ void BufferView::scrollDocView(int value)
        int const h = tm.parMetrics(anchor_ref_).height();
        offset_ref_ = int((bar * t.paragraphs().size() - anchor_ref_) * h);
        updateMetrics(false);
+       buffer_.changed();
 }
 
 
@@ -477,7 +478,7 @@ void BufferView::translateAndInsert(char_type c, Text * t, Cursor & cur)
                                intl_->keyMapPrim();
                }
        }
-       
+
        intl_->getTransManager().translateAndInsert(c, t, cur);
 }
 
@@ -949,7 +950,16 @@ Update::flags BufferView::dispatch(FuncRequest const & cmd)
 
        case LFUN_SCREEN_UP:
        case LFUN_SCREEN_DOWN: {
-               Point const p = bv_funcs::getPos(*this, cur, cur.boundary());
+               Point p = bv_funcs::getPos(*this, cur, cur.boundary());
+               if (p.y_ < 0 || p.y_ > height_) {
+                       // The cursor is off-screen so recenter before proceeding.
+                       center();
+                       updateMetrics(false);
+                       //FIXME: updateMetrics() does not update paragraph position
+                       // This is done at draw() time. So we need a redraw!
+                       buffer_.changed();
+                       p = bv_funcs::getPos(*this, cur, cur.boundary());
+               }
                scroll(cmd.action == LFUN_SCREEN_UP? - height_ : height_);
                cur.reset(buffer_.inset());
                text_metrics_[&buffer_.text()].editXY(cur, p.x_, p.y_);
@@ -1100,6 +1110,9 @@ bool BufferView::workAreaDispatch(FuncRequest const & cmd0)
        cmd.y = min(max(cmd.y, -1), height_);
 
        if (cmd.action == LFUN_MOUSE_MOTION && cmd.button() == mouse_button::none) {
+               //FIXME: disabling mouse hover for now as it is causing funny things
+               // on screen.
+               return false;
 
                // Get inset under mouse, if there is one.
                Inset const * covering_inset =
@@ -1337,7 +1350,7 @@ bool BufferView::mouseSetCursor(Cursor & cur)
 {
        BOOST_ASSERT(&cur.bv() == this);
 
-        // this event will clear selection so we save selection for
+       // this event will clear selection so we save selection for
        // persistent selection
        cap::saveSelection(cursor());
 
@@ -1435,7 +1448,7 @@ void BufferView::updateMetrics(bool singlepar)
        if (!singlepar) {
                // Clear out the position cache in case of full screen redraw,
                coord_cache_.clear();
-       
+
                // Clear out paragraph metrics to avoid having invalid metrics
                // in the cache from paragraphs not relayouted below
                // The complete text metrics will be redone.
@@ -1594,7 +1607,7 @@ void BufferView::menuInsertLyXFile(string const & filenm)
                el = buf.errorList("Parse");
                recordUndo(cursor_);
                cap::pasteParagraphList(cursor_, buf.paragraphs(),
-                                            buf.params().getTextClass_ptr(), el);
+                                            buf.params().getTextClassPtr(), el);
                res = _("Document %1$s inserted.");
        } else
                res = _("Could not insert document %1$s");
@@ -1633,13 +1646,13 @@ void BufferView::draw(frontend::Painter & pain)
 
        // and grey out above (should not happen later)
 //     lyxerr << "par ascent: " << text.getPar(metrics_info_.p1).ascent() << endl;
-       if (metrics_info_.y1 > 0 
+       if (metrics_info_.y1 > 0
                && metrics_info_.update_strategy == FullScreenUpdate)
                pain.fillRectangle(0, 0, width_, metrics_info_.y1, Color::bottomarea);
 
        // and possibly grey out below
 //     lyxerr << "par descent: " << text.getPar(metrics_info_.p1).ascent() << endl;
-       if (metrics_info_.y2 < height_ 
+       if (metrics_info_.y2 < height_
                && metrics_info_.update_strategy == FullScreenUpdate)
                pain.fillRectangle(0, metrics_info_.y2, width_,
                        height_ - metrics_info_.y2, Color::bottomarea);