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
|