Martin Vermeer wrote:

The culprit appears to be the statement

        view()->buffer()->changed()

in lyxfunc.C. This sends a signal LyXView to redraw the whole screen in
WorkArea. There is no way to specify anything less than a full screen.
Unfortunately commenting out this line isn't good either: then not even
the current row gets updated (but it will be if you cover and expose
theLyX window...)

This should be redone somehow to do a current-paragraph update if
Update::SinglePar is set. Can you do that with signal-slot?

Here is a patch that does so. Please test and commit if it works.

Abdel.
Index: buffer.h
===================================================================
--- buffer.h    (revision 15694)
+++ buffer.h    (working copy)
@@ -119,7 +119,7 @@
        bool hasParWithID(int id) const;
 
        /// This signal is emitted when the buffer is changed.
-       boost::signal<void()> changed;
+       boost::signal<void(bool)> changed;
        /// This signal is emitted when some parsing error shows up.
        boost::signal<void(std::string)> errors;
        /// This signal is emitted when some message shows up.
Index: frontends/LyXView.C
===================================================================
--- frontends/LyXView.C (revision 15694)
+++ frontends/LyXView.C (working copy)
@@ -169,7 +169,7 @@
 
        bufferChangedConnection_ =
                buf.changed.connect(
-                       boost::bind(&WorkArea::redraw, work_area_));
+                       boost::bind(&WorkArea::redraw, work_area_, _1));
 
        errorsConnection_ =
                buf.errors.connect(
Index: frontends/WorkArea.C
===================================================================
--- frontends/WorkArea.C        (revision 15694)
+++ frontends/WorkArea.C        (working copy)
@@ -138,7 +138,7 @@
 }
 
 
-void WorkArea::redraw()
+void WorkArea::redraw(bool singlePar)
 {
        if (!buffer_view_)
                return;
@@ -148,7 +148,7 @@
                return;
        }
 
-       buffer_view_->updateMetrics(false);
+       buffer_view_->updateMetrics(singlePar);
 
        updateScrollbar();
 
Index: frontends/WorkArea.h
===================================================================
--- frontends/WorkArea.h        (revision 15694)
+++ frontends/WorkArea.h        (working copy)
@@ -80,7 +80,7 @@
        virtual void setScrollbarParams(int height, int pos, int line_height) = 
0;
 
        /// redraw the screen, without using existing pixmap
-       virtual void redraw();
+       virtual void redraw(bool singlePar = false);
        ///
        void checkAndGreyOut();
        ///
Index: lyxfunc.C
===================================================================
--- lyxfunc.C   (revision 15694)
+++ lyxfunc.C   (working copy)
@@ -1723,7 +1723,7 @@
                                needSecondUpdate = view()->fitCursor();
 
                        if (needSecondUpdate || updateFlags != Update::None) {
-                               view()->buffer()->changed();
+                               view()->buffer()->changed(updateFlags & 
Update::SinglePar);
                        }
                        lyx_view_->updateStatusBar();
 

Reply via email to