aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2009-07-15 23:50:36 +0000
committernyamatongwe <unknown>2009-07-15 23:50:36 +0000
commit4e11c05935799050dbacbe689b47143ddee728eb (patch)
treeb8ef2601c062e93bc8fc1b619aba7283a5c3dda7
parentb9cb2eb38f6dc23b2b6a46d59de2436b2b9824da (diff)
downloadscintilla-mirror-4e11c05935799050dbacbe689b47143ddee728eb.tar.gz
Remove duplicate carets after Delete or Backspace.
Adding 1 to size returned for GetSelText so that container will allocate enough memory to hold \0 for empty selection.
-rw-r--r--src/Editor.cxx5
-rw-r--r--src/Selection.cxx18
-rw-r--r--src/Selection.h1
3 files changed, 23 insertions, 1 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 17076a373..602dcd884 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -3766,6 +3766,7 @@ void Editor::ClearSelection() {
}
}
}
+ sel.RemoveDuplicates();
}
void Editor::ClearAll() {
@@ -3878,6 +3879,7 @@ void Editor::Clear() {
} else {
ClearSelection();
}
+ sel.RemoveDuplicates();
}
void Editor::SelectAll() {
@@ -3956,6 +3958,7 @@ void Editor::DelCharBack(bool allowLineStartDeletion) {
}
//SetEmptySelection(sel.MainCaret());
}
+ sel.RemoveDuplicates();
// Avoid blinking during rapid typing:
ShowCaretAtCurrentPosition();
}
@@ -6444,7 +6447,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
SelectionText selectedText;
CopySelectionRange(&selectedText);
if (lParam == 0) {
- return selectedText.len;
+ return selectedText.len + 1;
} else {
char *ptr = CharPtrFromSPtr(lParam);
int iChar = 0;
diff --git a/src/Selection.cxx b/src/Selection.cxx
index 43607b244..1ea5f1bbe 100644
--- a/src/Selection.cxx
+++ b/src/Selection.cxx
@@ -310,3 +310,21 @@ void Selection::Clear() {
ranges[mainRange].Reset();
rangeRectangular.Reset();
}
+
+void Selection::RemoveDuplicates() {
+ for (size_t i=0; i<ranges.size()-1; i++) {
+ if (ranges[i].Empty()) {
+ size_t j=i+1;
+ while (j<ranges.size()) {
+ if (ranges[i] == ranges[j]) {
+ ranges.erase(ranges.begin() + j);
+ if (mainRange >= j)
+ mainRange--;
+ } else {
+ j++;
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/Selection.h b/src/Selection.h
index 9e5372638..2c4ee120b 100644
--- a/src/Selection.h
+++ b/src/Selection.h
@@ -155,6 +155,7 @@ public:
int InSelectionForEOL(int pos) const;
int VirtualSpaceFor(int pos) const;
void Clear();
+ void RemoveDuplicates();
};
#ifdef SCI_NAMESPACE