diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Editor.cxx | 8 | ||||
| -rw-r--r-- | src/Selection.h | 6 | 
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 | 
