diff options
author | nyamatongwe <devnull@localhost> | 2012-06-18 10:29:27 +1000 |
---|---|---|
committer | nyamatongwe <devnull@localhost> | 2012-06-18 10:29:27 +1000 |
commit | 590808ff37ee5df9a868222d7e0fcbcd98aa1188 (patch) | |
tree | 2734144b4ddf9a0ddc67a747002ec894d0b1dc77 | |
parent | 0d2bd5e004b657be9bd66e26161f1cf7299707ea (diff) | |
download | scintilla-mirror-590808ff37ee5df9a868222d7e0fcbcd98aa1188.tar.gz |
Remove marker only once for SCI_MARKERDELETE. Bug #3535806.
-rw-r--r-- | src/PerLine.cxx | 8 | ||||
-rw-r--r-- | src/PerLine.h | 2 | ||||
-rw-r--r-- | test/simpleTests.py | 10 |
3 files changed, 16 insertions, 4 deletions
diff --git a/src/PerLine.cxx b/src/PerLine.cxx index 0bdb60254..a2225dbb6 100644 --- a/src/PerLine.cxx +++ b/src/PerLine.cxx @@ -99,7 +99,7 @@ void MarkerHandleSet::RemoveHandle(int handle) { } } -bool MarkerHandleSet::RemoveNumber(int markerNum) { +bool MarkerHandleSet::RemoveNumber(int markerNum, bool all) { bool performedDeletion = false; MarkerHandleNumber **pmhn = &root; while (*pmhn) { @@ -108,6 +108,8 @@ bool MarkerHandleSet::RemoveNumber(int markerNum) { *pmhn = mhn->next; delete mhn; performedDeletion = true; + if (!all) + break; } else { pmhn = &((*pmhn)->next); } @@ -223,10 +225,10 @@ bool LineMarkers::DeleteMark(int line, int markerNum, bool all) { delete markers[line]; markers[line] = NULL; } else { - bool performedDeletion = markers[line]->RemoveNumber(markerNum); + bool performedDeletion = markers[line]->RemoveNumber(markerNum, all); someChanges = someChanges || performedDeletion; while (all && performedDeletion) { - performedDeletion = markers[line]->RemoveNumber(markerNum); + performedDeletion = markers[line]->RemoveNumber(markerNum, all); someChanges = someChanges || performedDeletion; } if (markers[line]->Length() == 0) { diff --git a/src/PerLine.h b/src/PerLine.h index b43c52bb8..50ce1e551 100644 --- a/src/PerLine.h +++ b/src/PerLine.h @@ -37,7 +37,7 @@ public: bool Contains(int handle) const; bool InsertHandle(int handle, int markerNum); void RemoveHandle(int handle); - bool RemoveNumber(int markerNum); + bool RemoveNumber(int markerNum, bool all); void CombineWith(MarkerHandleSet *other); }; diff --git a/test/simpleTests.py b/test/simpleTests.py index d8abbb651..c8a111044 100644 --- a/test/simpleTests.py +++ b/test/simpleTests.py @@ -651,6 +651,16 @@ class TestMarkers(unittest.TestCase): self.ed.MarkerDelete(1,1) self.assertEquals(self.ed.MarkerLineFromHandle(handle), -1) + def testTwiceAddedDelete(self): + handle = self.ed.MarkerAdd(1,1) + self.assertEquals(self.ed.MarkerGet(1), 2) + handle2 = self.ed.MarkerAdd(1,1) + self.assertEquals(self.ed.MarkerGet(1), 2) + self.ed.MarkerDelete(1,1) + self.assertEquals(self.ed.MarkerGet(1), 2) + self.ed.MarkerDelete(1,1) + self.assertEquals(self.ed.MarkerGet(1), 0) + def testMarkerDeleteAll(self): h1 = self.ed.MarkerAdd(0,1) h2 = self.ed.MarkerAdd(1,2) |