manualdock: fix to avoid redocking on the destroyed form

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1201 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz
2010-04-19 04:50:00 +00:00
parent 599991c430
commit f92a70d366

View File

@ -90,14 +90,19 @@ end;
procedure TManualDocker.ChangeDocking(DockingEnabled: Boolean); procedure TManualDocker.ChangeDocking(DockingEnabled: Boolean);
var var
i : Integer; i : Integer;
begin begin
if DockingEnabled then begin if DockingEnabled then begin
if not (Assigned(SourceEditorManagerIntf) and Assigned(SourceEditorManagerIntf.ActiveSourceWindow)) if not (Assigned(SourceEditorManagerIntf) and Assigned(SourceEditorManagerIntf.ActiveSourceWindow))
or not Assigned(IDEMessagesWindow) or not Assigned(IDEMessagesWindow)
then Exit; then Exit;
if not Assigned(panel) then if not Assigned(panel) then
AllocControls(SourceEditorManagerIntf.ActiveSourceWindow); AllocControls(SourceEditorManagerIntf.ActiveSourceWindow);
if panel.Parent <> SourceEditorManagerIntf.ActiveSourceWindow then
panel.Parent:=SourceEditorManagerIntf.ActiveSourceWindow;
split.visible:=true; split.visible:=true;
panel.visible:=true; panel.visible:=true;
with IDEMessagesWindow do with IDEMessagesWindow do
@ -217,7 +222,7 @@ end;
procedure TManualDocker.SourceWindowCreated(Sender: TObject); procedure TManualDocker.SourceWindowCreated(Sender: TObject);
begin begin
if Assigned(FCurrentSrcWin) or (SourceEditorManagerIntf.SourceWindowCount > 1) then if Assigned(FCurrentSrcWin) or (SourceEditorManagerIntf.SourceWindowCount > 1) then
exit; Exit;
if MsgWnd.Docked then if MsgWnd.Docked then
ChangeDocking(true); ChangeDocking(true);
end; end;
@ -225,17 +230,21 @@ end;
procedure TManualDocker.SourceWindowDestroyed(Sender: TObject); procedure TManualDocker.SourceWindowDestroyed(Sender: TObject);
var var
IsDocked: Boolean; IsDocked: Boolean;
i : Integer;
begin begin
IsDocked := MsgWnd.docked; IsDocked := MsgWnd.docked;
if FCurrentSrcWin <> Sender then exit; if FCurrentSrcWin <> Sender then Exit;
if IsDocked then ChangeDocking(False); if IsDocked then ChangeDocking(False);
DeallocControls; DeallocControls;
FCurrentSrcWin := nil; FCurrentSrcWin := nil;
if IsDocked then begin if IsDocked then begin
if (SourceEditorManagerIntf.SourceWindowCount >= 1) then for i:=0 to SourceEditorManagerIntf.SourceWindowCount-1 do
ChangeDocking(True); if SourceEditorManagerIntf.SourceWindows[i]<>Sender then begin
MsgWnd.Docked := IsDocked; // any window is dockable!
ChangeDocking(True);
Break;
end;
end; end;
end; end;