From: <car...@us...> - 2006-02-13 10:44:17
|
Revision: 586 Author: carlobar Date: 2006-02-13 02:43:58 -0800 (Mon, 13 Feb 2006) ViewCVS: http://svn.sourceforge.net/instantobjects?rev=586&view=rev Log Message: ----------- InstantExplorer memory leak resolved (bug n. 1423344) Modified Paths: -------------- trunk/Source/Core/InstantExplorer.pas Modified: trunk/Source/Core/InstantExplorer.pas =================================================================== --- trunk/Source/Core/InstantExplorer.pas 2006-02-13 07:25:37 UTC (rev 585) +++ trunk/Source/Core/InstantExplorer.pas 2006-02-13 10:43:58 UTC (rev 586) @@ -145,6 +145,7 @@ procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); procedure TreeViewGetImageIndex(Sender: TObject; Node: TTreeNode); + procedure TreeViewNodeDeletion(Sender: TObject; Node: TTreeNode); protected procedure ChangeNode(Node: TTreeNode); virtual; function CreateContentEditor(AOwner: TComponent; @@ -396,26 +397,6 @@ SaveOnChange: TTVChangedEvent; ChildCount: Integer; - procedure FreeTreeViewNodeData(ATreeNodes: TTreeNodes); - var - Obj: TObject; - begin - with ATreeNodes do - begin - Node := GetFirstNode; - while Node <> nil do - begin - // Don't test 'Assigned(Node.Data)' because value - // of 'Node.Data' could be -1 ('NotLoaded') - if Integer(Node.Data) > 0 then - begin - Obj := TObject(Node.Data); - FreeAndNil(Obj); - end; - Node := Node.GetNext; - end; - end; - end; begin ItemIndex := 0; with TreeView do @@ -424,8 +405,6 @@ OnChange := nil; Items.BeginUpdate; try - if Assigned(FRootObject) then - FreeTreeViewNodeData(Items); if Assigned(Selected) then ItemIndex := Selected.AbsoluteIndex; @@ -689,6 +668,7 @@ {$IFDEF MSWINDOWS} Result.ShowRoot := ShowRoot; {$ENDIF} + Result.OnDeletion := TreeViewNodeDeletion; end; destructor TInstantExplorer.Destroy; @@ -849,6 +829,19 @@ LoadChildren); end; +procedure TInstantExplorer.TreeViewNodeDeletion(Sender: TObject; Node: TTreeNode); +var + Obj: TObject; +begin + // Don't test 'Assigned(Node.Data)' because value + // of 'Node.Data' could be -1 ('NotLoaded') + if Integer(Node.Data) > 0 then + begin + Obj := TObject(Node.Data); + FreeAndNil(Obj); + end; +end; + function TInstantExplorer.NodeIsLoaded(Node: TTreeNode): Boolean; begin if Node.HasChildren then |