mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 07:19:16 +02:00
SourceEditor: Restore (to best of possibility) Caret/Topline after codebuffer changes/reload
git-svn-id: trunk@25285 -
This commit is contained in:
parent
65712f8d8d
commit
07f60b5d3c
@ -209,6 +209,8 @@ type
|
|||||||
FIsNewSharedEditor: Boolean;
|
FIsNewSharedEditor: Boolean;
|
||||||
FSharedValues: TSourceEditorSharedValues;
|
FSharedValues: TSourceEditorSharedValues;
|
||||||
FEditor: TIDESynEditor;
|
FEditor: TIDESynEditor;
|
||||||
|
FTempCaret: TPoint;
|
||||||
|
FTempTopLine: Integer;
|
||||||
FEditPlugin: TSynEditPlugin1; // used to get the LinesInserted and
|
FEditPlugin: TSynEditPlugin1; // used to get the LinesInserted and
|
||||||
// LinesDeleted messages
|
// LinesDeleted messages
|
||||||
FSyncroLockCount: Integer;
|
FSyncroLockCount: Integer;
|
||||||
@ -310,6 +312,8 @@ type
|
|||||||
function Manager: TSourceEditorManager;
|
function Manager: TSourceEditorManager;
|
||||||
property Visible: Boolean read FVisible write SetVisible default False;
|
property Visible: Boolean read FVisible write SetVisible default False;
|
||||||
function IsSharedWith(AnOtherEditor: TSourceEditor): Boolean;
|
function IsSharedWith(AnOtherEditor: TSourceEditor): Boolean;
|
||||||
|
procedure BeforeCodeBufferReplace;
|
||||||
|
procedure AfterCodeBufferReplace;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent; AParent: TWinControl; ASharedEditor: TSourceEditor = nil);
|
constructor Create(AOwner: TComponent; AParent: TWinControl; ASharedEditor: TSourceEditor = nil);
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -2084,6 +2088,7 @@ procedure TSourceEditorSharedValues.OnCodeBufferChanged(Sender: TSourceLog;
|
|||||||
var
|
var
|
||||||
StartPos, EndPos, MoveToPos: TPoint;
|
StartPos, EndPos, MoveToPos: TPoint;
|
||||||
CodeToolsInSync: Boolean;
|
CodeToolsInSync: Boolean;
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
{$IFDEF IDE_DEBUG}
|
{$IFDEF IDE_DEBUG}
|
||||||
writeln('[TSourceEditor.OnCodeBufferChanged] A ',FIgnoreCodeBufferLock,' ',SrcLogEntry<>nil);
|
writeln('[TSourceEditor.OnCodeBufferChanged] A ',FIgnoreCodeBufferLock,' ',SrcLogEntry<>nil);
|
||||||
@ -2134,7 +2139,11 @@ begin
|
|||||||
DumpStack;
|
DumpStack;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
SynEditor.BeginUpdate;
|
SynEditor.BeginUpdate;
|
||||||
|
for i := 0 to SharedEditorCount-1 do
|
||||||
|
SharedEditors[i].BeforeCodeBufferReplace;
|
||||||
Sender.AssignTo(SynEditor.Lines,false);
|
Sender.AssignTo(SynEditor.Lines,false);
|
||||||
|
for i := 0 to SharedEditorCount-1 do
|
||||||
|
SharedEditors[i].AfterCodeBufferReplace;
|
||||||
SynEditor.EndUpdate;
|
SynEditor.EndUpdate;
|
||||||
end;
|
end;
|
||||||
if CodeToolsInSync then begin
|
if CodeToolsInSync then begin
|
||||||
@ -2677,6 +2686,21 @@ begin
|
|||||||
(AnOtherEditor.FSharedValues = FSharedValues);
|
(AnOtherEditor.FSharedValues = FSharedValues);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSourceEditor.BeforeCodeBufferReplace;
|
||||||
|
begin
|
||||||
|
FTempTopLine := FEditor.TopLine;
|
||||||
|
FTempCaret := FEditor.CaretXY;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSourceEditor.AfterCodeBufferReplace;
|
||||||
|
begin
|
||||||
|
if (FTempTopLine > FEditor.Lines.Count) or(FTempCaret.Y > FEditor.Lines.Count)
|
||||||
|
then
|
||||||
|
exit;
|
||||||
|
FEditor.TopLine := FTempTopLine;
|
||||||
|
FEditor.CaretXY := FTempCaret;
|
||||||
|
end;
|
||||||
|
|
||||||
Procedure TSourceEditor.ProcessCommand(Sender: TObject;
|
Procedure TSourceEditor.ProcessCommand(Sender: TObject;
|
||||||
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer);
|
||||||
// these are normal commands for synedit (lower than ecUserFirst),
|
// these are normal commands for synedit (lower than ecUserFirst),
|
||||||
|
Loading…
Reference in New Issue
Block a user