diff --git a/components/lazcontrols/listfilteredit.pas b/components/lazcontrols/listfilteredit.pas index 0f188e5f3e..901779ffec 100644 --- a/components/lazcontrols/listfilteredit.pas +++ b/components/lazcontrols/listfilteredit.pas @@ -163,7 +163,7 @@ begin if (Operation=opRemove) and (FilteredListbox=AComponent) then begin IdleConnected:=False; - fNeedUpdate:=False; + fNeedFiltering:=False; fFilteredListbox:=nil; end; end; diff --git a/components/lazcontrols/listviewfilteredit.pas b/components/lazcontrols/listviewfilteredit.pas index 7fdf5b03f8..4119c793ca 100644 --- a/components/lazcontrols/listviewfilteredit.pas +++ b/components/lazcontrols/listviewfilteredit.pas @@ -180,7 +180,7 @@ begin if (Operation=opRemove) and (FilteredListview=AComponent) then begin IdleConnected:=False; - fNeedUpdate:=False; + fNeedFiltering:=False; fFilteredListview:=nil; end; end; diff --git a/components/lazcontrols/treefilteredit.pas b/components/lazcontrols/treefilteredit.pas index 6747a29dcc..a275ffee9f 100644 --- a/components/lazcontrols/treefilteredit.pas +++ b/components/lazcontrols/treefilteredit.pas @@ -793,7 +793,7 @@ begin if (Operation=opRemove) and (FilteredTreeview=AComponent) then begin IdleConnected:=False; - fNeedUpdate:=False; + fNeedFiltering:=False; fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@OnBeforeTreeDestroy); fFilteredTreeview:=nil; FreeAndNil(fBranches); diff --git a/lcl/editbtn.pas b/lcl/editbtn.pas index 9bb9c76c2a..220b2bf1a0 100644 --- a/lcl/editbtn.pas +++ b/lcl/editbtn.pas @@ -241,7 +241,7 @@ type protected fAlreadyFiltered: Boolean; fIsFirstUpdate: Boolean; - fNeedUpdate: Boolean; + fNeedFiltering, fNeedButtonEnabled: Boolean; fSelectedPart: TObject; // Select this node on next update fOnFilterItem: TFilterItemEvent; fOnFilterItemEx: TFilterItemExEvent; @@ -1182,6 +1182,8 @@ begin fIsFirstUpdate:=True; fIsFirstSetFormActivate:=True; TextHint:=rsFilter; + fNeedButtonEnabled:=True; + IdleConnected:=true; end; destructor TCustomControlFilterEdit.Destroy; @@ -1268,8 +1270,14 @@ end; procedure TCustomControlFilterEdit.OnAsync(Data: PtrInt); begin - if fNeedUpdate then + if fNeedFiltering then begin ApplyFilter(true); + fNeedFiltering:=False; + end; + if fNeedButtonEnabled then begin + Button.Enabled:=Text<>''; + fNeedButtonEnabled:=False; + end; IdleConnected:=false; if Assigned(fOnAfterFilter) then fOnAfterFilter(Self); @@ -1326,7 +1334,6 @@ end; procedure TCustomControlFilterEdit.ApplyFilter(Immediately: Boolean); begin if Immediately then begin - fNeedUpdate := False; SortAndFilter; if (fSelectedPart=Nil) and not fIsFirstUpdate then StoreSelection; // At first round the selection is from caller @@ -1344,7 +1351,7 @@ end; procedure TCustomControlFilterEdit.InvalidateFilter; begin if fAlreadyFiltered then Exit; - fNeedUpdate:=true; + fNeedFiltering:=true; IdleConnected:=true; end;