From b50025e9de64d21317d17aa0bf79f99f2a14569c Mon Sep 17 00:00:00 2001 From: mattias Date: Wed, 27 Feb 2008 11:56:51 +0000 Subject: [PATCH] synedit: fixing wrong cursor position after repacing selection at end of line with spaces, bug #9104 git-svn-id: trunk@14272 - --- components/synedit/synedit.pp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 92efb39803..0c36f85e94 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -5357,8 +5357,11 @@ var SetString(Str, Value, P - Start); TrimmedSetLine(CaretY - 1, sLeftSide + Str); TSynEditStringList(Lines).InsertLines(CaretY, CountLines(P)); // djlp 2000-09-07 - end else + end else begin TrimmedSetLine(CaretY - 1, sLeftSide + Value + sRightSide); + fCaretX := LogicalToPhysicalPos( + Point(1 + Length(sLeftSide + Value),CaretY)).X; + end; // step2: insert left lines of Value while P^ <> #0 do begin if P^ = #13 then @@ -5370,30 +5373,37 @@ var P := GetEOL(Start); if P = Start then begin if p^ <> #0 then -// Lines.Insert(CaretY - 1, '') Lines[CaretY - 1] := '' // djlp 2000-09-07 else -// Lines.Insert(CaretY - 1, sRightSide); Lines[CaretY - 1] := sRightSide; // djlp 2000-09-07 end else begin -// SetLength(Str, P - Start); -// Move(Start^, Str[1], P - Start); SetString(Str, Start, P - Start); //mh 2000-11-08 + {$IFDEF SYN_LAZARUS} + if p^ <> #0 then + TrimmedSetLine(CaretY - 1, Str) + else begin + TrimmedSetLine(CaretY - 1, Str + sRightSide); + end; + {$ELSE} if p^ <> #0 then -// Lines.Insert(CaretY - 1, Str) Lines[CaretY - 1] := Str // djlp 2000-09-07 else -// Lines.Insert(CaretY - 1, Str + sRightSide); Lines[CaretY - 1] := Str + sRightSide // djlp 2000-09-07 + {$ENDIF} end; + {$IFDEF SYN_LAZARUS} + if p^=#0 then + fCaretX := LogicalToPhysicalPos( + Point(1 + Length(Lines[CaretY - 1]) - Length(sRightSide), + CaretY)).X; + {$ELSE} if eoTrimTrailingSpaces in Options then //JGF 2000-09-23 Lines[CaretY - 1] := TrimRight(Lines[CaretY - 1]); + {$ENDIF} Inc(Result); end; {$IFDEF SYN_LAZARUS} - fCaretX := LogicalToPhysicalPos( - Point(1 + Length(Lines[CaretY - 1]) - Length(sRightSide), - CaretY)).X; + //DebugLn(['InsertNormal ',Length(Lines[CaretY - 1]),' ',Length(sRightSide),' ',fCaretX]); {$ELSE} fCaretX := 1 + Length(Lines[CaretY - 1]) - Length(sRightSide); {$ENDIF}