aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2002-03-04 10:40:57 +0000
committernyamatongwe <devnull@localhost>2002-03-04 10:40:57 +0000
commit4bc8a4fcb5cbeed57b98ff00eddb8e8845e26a3b (patch)
treebb179ed11cb26f7b298015a3c5d7578ad8f68a57
parent36f68f123487bb30e2a1f57b3eb49e5729be24a5 (diff)
downloadscintilla-mirror-4bc8a4fcb5cbeed57b98ff00eddb8e8845e26a3b.tar.gz
Fixed bug when switching buffers led to stale line layout cache entries
by deallocating the cache when switching buffers. When number of lines decreases, line layout cache entries for extra lines are deleted.
-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,