Hi Dmitry,
I believe you are the Author/Maintainer of the Manual docker package?
Due to the introduction of multiply open SourceEditorWindows, and the
resulting changes in SrcEditorIntf the ManualDocker package needs some
updates.
I have attached a patch that should fix all issues.
Best Regards
Martin
Index: mandocking.pas
===================================================================
--- mandocking.pas (revision 1186)
+++ mandocking.pas (working copy)
@@ -35,6 +35,8 @@
{ TManualDocker }
TManualDocker = class(TObject)
+ private
+ FCurrentSrcWin: TWinControl;
protected
procedure ChangeDocking(DockingEnabled: Boolean);
procedure LoadState(cfg: TXMLConfig; var Astate: TDockState; const
StateName: string);
@@ -43,8 +45,12 @@
procedure SaveStates;
procedure AllocControls(AParent: TWinControl);
+ procedure DeallocControls;
procedure RealignControls;
procedure UpdateDockState(var astate: TDockState; wnd: TWinControl);
+
+ procedure SourceWindowCreated(Sender: TObject);
+ procedure SourceWindowDestroyed(Sender: TObject);
public
ConfigPath : AnsiString;
split : TSplitter;
@@ -87,8 +93,10 @@
i : Integer;
begin
if DockingEnabled then begin
- if not Assigned(SourceEditorWindow) or not Assigned(IDEMessagesWindow)
then Exit;
- if not Assigned(panel) then AllocControls(SourceEditorWindow);
+ if not (Assigned(SourceEditorManagerIntf) and
Assigned(SourceEditorManagerIntf.ActiveSourceWindow))
+ or not Assigned(IDEMessagesWindow)
+ then Exit;
+ if not Assigned(panel) then
AllocControls(SourceEditorManagerIntf.ActiveSourceWindow);
split.visible:=true;
panel.visible:=true;
with IDEMessagesWindow do
@@ -117,6 +125,7 @@
IDEMessagesWindow.BorderStyle := FloatBrd;
end;
IDEMessagesWindow.TabStop := true;
+ IDEMessagesWindow.Show;
end;
MsgWnd.docked := DockingEnabled;
cmd.Checked := DockingEnabled;
@@ -127,6 +136,11 @@
pths : array [0..1] of String;
i : Integer;
begin
+ if SourceEditorManagerIntf <> nil then begin
+ SourceEditorManagerIntf.RegisterChangeEvent(semWindowCreate,
@SourceWindowCreated);
+ SourceEditorManagerIntf.RegisterChangeEvent(semWindowDestroy,
@SourceWindowDestroyed);
+ end;
+
pths[0]:= LazarusIDE.GetPrimaryConfigPath;
pths[1]:= LazarusIDE.GetSecondaryConfigPath;
for i := 0 to length(pths)-1 do begin
@@ -169,6 +183,7 @@
procedure TManualDocker.AllocControls(AParent: TWinControl);
begin
+ FCurrentSrcWin := AParent;
panel := TPanel.Create(nil);
panel.Parent := AParent;
panel.BorderStyle := bsNone;
@@ -179,6 +194,12 @@
RealignControls;
end;
+procedure TManualDocker.DeallocControls;
+begin
+ FreeAndNil(split);
+ FreeAndNil(panel);
+end;
+
procedure TManualDocker.RealignControls;
begin
panel.Align := alClient;
@@ -193,6 +214,34 @@
astate.DockSize.cy := wnd.ClientHeight;
end;
+procedure TManualDocker.SourceWindowCreated(Sender: TObject);
+begin
+ if Assigned(FCurrentSrcWin) or (SourceEditorManagerIntf.SourceWindowCount >
1) then
+ exit;
+ if MsgWnd.Docked then
+ ChangeDocking(true);
+end;
+
+procedure TManualDocker.SourceWindowDestroyed(Sender: TObject);
+var
+ IsDocked: Boolean;
+begin
+ IsDocked := MsgWnd.docked;
+ if FCurrentSrcWin <> Sender then exit;
+ if IsDocked then
+ ChangeDocking(False);
+ FCurrentSrcWin := nil;
+ DeallocControls;
+ if IsDocked then begin
+ if (SourceEditorManagerIntf.SourceWindowCount >= 1) then
+ ChangeDocking(True)
+ else
+ if Assigned(IDEMessagesWindow) then
+ IDEMessagesWindow.Hide;
+ MsgWnd.Docked := IsDocked;
+ end;
+end;
+
procedure TManualDocker.LoadState(cfg: TXMLConfig; var Astate: TDockState;
const StateName: string);
begin
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus