aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx8
-rw-r--r--src/Selection.h6
2 files changed, 12 insertions, 2 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 3f7c9db0f..4df7c9247 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -12,6 +12,7 @@
#include <string>
#include <vector>
+#include <algorithm>
// With Borland C++ 5.5, including <string> includes Windows.h leading to defining
// FindText to FindTextA which makes calls here to Document::FindText fail.
@@ -5345,8 +5346,11 @@ void Editor::CopySelectionRange(SelectionText *ss, bool allowLineCopy) {
int size = sel.Length() + delimiterLength * sel.Count();
char *text = new char[size + 1];
int j = 0;
- for (size_t r=0; r<sel.Count(); r++) {
- SelectionRange current = sel.Range(r);
+ std::vector<SelectionRange> rangesInOrder = sel.RangesCopy();
+ if (sel.selType == Selection::selRectangle)
+ std::sort(rangesInOrder.begin(), rangesInOrder.end());
+ for (size_t r=0; r<rangesInOrder.size(); r++) {
+ SelectionRange current = rangesInOrder[r];
for (int i = current.Start().Position();
i < current.End().Position();
i++) {
diff --git a/src/Selection.h b/src/Selection.h
index c18e5c02e..b0c286866 100644
--- a/src/Selection.h
+++ b/src/Selection.h
@@ -98,6 +98,9 @@ struct SelectionRange {
bool operator ==(const SelectionRange &other) const {
return caret == other.caret && anchor == other.anchor;
}
+ bool operator <(const SelectionRange &other) const {
+ return caret < other.caret || ((caret == other.caret) && (anchor < other.anchor));
+ }
void Reset() {
anchor.Reset();
caret.Reset();
@@ -161,6 +164,9 @@ public:
void RemoveDuplicates();
void RotateMain();
bool Tentative() const { return tentativeMain; }
+ std::vector<SelectionRange> RangesCopy() const {
+ return ranges;
+ }
};
#ifdef SCI_NAMESPACE