mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 18:39:28 +02:00
SourceEditor: Fix an issue with focusing an editor, that is being closed (while debugging) "no parent handle". Issue #0022015
git-svn-id: trunk@37471 -
This commit is contained in:
parent
987fd9b767
commit
204877981e
@ -5906,15 +5906,20 @@ begin
|
|||||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.SetPageIndex Cur-PgIdx=', PageIndex, ' FPageIndex=', FPageIndex, ' Value=', AValue, ' FUpdateLock=', FUpdateLock]);
|
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.SetPageIndex Cur-PgIdx=', PageIndex, ' FPageIndex=', FPageIndex, ' Value=', AValue, ' FUpdateLock=', FUpdateLock]);
|
||||||
FPageIndex := AValue;
|
FPageIndex := AValue;
|
||||||
if FUpdateLock = 0 then begin
|
if FUpdateLock = 0 then begin
|
||||||
FPageIndex := Max(0, Min(FPageIndex, FNotebook.PageCount-1));
|
DebugBoss.LockCommandProcessing;
|
||||||
if Assigned(Manager) and (FNotebook.PageIndex = FPageIndex) then
|
try
|
||||||
DoActiveEditorChanged;
|
FPageIndex := Max(0, Min(FPageIndex, FNotebook.PageCount-1));
|
||||||
// make sure the statusbar is updated
|
if Assigned(Manager) and (FNotebook.PageIndex = FPageIndex) then
|
||||||
Include(States, snNotbookPageChangedNeeded);
|
DoActiveEditorChanged;
|
||||||
FNotebook.PageIndex := FPageIndex;
|
// make sure the statusbar is updated
|
||||||
if snNotbookPageChangedNeeded in States then
|
Include(States, snNotbookPageChangedNeeded);
|
||||||
NotebookPageChanged(nil);
|
FNotebook.PageIndex := FPageIndex;
|
||||||
HistorySetMostRecent(FNotebook.Pages[FPageIndex]);
|
if snNotbookPageChangedNeeded in States then
|
||||||
|
NotebookPageChanged(nil);
|
||||||
|
HistorySetMostRecent(FNotebook.Pages[FPageIndex]);
|
||||||
|
finally
|
||||||
|
DebugBoss.UnLockCommandProcessing;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.SetPageIndex ']);
|
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.SetPageIndex ']);
|
||||||
end;
|
end;
|
||||||
@ -7467,44 +7472,49 @@ Begin
|
|||||||
end;
|
end;
|
||||||
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.NotebookPageChanged PageIndex=', PageIndex, ' AutoFocusLock=', fAutoFocusLock]);
|
DebugLnEnter(SRCED_PAGES, ['>> TSourceNotebook.NotebookPageChanged PageIndex=', PageIndex, ' AutoFocusLock=', fAutoFocusLock]);
|
||||||
|
|
||||||
Exclude(States, snNotbookPageChangedNeeded);
|
DebugBoss.LockCommandProcessing;
|
||||||
TempEditor:=GetActiveSE;
|
try
|
||||||
if (FHintWindow <> nil) and FHintWindow.Visible then
|
Exclude(States, snNotbookPageChangedNeeded);
|
||||||
HideHint;
|
TempEditor:=GetActiveSE;
|
||||||
|
if (FHintWindow <> nil) and FHintWindow.Visible then
|
||||||
|
HideHint;
|
||||||
|
|
||||||
DebugLn(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged TempEdit=', DbgSName(TempEditor)]);
|
DebugLn(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged TempEdit=', DbgSName(TempEditor)]);
|
||||||
if TempEditor <> nil then
|
if TempEditor <> nil then
|
||||||
begin
|
|
||||||
if not TempEditor.Visible then begin
|
|
||||||
// As long as SynEdit had no Handle, it had kept all those Values untouched
|
|
||||||
CaretXY := TempEditor.EditorComponent.CaretXY;
|
|
||||||
TopLine := TempEditor.EditorComponent.TopLine;
|
|
||||||
TempEditor.BeginUpdate;
|
|
||||||
TempEditor.Visible := True;
|
|
||||||
TempEditor.EndUpdate;
|
|
||||||
// Restore the intial Positions, must be after lock
|
|
||||||
TempEditor.EditorComponent.LeftChar := 1;
|
|
||||||
TempEditor.EditorComponent.CaretXY := CaretXY;
|
|
||||||
TempEditor.EditorComponent.TopLine := TopLine;
|
|
||||||
end;
|
|
||||||
if (fAutoFocusLock=0) and (Screen.ActiveCustomForm=GetParentForm(Self)) and
|
|
||||||
not(Manager.HasAutoFocusLock)
|
|
||||||
then
|
|
||||||
begin
|
begin
|
||||||
DebugLnEnter(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged BEFORE SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor), ' ', TempEditor.FileName]);
|
if not TempEditor.Visible then begin
|
||||||
TempEditor.FocusEditor; // recursively calls NotebookPageChanged, via EditorEnter
|
// As long as SynEdit had no Handle, it had kept all those Values untouched
|
||||||
DebugLnExit(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged AFTER SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor)]);
|
CaretXY := TempEditor.EditorComponent.CaretXY;
|
||||||
|
TopLine := TempEditor.EditorComponent.TopLine;
|
||||||
|
TempEditor.BeginUpdate;
|
||||||
|
TempEditor.Visible := True;
|
||||||
|
TempEditor.EndUpdate;
|
||||||
|
// Restore the intial Positions, must be after lock
|
||||||
|
TempEditor.EditorComponent.LeftChar := 1;
|
||||||
|
TempEditor.EditorComponent.CaretXY := CaretXY;
|
||||||
|
TempEditor.EditorComponent.TopLine := TopLine;
|
||||||
|
end;
|
||||||
|
if (fAutoFocusLock=0) and (Screen.ActiveCustomForm=GetParentForm(Self)) and
|
||||||
|
not(Manager.HasAutoFocusLock)
|
||||||
|
then
|
||||||
|
begin
|
||||||
|
DebugLnEnter(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged BEFORE SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor), ' ', TempEditor.FileName]);
|
||||||
|
TempEditor.FocusEditor; // recursively calls NotebookPageChanged, via EditorEnter
|
||||||
|
DebugLnExit(SRCED_PAGES, ['TSourceNotebook.NotebookPageChanged AFTER SetFocus ', DbgSName(TempEditor.EditorComponent),' Page=', FindPageWithEditor(TempEditor)]);
|
||||||
|
end;
|
||||||
|
UpdateStatusBar;
|
||||||
|
UpdateActiveEditColors(TempEditor.EditorComponent);
|
||||||
|
if (DebugBoss.State in [dsPause, dsRun]) and
|
||||||
|
not TempEditor.HasExecutionMarks and
|
||||||
|
(TempEditor.FileName <> '') then
|
||||||
|
TempEditor.FillExecutionMarks;
|
||||||
|
DoActiveEditorChanged;
|
||||||
end;
|
end;
|
||||||
UpdateStatusBar;
|
|
||||||
UpdateActiveEditColors(TempEditor.EditorComponent);
|
|
||||||
if (DebugBoss.State in [dsPause, dsRun]) and
|
|
||||||
not TempEditor.HasExecutionMarks and
|
|
||||||
(TempEditor.FileName <> '') then
|
|
||||||
TempEditor.FillExecutionMarks;
|
|
||||||
DoActiveEditorChanged;
|
|
||||||
end;
|
|
||||||
|
|
||||||
CheckCurrentCodeBufferChanged;
|
CheckCurrentCodeBufferChanged;
|
||||||
|
finally
|
||||||
|
DebugBoss.UnLockCommandProcessing;
|
||||||
|
end;
|
||||||
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.NotebookPageChanged ']);
|
DebugLnExit(SRCED_PAGES, ['<< TSourceNotebook.NotebookPageChanged ']);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user