From 4d7224555268fbcddaf0a46e18497ec84ef5f5cb Mon Sep 17 00:00:00 2001 From: Juha Date: Thu, 27 Jan 2022 13:21:16 +0200 Subject: [PATCH] LCL: Solve most performance issues with virtual TListView (OwnerData=True). Issue #39324, patch by d7_2_laz. --- lcl/include/customlistview.inc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lcl/include/customlistview.inc b/lcl/include/customlistview.inc index affd0a2b8c..c0e8cd0908 100644 --- a/lcl/include/customlistview.inc +++ b/lcl/include/customlistview.inc @@ -1443,13 +1443,19 @@ begin if not (lffSelectedValid in FFlags) or MultiSelect then begin FSelected := nil; - for i := 0 to Items.Count - 1 do + if (not FOwnerData) or (FSelectedIdx >= 0) then begin - if Items[i].Selected then - begin - FSelected := Items[i]; - break; - end; + if MultiSelect and FOwnerData and (FSelectedIdx >= 0) then + FSelected := Items[FSelectedIdx] + else + for i := 0 to Items.Count - 1 do + begin + if Items[i].Selected then + begin + FSelected := Items[i]; + break; + end; + end; end; Include(FFlags, lffSelectedValid); end;