aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Editor.cxx9
-rw-r--r--src/Editor.h2
2 files changed, 9 insertions, 2 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 64e643b67..fd8a2d719 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -179,7 +179,13 @@ void LineLayoutCache::AllocateForLevel(int linesOnScreen, int linesInDoc) {
}
if (lengthForLevel > size) {
Deallocate();
- } else if (lengthForLevel != length) {
+ } else {
+ if (lengthForLevel < length) {
+ for (int i=lengthForLevel; i<length; i++) {
+ delete cache[i];
+ cache[i] = 0;
+ }
+ }
Invalidate(LineLayout::llInvalid);
}
if (!cache) {
@@ -3950,6 +3956,7 @@ void Editor::SetDocPointer(Document *document) {
// Reset the contraction state to fully shown.
cs.Clear();
cs.InsertLines(0, pdoc->LinesTotal() - 1);
+ llc.Deallocate();
NeedWrapping();
pdoc->AddWatcher(this, 0);
diff --git a/src/Editor.h b/src/Editor.h
index 35aea3fc3..d9719dc53 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -93,10 +93,10 @@ class LineLayoutCache {
int styleClock;
void Allocate(int length_);
void AllocateForLevel(int linesOnScreen, int linesInDoc);
- void Deallocate();
public:
LineLayoutCache();
virtual ~LineLayoutCache();
+ void Deallocate();
enum {
llcNone=SC_CACHE_NONE,
llcCaret=SC_CACHE_CARET,