commit 45fba1ce1b5b447a047071f62d6dd73aaceae11e
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Fri May 11 11:27:26 2018 +0200
Avoid crash when trying to handle FitCursor
It is better to handle SinglePar before FitCursor, since the later
requires correct metrics at cursor position.
Fixes bug #11139 and probably #11125.
(cherry picked from commit 7f83d26934e50e3d83e254b0f9ab847d957053f7)
---
src/BufferView.cpp | 21 ++++++++++++---------
1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index da09fcd..588dea7 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -461,7 +461,8 @@ string flagsAsString(Update::flags flags)
return string((flags & Update::FitCursor) ? "FitCursor " : "")
+ ((flags & Update::Force) ? "Force " : "")
+ ((flags & Update::ForceDraw) ? "ForceDraw " : "")
- + ((flags & Update::SinglePar) ? "SinglePar " : "");
+ + ((flags & Update::SinglePar) ? "SinglePar " : "")
+ + ((flags & Update::Decoration) ? "Decoration " : "");
}
}
@@ -487,6 +488,16 @@ void BufferView::processUpdateFlags(Update::flags flags)
updateMetrics(flags);
}
+ // Detect whether we can only repaint a single paragraph.
+ // We handle this before FitCursor because the later will require
+ // correct metrics at cursor position.
+ if (!(flags & Update::ForceDraw)) {
+ if (singleParUpdate())
+ flags = flags | Update::SinglePar;
+ else
+ updateMetrics(flags);
+ }
+
// Then make sure that the screen contains the cursor if needed
if (flags & Update::FitCursor) {
if (needsFitCursor()) {
@@ -497,14 +508,6 @@ void BufferView::processUpdateFlags(Update::flags flags)
flags = flags & ~Update::FitCursor;
}
- // Finally detect whether we can only repaint a single paragraph
- if (!(flags & Update::ForceDraw)) {
- if (singleParUpdate())
- flags = flags | Update::SinglePar;
- else
- updateMetrics(flags);
- }
-
// Add flags to the the update flags. These will be reset to None
// after the redraw is actually done
d->update_flags_ = d->update_flags_ | flags;