diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index e45dfb5ba0..37d39853b1 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -933,6 +933,7 @@ type procedure SetTop(Value: Integer); protected function IsEqual(const AItem: TListItem): Boolean; + function IsOwnerData: Boolean; virtual; function GetCheckedInternal: Boolean; function GetOwner: TPersistent; override; public @@ -979,6 +980,8 @@ type procedure SetImageIndex(const AValue: TImageIndex); override; function GetSubItems: TStrings; override; procedure DoCacheItem; + protected + function IsOwnerData: Boolean; override; public procedure SetDataIndex(ADataIndex: Integer); procedure SetOwner(AOwner: TListItems); diff --git a/lcl/include/listitem.inc b/lcl/include/listitem.inc index c66ef0745e..f8072df273 100644 --- a/lcl/include/listitem.inc +++ b/lcl/include/listitem.inc @@ -487,12 +487,8 @@ end; {------------------------------------------------------------------------------} function TListItem.WSUpdateAllowed: Boolean; begin - Result := - ( (FFlags * [lifDestroying, lifCreated] = [lifCreated]) or - ((FFlags = []) and (FOwner <> nil) and (FOwner.FOwner <> nil) and - (FOwner.FOwner.OwnerData)) ) - and (FOwner <> nil) - and FOwner.WSUpdateAllowed; + Result := (FFlags * [lifDestroying, lifCreated] = [lifCreated]) and + (FOwner <> nil) and FOwner.WSUpdateAllowed; end; {------------------------------------------------------------------------------} @@ -505,6 +501,11 @@ begin and (FStates = AItem.FStates); end; +function TListItem.IsOwnerData: Boolean; +begin + Result := False; +end; + {------------------------------------------------------------------------------} { TListItem GetCheckedInternal } {------------------------------------------------------------------------------} @@ -730,7 +731,7 @@ begin then Include(FStates, AState) else Exclude(FStates, AState); - if not WSUpdateAllowed then Exit; + if not WSUpdateAllowed and not IsOwnerData then Exit; LV := FOwner.FOwner; TWSCustomListViewClass(LV.WidgetSetClass).ItemSetState(LV, GetIndex, Self, AState, AIsSet); end; @@ -834,3 +835,8 @@ begin FOwner.FOwner.DoGetOwnerData(Self); end; +function TOwnerDataListItem.IsOwnerData: Boolean; +begin + Result := (FOwner <> nil) and FOwner.WSUpdateAllowed; +end; +