diff options
| author | nyamatongwe <devnull@localhost> | 2010-01-30 23:32:31 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2010-01-30 23:32:31 +0000 | 
| commit | 355c9bde45e0516bb43e8ff17c8c606f68fcb5b9 (patch) | |
| tree | 3cb7dc952cf37135f963373295430eda84b4f90e /src/Editor.cxx | |
| parent | 2500ebc8eda4588b3a0cba45484470ea417afbde (diff) | |
| download | scintilla-mirror-355c9bde45e0516bb43e8ff17c8c606f68fcb5b9.tar.gz | |
Fix bug #2942131 Caret pos after rectagular delete.
Diffstat (limited to 'src/Editor.cxx')
| -rw-r--r-- | src/Editor.cxx | 45 | 
1 files changed, 29 insertions, 16 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index 8cfbbd6e4..f6e7b0603 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -706,6 +706,18 @@ void Editor::SetRectangularRange() {  	}  } +void Editor::ThinRectangularRange() { +	if (sel.IsRectangular()) { +		sel.selType = Selection::selThin; +		if (sel.Rectangular().caret < sel.Rectangular().anchor) { +			sel.Rectangular() = SelectionRange(sel.Range(sel.Count()-1).caret, sel.Range(0).anchor); +		} else { +			sel.Rectangular() = SelectionRange(sel.Range(sel.Count()-1).anchor, sel.Range(0).caret); +		} +		SetRectangularRange(); +	} +} +  void Editor::InvalidateSelection(SelectionRange newMain, bool invalidateWholeSelection) {  	if (sel.Count() > 1 || !(sel.RangeMain().anchor == newMain.anchor) || sel.IsRectangular()) {  		invalidateWholeSelection = true; @@ -3724,10 +3736,7 @@ void Editor::AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) {  	if (wrapState != eWrapNone) {  		SetScrollBars();  	} -	if (sel.IsRectangular()) { -		sel.selType = Selection::selThin; -		sel.Rectangular() = SelectionRange(sel.Rectangular().caret, sel.Range(0).anchor); -	} +	ThinRectangularRange();  	// If in wrap mode rewrap current line so EnsureCaretVisible has accurate information  	EnsureCaretVisible();  	// Avoid blinking during rapid typing: @@ -3788,6 +3797,7 @@ void Editor::ClearSelection() {  			}  		}  	} +	ThinRectangularRange();  	sel.RemoveDuplicates();  	ClaimSelection();  } @@ -3985,11 +3995,6 @@ void Editor::DelCharBack(bool allowLineStartDeletion) {  		}  	} else {  		ClearSelection(); -		if (sel.IsRectangular()) { -			sel.selType = Selection::selThin; -			sel.Rectangular() = SelectionRange(sel.Rectangular().caret, sel.Range(0).anchor); -		} -		//SetEmptySelection(sel.MainCaret());  	}  	sel.RemoveDuplicates();  	// Avoid blinking during rapid typing: @@ -4590,8 +4595,14 @@ void Editor::NewLine() {  }  void Editor::CursorUpOrDown(int direction, Selection::selTypes selt) { -	SelectionPosition caretToUse = sel.IsRectangular() ? -		sel.Rectangular().caret : sel.Range(sel.Main()).caret; +	SelectionPosition caretToUse = sel.Range(sel.Main()).caret; +	if (sel.IsRectangular()) { +		if (selt ==  Selection::noSel) { +			caretToUse = (direction > 0) ? sel.Limits().end : sel.Limits().start; +		} else { +			caretToUse = sel.Rectangular().caret; +		} +	}  	Point pt = LocationFromPosition(caretToUse);  	int lineDoc = pdoc->LineFromPosition(caretToUse.Position());  	Point ptStartLine = LocationFromPosition(pdoc->LineStart(lineDoc)); @@ -4708,15 +4719,16 @@ int Editor::KeyCommand(unsigned int iMessage) {  		break;  	case SCI_CHARLEFT:  		if (SelectionEmpty() || sel.MoveExtends()) { -			if (pdoc->IsLineEndPosition(sel.MainCaret()) && sel.RangeMain().caret.VirtualSpace()) { +			if ((sel.Count() == 1) && pdoc->IsLineEndPosition(sel.MainCaret()) && sel.RangeMain().caret.VirtualSpace()) {  				SelectionPosition spCaret = sel.RangeMain().caret;  				spCaret.SetVirtualSpace(spCaret.VirtualSpace() - 1);  				MovePositionTo(spCaret);  			} else { -				MovePositionTo(MovePositionSoVisible(SelectionPosition(sel.MainCaret() - 1), -1)); +				MovePositionTo(MovePositionSoVisible( +					SelectionPosition((sel.LimitsForRectangularElseMain().start).Position() - 1), -1));  			}  		} else { -			MovePositionTo(sel.IsRectangular() ? sel.Limits().start : sel.RangeMain().Start()); +			MovePositionTo(sel.LimitsForRectangularElseMain().start);  		}  		SetLastXChosen();  		break; @@ -4747,10 +4759,11 @@ int Editor::KeyCommand(unsigned int iMessage) {  				spCaret.SetVirtualSpace(spCaret.VirtualSpace() + 1);  				MovePositionTo(spCaret);  			} else { -				MovePositionTo(MovePositionSoVisible(SelectionPosition(sel.MainCaret() + 1), 1)); +				MovePositionTo(MovePositionSoVisible( +					SelectionPosition((sel.LimitsForRectangularElseMain().end).Position() + 1), 1));  			}  		} else { -			MovePositionTo(sel.IsRectangular() ? sel.Limits().end : sel.RangeMain().End()); +			MovePositionTo(sel.LimitsForRectangularElseMain().end);  		}  		SetLastXChosen();  		break; | 
