AnchorDocking: Fix memory management of FRestoreLayouts between AnchorDockMaster and TAnchorDesktopOpt classes.

git-svn-id: trunk@49788 -
This commit is contained in:
juha 2015-09-08 20:54:36 +00:00
parent 3f0e11a05b
commit 01fb926e17
3 changed files with 18 additions and 16 deletions

View File

@ -2350,6 +2350,7 @@ begin
FHeaderFilled:=true;
FPageControlClass:=TAnchorDockPageControl;
FPageClass:=TAnchorDockPage;
FRestoreLayouts:=TAnchorDockRestoreLayouts.Create;
end;
destructor TAnchorDockMaster.Destroy;
@ -2360,6 +2361,7 @@ var
{$ENDIF}
begin
QueueSimplify:=false;
FreeAndNil(FRestoreLayouts);
FreeAndNil(fPopupMenu);
FreeAndNil(fTreeNameToDocker);
if FControls.Count>0 then begin
@ -5937,14 +5939,12 @@ begin
EnableAutoSizing;
end;
procedure TAnchorDockSplitter.SetBoundsKeepDockBounds(ALeft, ATop, AWidth,
AHeight: integer);
procedure TAnchorDockSplitter.SetBoundsKeepDockBounds(ALeft, ATop, AWidth, AHeight: integer);
begin
inherited SetBounds(ALeft,ATop,AWidth,AHeight);
end;
function TAnchorDockSplitter.SideAnchoredControlCount(Side: TAnchorKind
): integer;
function TAnchorDockSplitter.SideAnchoredControlCount(Side: TAnchorKind): integer;
var
Sibling: TControl;
i: Integer;

View File

@ -13,10 +13,13 @@ uses
type
{ TAnchorDesktopOpt }
TAnchorDesktopOpt = class(TAbstractDesktopDockingOpt)
private
FTree: TAnchorDockLayoutTree;
FRestoreLayouts: TAnchorDockRestoreLayouts;
FRestoreLayoutsCreated: Boolean;
public
procedure LoadDefaultLayout;
procedure LoadLayoutFromConfig(Path: string; aXMLCfg: TRttiXMLConfig);
@ -52,19 +55,21 @@ end;
constructor TAnchorDesktopOpt.Create(aUseIDELayouts: Boolean);
begin
inherited;
inherited Create(aUseIDELayouts);
FTree := TAnchorDockLayoutTree.Create;
FRestoreLayouts := TAnchorDockRestoreLayouts.Create;
if aUseIDELayouts then
DockMaster.RestoreLayouts := Self.FRestoreLayouts;
FRestoreLayouts := DockMaster.RestoreLayouts
else begin
FRestoreLayouts := TAnchorDockRestoreLayouts.Create;
FRestoreLayoutsCreated := True;
end;
end;
destructor TAnchorDesktopOpt.Destroy;
begin
FTree.Free;
FRestoreLayouts.Free;
if FRestoreLayoutsCreated then
FRestoreLayouts.Free;
inherited Destroy;
end;

View File

@ -291,8 +291,7 @@ type
procedure InitLayoutList;
public
constructor Create(const aName: String; const aUseIDELayouts: Boolean);
constructor Create(const aName: String;
const aUseIDELayouts: Boolean; const aIsDocked: Boolean);
constructor Create(const aName: String; const aUseIDELayouts, aIsDocked: Boolean);
destructor Destroy; override;
procedure Assign(Source: TDesktopOpt; const AssignName: Boolean = False);
procedure StoreWindowPositions;
@ -960,14 +959,12 @@ end;
{ TDesktopOpt }
constructor TDesktopOpt.Create(const aName: String;
const aUseIDELayouts: Boolean);
constructor TDesktopOpt.Create(const aName: String; const aUseIDELayouts: Boolean);
begin
Create(aName, aUseIDELayouts, Assigned(IDEDockMaster));
end;
constructor TDesktopOpt.Create(const aName: String;
const aUseIDELayouts: Boolean; const aIsDocked: Boolean);
constructor TDesktopOpt.Create(const aName: String; const aUseIDELayouts, aIsDocked: Boolean);
begin
if aIsDocked and not Assigned(IDEDockMaster) then
raise Exception.Create('Internal error: TEnvironmentOptions.CreateDesktop cannot create docked desktop in undocked environment.');