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:
martin 2012-06-01 14:21:52 +00:00
parent 987fd9b767
commit 204877981e

View File

@ -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;