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();