diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Editor.cxx | 16 | 
1 files changed, 14 insertions, 2 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index 69c83f388..8a0ad64c4 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -742,8 +742,20 @@ void Editor::InvalidateSelection(SelectionRange newMain, bool invalidateWholeSel  }  void Editor::SetSelection(SelectionPosition currentPos_, SelectionPosition anchor_) { -	SelectionRange rangeNew(ClampPositionIntoDocument(currentPos_), -		ClampPositionIntoDocument(anchor_)); +	currentPos_ = ClampPositionIntoDocument(currentPos_); +	anchor_ = ClampPositionIntoDocument(anchor_); +	/* For Line selection - ensure the anchor and caret are always +	   at the beginning and end of the region lines. */ +	if (sel.selType == Selection::selLines) { +		if (currentPos_ > anchor_) { +			anchor_ = SelectionPosition(pdoc->LineStart(pdoc->LineFromPosition(anchor_.Position()))); +			currentPos_ = SelectionPosition(pdoc->LineEnd(pdoc->LineFromPosition(currentPos_.Position()))); +		} else { +			currentPos_ = SelectionPosition(pdoc->LineStart(pdoc->LineFromPosition(currentPos_.Position()))); +			anchor_ = SelectionPosition(pdoc->LineEnd(pdoc->LineFromPosition(anchor_.Position()))); +		} +	} +	SelectionRange rangeNew(currentPos_, anchor_);  	if (sel.Count() > 1 || !(sel.RangeMain() == rangeNew)) {  		InvalidateSelection(rangeNew);  	} | 
