mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 12:36:15 +02:00
LazControls: Prevent TreeFilterEdit crashing when a form is closing, again. Issue #41509.
This commit is contained in:
parent
db66ebdbb3
commit
ceb97dc470
@ -136,6 +136,7 @@ type
|
|||||||
procedure SetFilteredTreeview(AValue: TCustomTreeview);
|
procedure SetFilteredTreeview(AValue: TCustomTreeview);
|
||||||
procedure SetShowDirHierarchy(AValue: Boolean);
|
procedure SetShowDirHierarchy(AValue: Boolean);
|
||||||
function FilterTree(Node: TTreeNode): Boolean;
|
function FilterTree(Node: TTreeNode): Boolean;
|
||||||
|
procedure BeforeTreeDestroy(Sender: TObject);
|
||||||
protected
|
protected
|
||||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||||
procedure MoveNext(ASelect: Boolean = False); override;
|
procedure MoveNext(ASelect: Boolean = False); override;
|
||||||
@ -703,6 +704,7 @@ end;
|
|||||||
|
|
||||||
destructor TTreeFilterEdit.Destroy;
|
destructor TTreeFilterEdit.Destroy;
|
||||||
begin
|
begin
|
||||||
|
FilteredTreeview:=nil;
|
||||||
FreeAndNil(fBranches);
|
FreeAndNil(fBranches);
|
||||||
FreeAndNil(fSelectionList);
|
FreeAndNil(fSelectionList);
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
@ -713,19 +715,27 @@ begin
|
|||||||
Result := 'btnfiltercancel';
|
Result := 'btnfiltercancel';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTreeFilterEdit.BeforeTreeDestroy(Sender: TObject);
|
||||||
|
begin
|
||||||
|
FreeAndNil(fBranches);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTreeFilterEdit.SetFilteredTreeview(AValue: TCustomTreeview);
|
procedure TTreeFilterEdit.SetFilteredTreeview(AValue: TCustomTreeview);
|
||||||
begin
|
begin
|
||||||
if fFilteredTreeview = AValue then Exit;
|
if fFilteredTreeview = AValue then Exit;
|
||||||
if fFilteredTreeview <> nil then
|
if fFilteredTreeview <> nil then
|
||||||
begin
|
begin
|
||||||
fFilteredTreeview.RemoveFreeNotification(Self);
|
fFilteredTreeview.RemoveFreeNotification(Self);
|
||||||
ForceFilter('');
|
fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@BeforeTreeDestroy);
|
||||||
|
if not (csDestroying in ComponentState) then
|
||||||
|
ForceFilter('');
|
||||||
FreeAndNil(fBranches);
|
FreeAndNil(fBranches);
|
||||||
end;
|
end;
|
||||||
fFilteredTreeview := AValue;
|
fFilteredTreeview := AValue;
|
||||||
if fFilteredTreeview <> nil then
|
if fFilteredTreeview <> nil then
|
||||||
begin
|
begin
|
||||||
InternalSetFilter(Text);
|
InternalSetFilter(Text);
|
||||||
|
fFilteredTreeview.AddHandlerOnBeforeDestruction(@BeforeTreeDestroy);
|
||||||
fFilteredTreeview.FreeNotification(Self);
|
fFilteredTreeview.FreeNotification(Self);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -784,6 +794,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
IdleConnected:=False;
|
IdleConnected:=False;
|
||||||
fNeedFiltering:=False;
|
fNeedFiltering:=False;
|
||||||
|
fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@BeforeTreeDestroy);
|
||||||
fFilteredTreeview:=nil;
|
fFilteredTreeview:=nil;
|
||||||
FreeAndNil(fBranches);
|
FreeAndNil(fBranches);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user