aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CellBuffer.cxx18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx
index 27e62ac61..0d3090259 100644
--- a/src/CellBuffer.cxx
+++ b/src/CellBuffer.cxx
@@ -96,17 +96,20 @@ void MarkerHandleSet::RemoveHandle(int handle) {
}
}
-void MarkerHandleSet::RemoveNumber(int markerNum) {
+bool MarkerHandleSet::RemoveNumber(int markerNum) {
+ bool performedDeletion = false;
MarkerHandleNumber **pmhn = &root;
while (*pmhn) {
MarkerHandleNumber *mhn = *pmhn;
if (mhn->number == markerNum) {
*pmhn = mhn->next;
delete mhn;
+ performedDeletion = true;
} else {
pmhn = &((*pmhn)->next);
}
}
+ return performedDeletion;
}
void MarkerHandleSet::CombineWith(MarkerHandleSet *other) {
@@ -306,13 +309,18 @@ void LineVector::MergeMarkers(int pos) {
}
}
-void LineVector::DeleteMark(int line, int markerNum) {
+void LineVector::DeleteMark(int line, int markerNum, bool all) {
if (linesData[line].handleSet) {
if (markerNum == -1) {
delete linesData[line].handleSet;
linesData[line].handleSet = 0;
} else {
- linesData[line].handleSet->RemoveNumber(markerNum);
+ bool performedDeletion =
+ linesData[line].handleSet->RemoveNumber(markerNum);
+ while (all && performedDeletion) {
+ performedDeletion =
+ linesData[line].handleSet->RemoveNumber(markerNum);
+ }
if (linesData[line].handleSet->Length() == 0) {
delete linesData[line].handleSet;
linesData[line].handleSet = 0;
@@ -833,7 +841,7 @@ int CellBuffer::AddMark(int line, int markerNum) {
void CellBuffer::DeleteMark(int line, int markerNum) {
if ((line >= 0) && (line < lv.lines)) {
- lv.DeleteMark(line, markerNum);
+ lv.DeleteMark(line, markerNum, false);
}
}
@@ -849,7 +857,7 @@ int CellBuffer::GetMark(int line) {
void CellBuffer::DeleteAllMarks(int markerNum) {
for (int line = 0; line < lv.lines; line++) {
- lv.DeleteMark(line, markerNum);
+ lv.DeleteMark(line, markerNum, true);
}
}