From d0671c7447fe16530108e75905baefa147ed59ab Mon Sep 17 00:00:00 2001 From: Juha Date: Tue, 23 May 2023 11:32:55 +0300 Subject: [PATCH] LazControls: Prevent a ListBox flashing when ListFilterEdit is updated. Move BeginUpdate up. Issue #40279, patch by n7800. --- components/lazcontrols/listfilteredit.pas | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/components/lazcontrols/listfilteredit.pas b/components/lazcontrols/listfilteredit.pas index efec1a2b75..2e8bb9d30e 100644 --- a/components/lazcontrols/listfilteredit.pas +++ b/components/lazcontrols/listfilteredit.pas @@ -200,21 +200,24 @@ begin clb:=Nil; if fFilteredListbox is TCustomCheckListBox then clb:=TCustomCheckListBox(fFilteredListbox); - fFilteredListbox.Clear; fFilteredListbox.Items.BeginUpdate; - for i:=0 to fSortedData.Count-1 do begin - s:=fSortedData[i]; - ListInd:=fFilteredListbox.Items.AddObject(s, fSortedData.Objects[i]); - if Assigned(fSelectedPart) then - fFilteredListbox.Selected[i]:=fSelectedPart=fSortedData.Objects[i]; - if Assigned(clb) then begin - if Assigned(OnCheckItem) then - clb.Checked[ListInd]:=OnCheckItem(fSortedData.Objects[i]) - else - clb.Checked[ListInd]:=fCheckedItems.Contains(s); + try + fFilteredListbox.Clear; + for i:=0 to fSortedData.Count-1 do begin + s:=fSortedData[i]; + ListInd:=fFilteredListbox.Items.AddObject(s, fSortedData.Objects[i]); + if Assigned(fSelectedPart) then + fFilteredListbox.Selected[i]:=fSelectedPart=fSortedData.Objects[i]; + if Assigned(clb) then begin + if Assigned(OnCheckItem) then + clb.Checked[ListInd]:=OnCheckItem(fSortedData.Objects[i]) + else + clb.Checked[ListInd]:=fCheckedItems.Contains(s); + end; end; + finally + fFilteredListbox.Items.EndUpdate; end; - fFilteredListbox.Items.EndUpdate; if FSimpleSelection and (fSortedData.Count > 0) then begin if (Text<>'') then begin MoveTo(0, true);