mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 12:39:29 +02:00
LCL: Improved TListView selection handling. Issue #34877, patch from Yuriy Sydorov.
git-svn-id: trunk@60703 -
This commit is contained in:
parent
3b6eb99826
commit
a8026f0983
@ -301,7 +301,10 @@ begin
|
||||
end;
|
||||
LVN_ITEMCHANGED:
|
||||
begin
|
||||
Item := Items[nm^.iItem];
|
||||
if nm^.iItem < 0 then
|
||||
Item := nil
|
||||
else
|
||||
Item := Items[nm^.iItem];
|
||||
//DebugLn('TCustomListView.CNNotify Count=',dbgs(Items.Count),' nm^.iItem=',dbgs(nm^.iItem),' destroying=',dbgs(lifDestroying in Item.FFlags));
|
||||
if (Item <> nil) and (not OwnerData) and (lifDestroying in Item.FFlags) then
|
||||
begin
|
||||
@ -311,8 +314,6 @@ begin
|
||||
InvalidateSelected;
|
||||
end else
|
||||
begin
|
||||
// owner data
|
||||
Change(Item, nm^.uChanged);
|
||||
if (nm^.uChanged = LVIF_STATE) then
|
||||
begin
|
||||
// checkbox
|
||||
@ -340,12 +341,13 @@ begin
|
||||
// select state changed
|
||||
if (nm^.uNewState and LVIS_SELECTED) = 0 then
|
||||
begin
|
||||
if not OwnerData and (FSelected = Item) then
|
||||
InvalidateSelected
|
||||
else if OwnerData and (nm^.iItem=FSelectedIdx) then
|
||||
InvalidateSelected;
|
||||
if nm^.iItem > -1 then
|
||||
DoSelectItem(Item, False);
|
||||
if not OwnerData then
|
||||
begin
|
||||
if FSelected = Item then
|
||||
InvalidateSelected
|
||||
end else
|
||||
if (nm^.iItem < 0) or (nm^.iItem = FSelectedIdx) then
|
||||
InvalidateSelected;
|
||||
end else
|
||||
begin
|
||||
FSelected := Item;
|
||||
@ -355,11 +357,13 @@ begin
|
||||
FSelectedIdx:=nm^.iItem;
|
||||
end;
|
||||
//DebugLn('TCustomListView.CNNotify FSelected=',dbgs(FSelected));
|
||||
if nm^.iItem > -1 then
|
||||
DoSelectItem(Item, True);
|
||||
end;
|
||||
Change(Item, nm^.uChanged);
|
||||
DoSelectItem(Item, (nm^.uNewState and LVIS_SELECTED) <> 0);
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else
|
||||
Change(Item, nm^.uChanged);
|
||||
end;
|
||||
end;
|
||||
// LVN_GETINFOTIP:
|
||||
@ -606,7 +610,8 @@ end;
|
||||
{------------------------------------------------------------------------------}
|
||||
procedure TCustomListView.DoSelectItem(AItem: TListItem; ASelected: Boolean);
|
||||
begin
|
||||
AItem.Selected:=ASelected;
|
||||
if Assigned(AItem) then
|
||||
AItem.Selected:=ASelected;
|
||||
if Assigned(FOnSelectItem) and
|
||||
([lffItemsMoving, lffItemsSorting] * FFlags = []) then
|
||||
FOnSelectItem(Self, AItem, ASelected);
|
||||
|
Loading…
Reference in New Issue
Block a user